子弹运动SDL / c ++

时间:2013-06-11 20:43:17

标签: c++ sdl game-physics

单击Space时,我想要一颗子弹移动。首先,当按下空间时,子弹图像会被打开,同时计时器启动,当它达到5000毫秒时,图像的x值应该改变。这是我的代码:

SDL_Rect bulletRect;
bulletRect.x = dstX+31;  //dstX/Y is the source destination of another image where the bullet should be drawn
bulletRect.y = dstY+10.5;
SDL_Surface *bullet = IMG_Load(bullet.png");


if (drawBullet) //bool set to true in the space key event.
    {            
        SDL_BlitSurface(bullet, NULL, screen, &bulletRect);

        //timer
        my_timer.start(); //starts the timer

        if (SDL_GetTicks() == 5000) //if 5 sec 
        {
            bulletRect.x += 10;
        }
    }

图像只是blitted但5秒后没有任何反应。怎么了?

2 个答案:

答案 0 :(得分:0)

你应该SDL_GetTicks() >= 5000,而不是检查==5000,否则你只会在纯粹的运气碰巧达到5000时输入条件。

来自SDL's documentation,SDL_GetTicks函数:返回自SDL库初始化以来的毫秒数。如果程序运行超过49.7天

,此值将回绕

所以如果你检查它自上次移动起已经过了5秒(不知道你还想尝试做什么),你想要存储当前的滴答数并在下一个循环中使用它来进行比较(检查先前和当前之间的差异是否> 5000)

答案 1 :(得分:0)

您的条件声明

if (SDL_GetTicks() == 5000) //if 5 sec 
{
    bulletRect.x += 10;
}

在声明

if (drawBullet) //bool set to true in the space key event

表示只按空格键时只检查一次计时器。将其移到if(drawBullet)

之外