This repository has been archived on 2026-05-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

67 lines
1.7 KiB
C++
Raw Permalink Normal View History

/*
* This demo just expands on the 'gravity' demo to show how one could create a primitive bouncing effect
*/
#include <libsdlgame/libsdlgame.h>
int main(int argc, char *argv[])
{
Display2D display = Display2D();
Game &myGame = Game::NewSingleton();
Animation *anim = NULL;
Actor ball;
SpriteStrip *strip = NULL;
float gravity = 0.1;
unsigned int lastTimer = 0;
Vector actorPos;
Vector actorVel;
myGame.initSDL();
myGame.initVideo(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
display.initVideo((Vector){0,0,0}, 640, 480, 32, SDL_HWSURFACE);
display.setActive(1);
myGame.windows.push_back(&display);
strip = myGame.newSpriteStrip("ball");
strip->loadFromFile("ball.png", 32, 32, (Vector){0,0,0});
anim = myGame.newAnimation("ball");
anim->setStrip(strip, 0, 0, (Vector){0,0,0});
ball.addAnimation(anim, STATE_DEFAULT);
ball.setState(STATE_MOVERIGHT | STATE_MOVEUP);
ball.setPosition((Vector){0,400,0});
ball.setVelocity((Vector){.25, 1.5, 0});
display.addActor(&ball, LAYER_SPRITE1);
lastTimer = SDL_GetTicks();
while ( 1 ) {
actorPos = ball.getPosition();
actorVel = ball.getVelocity();
/* this is what does the bounce */
if ( actorPos.y > (480 - ball.nextFrame()->h) ) {
actorVel.y = -(actorVel.y);
actorPos.y = (480 - ball.nextFrame()->h);
ball.setPosition(actorPos);
}
// -- end of bouncing
if ( actorPos.x >= 640 ) {
break;
}
if ( (SDL_GetTicks() - lastTimer) >= (1000/30) ) {
myGame.update();
actorVel.y -= gravity;
ball.setVelocity(actorVel);
lastTimer = SDL_GetTicks();
} else {
myGame.update(1);
}
if ( myGame.keyHeldDown(SDLK_ESCAPE) ) {
break;
}
myGame.finishFrame();
}
return 0;
}