我正在使用 SDL 在 C++ 中开发一个 shmup 游戏的原型......现在我只是想在不使用类的情况下让基础工作。现在,我有它,所以它可以发射多发子弹,但它的行为很奇怪,我相信这是因为计数器的重置方式......子弹会出现和消失,有些会在它们被射击的原始位置继续闪烁,有时即使屏幕上没有限制,在再次射击之前也会有延迟......有时玩家角色会突然向右跳,只能上下移动。我该如何解决这个问题才能顺利拍摄?我已经包含了所有相关的代码......
[编辑] 请注意,一旦我弄清楚了,我打算清理它并将其全部转移到一个类中......这只是一个简单的原型,所以我可以编写游戏的基础知识。
[edit2] ePos 是敌人位置,pPos 是玩家位置。
//global
SDL_Surface *bullet[10] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
bool shot[10];
int shotCount = 0;
SDL_Rect bPos[10];
//event handler
case SDLK_z: printf("SHOT!"); shot[shotCount] = true; ++shotCount; break;
//main function
for(int i = 0; i <= 9; i++)
{
shot[i] = false;
bullet[i] = IMG_Load("bullet.png");
}
//game loop
for(int i = 0; i <= shotCount; i++)
{
if(shot[i] == false)
{
bPos[i].x = pPos.x;
bPos[i].y = pPos.y;
}
if(shot[i] == true)
{
bPos[i].y -= 8;
SDL_BlitSurface(bullet[i], NULL, screen, &bPos[i]);
if( (bPos[i].y + 16 == ePos.y + 16) || (bPos[i].x + 16 == ePos.x + 16) )
{
shot[i] = false;
}
else if(bPos[i].y == 0)
{
shot[i] = false;
}
}
}
if(shotCount >= 9) { shotCount = 0; }