Я работаю над прототипом для shmup-игры на C++, используя SDL ... Сейчас я просто пытаюсь заставить основы работать без использования классов. Теперь у меня есть так, что он стреляет несколькими пулями, но он ведет себя странно, что, по моему мнению, связано с тем, как сбрасывается счетчик ... Пули появятся и исчезнут, а некоторые будут мигать в исходном месте, которое они снимали , и иногда будет задержка до того, как можно будет снова выстрелить, даже если предел не на экране ... И иногда персонаж игрока внезапно прыгает вправо и может двигаться только вверх и вниз. Как исправить это, чтобы он плавно стрелял? Я включил весь соответствующий код ...Как сделать стрельбу несколькими пулями правильно, используя цикл for?
[edit] Обратите внимание, что я намерен очистить его и перенести все это в класс, как только я получу это. Это простой прототип, поэтому я могут иметь основы игры, запрограммированной в.
[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; }
Вы не показываете достаточно кода. Что такое ePos? Я считаю, что в ваших поисках простоты вы усложнили ситуацию. ИМО вы должны создать простой класс bullet, а затем просто Bullet :: update() в вашем игровом цикле и т. Д. –
Хорошо ... Я сейчас работаю над тем, чтобы переместить все в класс. Должен ли я использовать циклы for и массивы, или я должен изучать использование новых и удаленных операторов? – user1122136