Понедельник, 18 Ноября 2024, 11:26

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Windmill 2D - проблема с кодом
ilgamerДата: Вторник, 14 Августа 2012, 05:46 | Сообщение # 1
Needle Games
Сейчас нет на сайте
Прошел гид windmill до звука. Уже разбираюсь в движении персонажа и т.п.
Написал код для пули, вылетающей при нажатии пробела:
В game()
Code
if(KeyCheck(DIK_SPACE)){isBullet=true;}


В game() так же добавил код, контролирующий направление полета пули. То есть, пока пуля существует, она летит в направлении в котором находился герой.

Код движения героя:
Code
    if(KeyCheck(DIK_W) && isKey == false) {direction=1; if(!isBullet){bulletDirection=1;}}
   else if(KeyCheck(DIK_S) && isKey == false) {direction=2; if(!isBullet){bulletDirection=2;}}
   else if(KeyCheck(DIK_A) && isKey == false) {direction=3; if(!isBullet){bulletDirection=3;}}
   else if(KeyCheck(DIK_D) && isKey == false) {direction=4; if(!isBullet){bulletDirection=4;}}
   else {direction=0;}


А вот код управления полетом пули(все там же, в game):
Code

switch(bulletDirection)
{
case 1: bullet_y-=(bulletStep*timeDelta)/1000; break;
case 2: bullet_y+=(bulletStep*timeDelta)/1000; break;
case 3: bullet_x-=(bulletStep*timeDelta)/1000; break;
case 4: bullet_x+=(bulletStep*timeDelta)/1000; break;
}


Так вот пуля летит только влево и вверх. То есть, где стоит знак "-=", а "+=" не воспринимает. Помогите пожалуйста.

Исходник




Сообщение отредактировал ilgamer - Вторник, 14 Августа 2012, 06:08
ArchidoДата: Вторник, 14 Августа 2012, 11:15 | Сообщение # 2
Сэнсэй
Сейчас нет на сайте
У меня пуля улетала вверх в бесконечность и усе, больше с ней ничего не происходило.
Беглый осмотр показал - что с логикой в игре проблемы и с типами int/float (float -> int) у bullet_x, bullet_y.

Я сделал так:
Code

float bullet_x=gun_x,  bullet_y=gun_y; //заменил int на float
const int bulletStep=400; //увеличил значение до 400

...

if(bullet_x < -12 || bullet_y < -12 || bullet_x > wnd_w-12 || bullet_y > wnd_h-12) {
    drawBullet=false;    
    isBullet = false;    
}    
//тут чутка изменил условие и добавил IsBullet = false, таким образом выход за экран означает, что пули "больше нет". Таким образом, теперь можно "создать новую".

...

if(KeyCheck(DIK_SPACE) && isBullet==false && isKey == false) {isBullet=true; isKey=true; bullet_x = gun_x; bullet_y = gun_y;}
//Добавил "bullet_x = gun_x; bullet_y = gun_y;". Т.е. при создании новой пули, надо заново задать ее координаты


Так у меня все работает smile


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Вторник, 14 Августа 2012, 11:17
ilgamerДата: Вторник, 14 Августа 2012, 13:25 | Сообщение # 3
Needle Games
Сейчас нет на сайте
Огромное спасибо, Archido! Плюсую!



Сообщение отредактировал ilgamer - Вторник, 14 Августа 2012, 13:40
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг