|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.02.2009, 09:05 | #1 |
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
Регистрация: 29.09.2007
Сообщений: 1,824
|
Делаю аркаду, нужна помощь... (Collision)
Доброе утро.
Довольно долгий промежуток времени ломаю голову над следующем кодом приведенный кажется Kostia. Код:
Наш "мяч": Код:
Код:
во-общем то по коду не могу понять логики там, где выделил жирным, не могли бы в двух словах описать алгоритм работы указанного мной фрагмента?
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Последний раз редактировалось Stanislav; 03.02.2009 в 09:09. |
03.02.2009, 10:34 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Приведи полный код проги или пройди по шагам и выясни чему равны значения в условии.
I'm learning to live...
|
03.02.2009, 15:38 | #3 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Обратите внимание допустим на запись
Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
04.02.2009, 19:39 | #4 |
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
Регистрация: 29.09.2007
Сообщений: 1,824
|
Спасибо всем я разобрался, но возник новый вопрос: в ниже приведеном коде размер спрайта равен размеру объекта т.е в даном случаи мяча, вопрос теперь в следующем как сделать что бы объект был скажем в два раза больше спрайта, точнее , как будет выглядить в этом случаи код проверки на столкновение? пример размер спрайта 16, объект 32..
делал div 32 работает столкновение с правой стеной, и полом... все остальное пролетает сквозь.. Код:
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
|
04.02.2009, 23:24 | #5 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
В этой простой игре работает древнее правило поколения 8-битных игр, заключающееся в том, что все объекты должны иметь одни и те же размеры спрайтов, прозрачность уберет лишнее, и позиционирование легко определяется через размеры.
Я в своих примерах в верхних темах "Уроки по созданию игр для новичков" и "Как вы относитесь к созданию игр на Delphi?" показывал пример универсальной системы позиционирования и перемещения объектов. Там совершенно не имеет значения какого размера спрайт, т.к. обработка идет в таймере и если нажаты какие-либо клавиши то тут идет сдвиг объекта, как только объект перешел максимальное смещение в текущей позиции, то считается, что он сменил клетку. Смещения назначаются в зависимости от размера клетки карты.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
05.02.2009, 00:21 | #6 | |
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
Регистрация: 29.09.2007
Сообщений: 1,824
|
Цитата:
А вы случаем говорили "Уроки по созданию игр для новичков" не об этом? Код:
Спасибо.
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
|
|
05.02.2009, 16:08 | #7 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Вышеуказанный тобой (буду на ты, так легче наверное будет в понимании) кусок - только создает уровень, если качал сам исходник, то можно посмотреть. Сейчас поищу код позиционирования... вот он: http://programmersforum.ru/showthrea...t=1206&page=17 пост #164
Один момент. Этот код универсален, в исходном варианте предназначен для перемещения по карте по двум осям X и Y и перемещение полустатичное, т.е. указан пункт назначения и объект туда "придет" в конце цикла перемещения. Что нужно изменить... вместо кода на смещение по-Y нужно вписать блок гравитации. Вместо определения через условия текущей точки и точки назначения следует вписать флаги клавиш (при нажатии какой-либо клавиши определенная переменная типа Boolean - True, при отпускании - False, или по-иному принципу). Теперь как работает позиционирование. Допустим объект в клетке 1, и смещение его равно нулю, он в центре. Была нажата стрелка вправо, и удерживается, флаг клавиши - True, обработка перемещения выполняется. Каждый такт таймера к начальному смещению будет прибавляться число (в примере это единица, т.е. 1 пиксел), как только смещение перешло за предел полуразмера тайла, смещение обнуляется, объект теперь в клетке 2. Аналогично и в противоположную сторону. Теперь про столкновения. Если известны размеры спрайта объектов, их смещения и размеры одной клетки карты, то математикой можно определять расстояние между объектами, и при нулевом значении "тормозить" обоих. Мда, видимо сложновато на словах, постараюсь найти время и показать доработанный код.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
05.02.2009, 20:00 | #8 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
В 4 посте есть такой код:
Код:
Код:
|
05.02.2009, 22:13 | #9 | |
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
Регистрация: 29.09.2007
Сообщений: 1,824
|
Цитата:
Я был бы весьма благодарен, действительно что то сложнавато для восприятия даже после трех кратного прочтения.. p.s простите за бестактный вопрос, но почему переименовали созданную мной тему? я ведь просто писал Collision, я как бы не пишу не какую аркаду.... спасибо
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Последний раз редактировалось Stanislav; 05.02.2009 в 22:28. |
|
05.02.2009, 23:23 | #10 | ||
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Цитата:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 05.02.2009 в 23:26. |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
collision detection | challengerr | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 5 | 10.01.2009 20:53 |
Нужна помощь!!)) | ТРОЯН=) | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 29.12.2008 21:42 |
Нужна помощь | BreeZe | Помощь студентам | 1 | 14.05.2007 21:38 |