单击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秒后没有任何反应。怎么了?
答案 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)
之外