|
[ На главную ] -- [ Список участников ] -- [ Правила форума ] -- [ Зарегистрироваться ] |
On-line: |
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Разработал физику |
Страницы: 1 |
Автор | Сообщение |
Paradox магистр Группа: Сообщество GM Сообщений: 462 |
Добавлено: 10-03-2006 19:13 |
Закончил работу, вот, универсальный код для любых спрайтов. Дейтствует только для прямоугольных блоков, то есть если в игре будет треугольные стены, то код просчитает столкновения как с прямоугольником. Но в играх в основном прямоугольные стены, так что код полезный: hsp=hspeed vsp=vspeed //Движение вниз if collision_line(x-(sprite_width/2-1),y+sprite_height/2+vsp,x+(sprite_width/2-1),y+sprite_height/2+vsp,o_wall,0,0){if vsp>0{ W=collision_line(x-(sprite_width/2-1),y+sprite_height/2+vsp,x+(sprite_width/2-1),y+sprite_height/2+vsp,o_wall,0,0) vsp=0 y=W.y-sprite_height/2-W.sprite_yoffset }} //Движение вверх if collision_line(x-(sprite_width/2-1),y-sprite_height/2,x+(sprite_width/2-1),y-sprite_height/2+vsp,o_wall,0,0){if vsp<0{ W=collision_line(x-(sprite_width/2-1),y-sprite_height/2,x+(sprite_width/2-1),y-sprite_height/2+vsp,o_wall,0,0) vsp=0 y=W.y+sprite_height/2+(W.sprite_height-W.sprite_yoffset) }} //Столкновение с правой стеной if collision_line(x+sprite_width/2,y+(sprite_height/2-1),x+sprite_width/2+hsp,y-(sprite_height/2-1),o_wall,0,0){if hsp>0{ W=collision_line(x+sprite_width/2,y+(sprite_height/2-1),x+sprite_width/2+hsp,y-(sprite_height/2-1),o_wall,0,0) hsp=0 x=W.x-sprite_width/2-W.sprite_xoffset }} //Столкновение с левой стеной if collision_line(x-sprite_width/2+hsp,y+(sprite_height/2-1),x-sprite_width/2+hsp,y-(sprite_height/2-1),o_wall,0,0){if hsp<0{ W=collision_line(x-sprite_width/2+hsp,y+(sprite_height/2-1),x-sprite_width/2+hsp,y-(sprite_height/2-1),o_wall,0,0) hsp=0 x=W.x+sprite_width/2+(W.sprite_width-W.sprite_xoffset) }} hspeed=hsp vspeed=vsp Объект o_wall - это стена, не обязательно твердая, это может быть любой объект, и сам игрок не обязательно должен быть твердым. Если у вас много видом стен, достаточно сделать один пустой объект o_wall, и назначить его родителем для всех стен. Код еще не доработан, его недостаток: у спрайта игрока координаты должны быть в центре спрайта!!! иначе столкновения получатся другими. |
|
FallWolF Grand Admin Группа: Администраторы Сообщений: 1191 |
Добавлено: 10-03-2006 19:18 |
Хе, Эйнштейн - 2, оценим... | |
Paradox магистр Группа: Сообщество GM Сообщений: 462 |
Добавлено: 10-03-2006 19:29 |
Щаз исправляю этот недостаток =) Пока работает для любых У координат, когда закончу, выложу готовый, который будет работать уже при любых координатах и спрайтах обоих объектов. | |
CRYSTALL m маэстро Группа: Сообщество GM Сообщений: 812 |
Добавлено: 10-03-2006 20:01 |
А что я писал в проф.пользователях? | |
PaVeLius мастер Группа: Сообщество GM Сообщений: 108 |
Добавлено: 10-03-2006 22:55 |
Я не уверен насчет того, что использование collision_line рационально во всех случаях, а вот проверять все направления тем более(достаточно только двух) Ps Называите темы своими именами, под физикой(лично я) понимаю немного другое, да и вообще дурацкая привычка: движение объекта в сторону игрока называть AI, а проверка на столкновение- физикой... Имхо, конечно.... |
|
Paradox магистр Группа: Сообщество GM Сообщений: 462 |
Добавлено: 11-03-2006 07:56 |
просто хочу чтобы это рализоали игры. Ибо, достало, когда в игре войнушка или солдатики игрок застревает в стене. Для таких миниигр вполне подходящая, ну не физика, но допустим взаимодействие со стенами | |
CRYSTALL m маэстро Группа: Сообщество GM Сообщений: 812 |
Добавлено: 12-03-2006 19:32 |
Посмотри Virtual Zone 2. Там я реализовал нормальные столкновения. Если такой устроит, то сделаю пример. Я и сам раздражаюсь, когда вижу неграматную проверку столкновений. Ксати вместо collision line можно использвать collision_circle или instance_place. |
|
Ka1miK Тут могла быть ваша реклама Группа: Сообщество GM Сообщений: 1014 |
Добавлено: 13-03-2006 17:28 |
Подумаешь, я ж начанал только тогда. Всётки я соглашусь, может колжон_лайн чем-то попроще заменить, раз уж делаешь как профи, так надло чтобы ресурсов поменьше хавало |
|
Paradox магистр Группа: Сообщество GM Сообщений: 462 |
Добавлено: 13-03-2006 18:01 |
кристалл пишет: "А что я писал в проф.пользователях?" Просто в твоем коде спрайт стены конкретно 32 на 32 и координаты в центре, и у игрока также. А у мя единственное суловие - чтобы у игрока были ва центре координаты, но так в играх обчно и делают. |
Страницы: 1 |
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Разработал физику |