Разработал физику

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Разработал физику

Страницы: 1  новая тема

Автор Сообщение

магистр
Группа: Сообщество 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, и назначить его родителем для всех стен. Код еще не доработан, его недостаток:
у спрайта игрока координаты должны быть в центре спрайта!!! иначе столкновения получатся другими.

Grand Admin
Группа: Администраторы
Сообщений: 1191
Добавлено: 10-03-2006 19:18
Хе, Эйнштейн - 2, оценим...

магистр
Группа: Сообщество GM
Сообщений: 462
Добавлено: 10-03-2006 19:29
Щаз исправляю этот недостаток =) Пока работает для любых У координат, когда закончу, выложу готовый, который будет работать уже при любых координатах и спрайтах обоих объектов.

маэстро
Группа: Сообщество GM
Сообщений: 812
Добавлено: 10-03-2006 20:01
А что я писал в проф.пользователях?

мастер
Группа: Сообщество GM
Сообщений: 108
Добавлено: 10-03-2006 22:55
Я не уверен насчет того, что использование collision_line рационально во всех случаях, а вот проверять все направления тем более(достаточно только двух)
Ps
Называите темы своими именами, под физикой(лично я) понимаю немного другое, да и вообще дурацкая привычка: движение объекта в сторону игрока называть AI, а проверка на столкновение- физикой... Имхо, конечно....

магистр
Группа: Сообщество GM
Сообщений: 462
Добавлено: 11-03-2006 07:56
просто хочу чтобы это рализоали игры. Ибо, достало, когда в игре войнушка или солдатики игрок застревает в стене. Для таких миниигр вполне подходящая, ну не физика, но допустим взаимодействие со стенами

маэстро
Группа: Сообщество GM
Сообщений: 812
Добавлено: 12-03-2006 19:32
Посмотри Virtual Zone 2.
Там я реализовал нормальные столкновения.
Если такой устроит, то сделаю пример.
Я и сам раздражаюсь, когда вижу неграматную проверку столкновений.
Ксати вместо collision line можно использвать collision_circle или instance_place.

Тут могла быть ваша реклама
Группа: Сообщество GM
Сообщений: 1014
Добавлено: 13-03-2006 17:28
Ибо, достало, когда в игре войнушка или солдатики игрок застревает в стене

Подумаешь, я ж начанал только тогда.
Всётки я соглашусь, может колжон_лайн чем-то попроще заменить, раз
уж делаешь как профи, так надло чтобы ресурсов поменьше хавало

магистр
Группа: Сообщество GM
Сообщений: 462
Добавлено: 13-03-2006 18:01
кристалл пишет:
"А что я писал в проф.пользователях?"
Просто в твоем коде спрайт стены конкретно 32 на 32 и координаты в центре, и у игрока также. А у мя единственное суловие - чтобы у игрока были ва центре координаты, но так в играх обчно и делают.

Страницы: 1  новая тема
Раздел: 
Game Maker Форум / Вопросы и Ответы (Для Опытных) / Разработал физику

Отвечать на темы в данном разделе могут только зарегистрированные пользователи

Отвечать на темы могут только зарегистрированные пользователи

KXK.RU