#include <irrlicht.h>
//los namespace para definir funciones de irrlicht
using namespace irr;
using namespace core;
using namespace video;
#if defined(_MSC_VER)
#pragma comment(lib, "Irrlicht.lib")
#endif
//Variables Globales
ITexture *image;
vector2d<f32> position; //posicion actual
vector2d<f32> target; // la posicion donde se le dio clic
vector2d<f32> direction;
f32 speed = 0.2f;
s32 screenWidth = 640;
s32 screenHeight = 480;
//Creo una clase para definir los eventos y sus acciones al presionar los botones
//NOTA: Si le damos clic en la pantalla podremos hacer que siga la posicion donde dimos clic
class MyEventReceiver : public IEventReceiver
{
public:
//Creo una funcion virtual para manejar el evento
virtual bool OnEvent( const SEvent &event )
{
//Si es un evento de mouse
if (event.EventType == EET_MOUSE_INPUT_EVENT)
{
//al presionar el boton izquierdo del mouse
if (event.MouseInput.isLeftPressed())
{
target.X = (f32)event.MouseInput.X; //posicion x donde se dio clic
target.Y = (f32)event.MouseInput.Y; //posicion y donde se dio clic
//Calculamos la direccion y normalizamos el vector
direction = target - position;
direction.normalize();
}
}
return false;
}
};
//Se crea una funcion update para ir dibujando y actualizando la posicion de la pelota
void update( f32 deltaTime )
{
position += (speed * deltaTime) * direction;
//hace que retroceda para que no se salga de la pantalla del lado horizontal
if (position.X > screenWidth - image->getSize().Width || position.X < 0)
{
direction.X *= -1;
}
//hace que retroceda para que no se salga de la pantalla del lado vertical
if (position.Y > screenHeight - image->getSize().Height || position.Y < 0)
{
direction.Y *= -1;
}
}
int main()
{
//define un device para la pantalla
IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d<u32>(640, 480), 16, false,
false, false, 0);
//en caso de error
if (!device)
return 1;
//Creo un driver de video
IVideoDriver *driver = device->getVideoDriver();
//Creo un objeto de mi clase
MyEventReceiver receiver;
device->setEventReceiver( &receiver );
//Asigno la textura
image = driver->getTexture("pelota.png");
//Establesco su posicion y direccion
position.set(0, 0);
direction.set(1, 1);
//asigno un tiempo
u32 timeSinceElapsed = device->getTimer()->getTime();
//Gameloop
while (device->run())
{
//Asigno otro tiempo
const u32 currentTime = device->getTimer()->getTime();
const f32 deltaTime = (f32)(currentTime - timeSinceElapsed);
timeSinceElapsed = currentTime;
//mando a llamar a mi funcion
update(deltaTime);
driver->beginScene(true, true, SColor(255,255,255,255));
//dibujo mi imagen 2D
driver->draw2DImage(image, position2d<s32>((s32)position.X, (s32)position.Y),
rect<s32>(0, 0, 50, 50), 0, SColor(255, 255, 255, 255), true);
//NOTA: los dos ultimos parametros de rect, son las medidas de la imagen en pixeles
driver->endScene();
}
//cerrar device
device->drop();
return 0;
}
No hay comentarios:
Publicar un comentario