Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 13.09.2012, 15:12
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

В этом движке нет какого-нибудь события типа OnCollision? Когда два спрайта пересекают друг друга.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #17  
Старый 13.09.2012, 15:52
Shpingalet Shpingalet вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 13
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
В этом движке нет какого-нибудь события типа OnCollision? Когда два спрайта пересекают друг друга.
Нет, есть только DoCollision. Но все проблемы я уже решил. переписал код вот так:
Код:
if Sprite is TBallSprite then                           
      begin
        if bump=false then
          if (collisionline(x1,x2,x,x+60,y1,y2,y+18,y+18)or collisionline(x1+10,x2+10,x,x+60,y1,y2,y+18,y+18)) then
            vector:=360-vector else
          if (collisionline(x1,x2,x,x+60,y1+10,y2+10,y,y)or collisionline(x1+10,x2+10,x,x+60,y1+10,y2+10,y,y)) then
            vector:=360-vector else
          begin
            if vector<=180 then
               vector:=180-vector else
               vector:=540-vector;
          end;
          dead;
          bump:=true;
        end;
Все работает идеально.
UPD а вот запостил, посмотрел на него и еще сократил на 2 строки

Последний раз редактировалось Shpingalet, 13.09.2012 в 15:56.
Ответить с цитированием
  #18  
Старый 13.09.2012, 16:21
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Движок как называется? Должно быть DoCollision виртуальной, в нее и добавить нотификацию о событии.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #19  
Старый 14.09.2012, 09:14
Shpingalet Shpingalet вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 13
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Движок как называется? Должно быть DoCollision виртуальной, в нее и добавить нотификацию о событии.
Если я Вас правильно понял, то у меня столкновение обрабатывается в процедуре
Код:
procedure TMapSprite.DoCollision(Sprite: TSprite; var Done: Boolean);
...
if Sprite is TBallSprite then                  
...
Новая версия программы:
Вложения
Тип файла: rar source.rar (30.3 Кбайт, 9 просмотров)
Тип файла: rar exe.rar (212.9 Кбайт, 11 просмотров)
Ответить с цитированием
  #20  
Старый 14.09.2012, 09:20
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну супер, вечером заценю твою игруху
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #21  
Старый 14.09.2012, 13:54
Shpingalet Shpingalet вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 13
Репутация: 10
По умолчанию

Итак, решил я запилить меню в игре и сразу получил ошибку. Так как использую 2 формы впервые, причем форма с игрой у меня была написана раньше и обзывалась Form1, я ее переименовал в Form2, а форму с меню сделал и назвал Form1. Соответственно немножко подправил .dpr. Но при запуске пишет ошибку:

Что самое интересное, если не сбрасывая проект, запустить его еще раз, то появляется уже ошибка:

И на фоне запускается игра...
Не пойму где что не так?
Вложения
Тип файла: rar source.rar (252.1 Кбайт, 7 просмотров)
Ответить с цитированием
  #22  
Старый 14.09.2012, 13:59
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Shpingalet
Итак, решил я запилить меню в игре и сразу получил ошибку. Так как использую 2 формы впервые, причем форма с игрой у меня была написана раньше и обзывалась Form1, я ее переименовал в Form2, а форму с меню сделал и назвал Form1. Соответственно немножко подправил .dpr. Но при запуске пишет ошибку
А зачем правил dpr? Обычно при переименовании форм они в dpr сами переименовываются. И вообще, лучше именовать формы более содержательно: MainForm, MenuForm и т.д.
Ответить с цитированием
  #23  
Старый 14.09.2012, 14:10
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Посмотрел исходник, ошибка у тебя здесь:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.Left:=(Screen.Width - Width) div 2;;
  Form1.Top:=(Screen.Height - Height) div 2;
  Form2.Left:=(Screen.Width - Width) div 2;;
  Form2.Top:=(Screen.Height - Height) div 2;
  Form2.Visible:=false;
  Form2.Hide;
end;
Когда создаётся Form1, то Form2 ещё не существует, а ты уже пытаешься ей что-то присвоить
И вот ещё что: в Delphi-программах главной формой стаёт та, которая создаётся первой, в твоём случае это будет Form1 с меню, а не Form2 с игрой.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Shpingalet (14.09.2012)
  #24  
Старый 14.09.2012, 16:23
Shpingalet Shpingalet вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 13
Репутация: 10
По умолчанию

Поправил все, теперь запускается. Теперь вопрос в том что если запустить игру, а потом выйти обратно в меню через esc или же тупо пропустив шарик, то хотя и форма с игрой закрывается, но DXDraw все еще продолжает работать. Мне же надо чтобы в обоих случаях сбрасывался DXTimer и DXDraw. Как это сделать?
Вложения
Тип файла: rar arcanoid.rar (34.6 Кбайт, 7 просмотров)
Ответить с цитированием
  #25  
Старый 14.09.2012, 16:33
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Shpingalet
Поправил все, теперь запускается. Теперь вопрос в том что если запустить игру, а потом выйти обратно в меню через esc или же тупо пропустив шарик, то хотя и форма с игрой закрывается, но DXDraw все еще продолжает работать. Мне же надо чтобы в обоих случаях сбрасывался DXTimer и DXDraw. Как это сделать?
Я бы сделал чтобы форма GameForm создавалась не при запуске приложения, а "в ручную" при нажатии кнопки "Начать игру" и чтобы разрушалась при закрытии.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Shpingalet (17.09.2012)
  #26  
Старый 18.09.2012, 08:46
Shpingalet Shpingalet вне форума
Прохожий
 
Регистрация: 12.09.2012
Сообщения: 13
Репутация: 10
По умолчанию

Добавил новых элементов. Все работает как надо, хочу только поменять момент паузы после смерти шарика. Никак не пойму куда запихнуть sleep чтобы у меня происходило следующее: смерть шарика -> перемещение шарика на стартовую позицию -> удаление спрайта жизни (сердечко) -> пауза. Сейчас у меня пауза работает ПЕРЕД удалением спрайта с жизнями.
Вложения
Тип файла: rar arcanoid.rar (39.0 Кбайт, 18 просмотров)
Ответить с цитированием
  #27  
Старый 18.09.2012, 20:25
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию

Насчет переименовать Form1->Form2->и т.д. посмотрите в сторону "IDE->Menu->Refactoring" - очень полезная весч
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter