Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 20:11   #1
Skrip
Пользователь
 
Аватар для Skrip
 
Регистрация: 04.06.2009
Сообщений: 45
По умолчанию Переключение между башнями в игре

Я пишу игру, где две башни стреляют друг в друга. У меня возникла проблема переключения между стреляющими башнями.
Процедура выстрела одной из башен:
Код:
procedure Vistrel;
var temp: extended;
begin
  if VistrelJ then
  begin
    DrowJdroBullet;
    x := x - dxBullet;
    temp := x * (Sin(alfa) / Cos(alfa)) + (25 * x * x ) / (Sila * Cos(alfa) * Cos(alfa));
    y := round(temp);
    if y>= 500 then
    begin
      VistrelJ := false;
      rel := true;
      x := 0; y := 0;
    end;
  end;

  if (VistrelB) then
  begin
    DrowJadroBullet;
    x := x + dxBullet;
    temp := x * (Sin(alfa) / Cos(alfa)) - (25 * x * x ) / (Sila * Cos(alfa) * Cos(alfa));
    y := -round(temp);
    if y>= 500 then
    begin
      VistrelB := false;
      rel := false;
      x := 0; y := 0;
    end;
  end;
end;
и:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if rel then DrowPush1(nsB)
  else DrowPush2(nsJ);

  Buffer.Canvas.Draw(0,0,BufFon);

  Vistrel;

  if rel then Buffer.Canvas.Draw(xB,yB,BufPicB)
  else Buffer.Canvas.Draw(xJ,yJ,BufPicJ);

  Buffer.Canvas.Draw(xBullet+x,yBullet + y,BufPic);
  Form1.Canvas.Draw(0,0,Buffer);
end;
end.
Первый выстрел проходит нормально. Потом переключается на другую башню. И все, больше не хочет стрелять. не могу понять, что здесь не так? Как следует сделать, чтоб после выстрела одной башни, можно было стрелять другой?
Я спокойный, вежливый и уравновешенный человек
Skrip вне форума Ответить с цитированием
Старый 15.05.2011, 21:53   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

ну так у вас VistrelJ и VistrelB присваиваются false и всё, никто ни в кого не стреляет )
где-то же им надо и true присваивать, верно?

> Как следует сделать, чтоб после выстрела одной башни, можно было стрелять другой?

Код:
VistrelJ := false;
VistrelB := true;

.......

VistrelB := false;
VistrelJ := true;
типа того. А ещё лучше индекс башни завести. Если у вас 3 или 33 башни будет:

Код:
inc(firingTowerIndex);
if (firingTowerIndex >= с_maxTowers) then
  firingTowerIndex := 0;
//
Vistrel(firingTowerIndex); // стреляем из башни с переданным индексом
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 16.05.2011, 04:20   #3
Skrip
Пользователь
 
Аватар для Skrip
 
Регистрация: 04.06.2009
Сообщений: 45
По умолчанию

Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of

  VK_Space:
  begin
  if rel then VistrelB := true
  else VistrelJ := true;
  end;
  end;
end;
вот в этой процедуре у меня происходит присвоение true выстрелу. Если я это сделаю в процедуре Vistrel, то после выстрела одной башни сразу начинает стрелять другая, не дожидаясь команды с клавиатуры.
Я спокойный, вежливый и уравновешенный человек
Skrip вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переключение между формами Deeller Общие вопросы Delphi 5 11.05.2011 10:45
Переключение между таблицами. lovetolaugh БД в Delphi 5 15.04.2011 08:31
Не работает переключение между формами!!! Нюся Microsoft Office Access 3 23.01.2011 12:18
Переключение между книгами stas77 Microsoft Office Excel 5 03.11.2009 19:00
Переключение между формами (Delphi) Zo0M Помощь студентам 3 09.07.2009 09:05