|
[ На главную ] -- [ Список участников ] -- [ Правила форума ] -- [ Зарегистрироваться ] |
On-line: |
Game Maker Форум / Профессиональные Пользователи / Как сделать нормальное столкновение со стенами в 2D аркадах |
Страницы: 1 2 Next>> |
Автор | Сообщение |
CRYSTALL m маэстро Группа: Сообщество GM Сообщений: 812 |
Добавлено: 03-02-2006 20:14 |
Я посмотрел игры, сделанные на GM и увидел, что есть много косяков с застряванием в стенах, и поэтому хочу рассказать как делается нормальное движение. Итак начнём. Для хорошей игры сначала нужно подумать как это сделать. Та к вот я придумал код, пишущийся за 10 минут, но он гарантирует, что косяков не будет. Создаём объект player и объект wall. Пусть у объектов player и wall будет спрайт 32*32 и центер в точке(16;16) Пишем для player В Create пишем: air=0; global.grav=0; hsp=5; jump=2; В Step пишем: wi=collision_rectangle(x-15,y+17,x+15,y+17+vspeed,wall,0,0) if wi>0 and vspeed>0 and air=1 then { air=0; vspeed=0; gravity=0; y=wi.y-32; jump=2 } ...Это проверка столкновения со стеной снизу if wi<0 and air=0 then { air=1; gravity=global.grav jump-=1 } ...Проверка отсутствия стены снизу wi=collsion_rectangle(x-15,y-17,x+15,y-17+vspeed,wall,0,0) if wi>0 and vspeed<0 then { vspeed=0; y=wi.y+32; } ...столкновение с потолком Вот так пишется обработка прыжка Теперь сам прыжок: Для события KeyPress(любой клавиши) пишем: if jump>0 then { vspeed-=5; gravity=global.grav jump-=1; } Теперь передвижение вправо(влево): Для события KeyRight: wi=collision_rectangle(x+17,y-15,x+17+hsp,y+15,wall,0,0) if wi<0 then { x+=hsp } else { x=wi.x-32; } Для события KeyLeft: wi=collision_rectangle(x-17,y-15,x-17-hsp,y+15,wall,0,0) if wi<0 then { x-=hsp } else { x=wi.x+32; } Всё... Этот лёгкий код - проработка столкновений, по крайней мере у меня он не глючил. Если я всё правильно вспомнил, то это тот код, которым пользуюсь я. Висение на стенах и т.д. легко добавляется |
|
Rap_Person мастер Группа: Сообщество GM Сообщений: 121 |
Добавлено: 03-02-2006 20:33 |
Похвально.Вот, что значить использование логики по назначению | |
CRYSTALL m маэстро Группа: Сообщество GM Сообщений: 812 |
Добавлено: 06-02-2006 20:42 |
Правилно. А то смотрел, как столкновения реализованны в примерах, и достало - косяки, косяки, косяки.... Вот подумал, как эо нормально сделать и сделал. P.S. Этоткод реализован в моих примерах. |
|
Rap_Person мастер Группа: Сообщество GM Сообщений: 121 |
Добавлено: 10-02-2006 11:21 |
А не пробовал просто сделать для спрайта маску? | |
CRYSTALL m маэстро Группа: Сообщество GM Сообщений: 812 |
Добавлено: 10-02-2006 19:48 |
Ну можно и маску. Я много пробовал. Этот код хоть с маской, хоть без работает... |
|
Rap_Person мастер Группа: Сообщество GM Сообщений: 121 |
Добавлено: 10-02-2006 19:49 |
Но лучше проста маску | |
CRYSTALL m маэстро Группа: Сообщество GM Сообщений: 812 |
Добавлено: 10-02-2006 19:57 |
Раньше тоже так думал... А потом понял - а если маска другого размера, чем спрайт - ты её постоянно менять будешь? И много других косяков... |
|
Rap_Person мастер Группа: Сообщество GM Сообщений: 121 |
Добавлено: 10-02-2006 20:00 |
Ето не косяк а поменять не так уж и трудно мона чз переменные высоты и ширины | |
CRYSTALL m маэстро Группа: Сообщество GM Сообщений: 812 |
Добавлено: 10-02-2006 20:07 |
Дерзай. Если нужны сложности то пожалуйста.. |
|
Rap_Person мастер Группа: Сообщество GM Сообщений: 121 |
Добавлено: 10-02-2006 20:08 |
Вот сложности то как раз у тя | |
Paradox магистр Группа: Сообщество GM Сообщений: 462 |
Добавлено: 05-03-2006 15:59 |
Косяк есть. Если игрок сошел со стены в пропасть, он не падает. То есть, если впереди стены заканчиваются, то игрок не падает, а продолжает идти вперед | |
CRYSTALL m маэстро Группа: Сообщество GM Сообщений: 812 |
Добавлено: 05-03-2006 19:40 |
То чего не хватало выделил синим цветом. | |
Paradox магистр Группа: Сообщество GM Сообщений: 462 |
Добавлено: 05-03-2006 19:51 |
Я щаз подумал, напсал пример, когда довершу его дизайн и доделаю лестницы и всякие там воду с песком, выложу. Там лучше сделана физика, помимо того что столкновения по стенам, так еще можно взбираться по стенам, планая движение и т.п. | |
Ka1miK Тут могла быть ваша реклама Группа: Сообщество GM Сообщений: 1014 |
Добавлено: 05-03-2006 23:33 |
Кажется, как будто просто всё что можно было сделать проще написано сложнее. Просто несколько эллементов добавлено if place_free(x,y+1+vspeed)=1 { gravity_direction=270 gravity=0.7 letit=1 } if place_free(x,y+1+vspeed)=0 { gravity_direction=270 vspeed=0 gravity=0 } зачем писать collision_rectangle(...)? |
|
Dreik магистр Группа: Сообщество GM Сообщений: 330 |
Добавлено: 06-03-2006 08:35 |
Мне лень этот код писать. Да и неохото чужой код использовать. | |
splean магистр Группа: Сообщество GM Сообщений: 443 |
Добавлено: 06-03-2006 10:23 |
вопрос на засыпку товарищу кристаллу... имеем твердый движущийся вниз блок, имеем шарик движущийся вверх навстречу блоку, постоянно меняющий размеры, да и с увеличением скорости... шарик мягкий. теперь напиши код, запрещающий шарику отскакивая пересекать границу блока и останавливаться, а блоку тормозить при встрече с шариком.. и не надо говорить что тебе влом =) |
|
CRYSTALL m маэстро Группа: Сообщество GM Сообщений: 812 |
Добавлено: 06-03-2006 18:04 |
А затем, чтобы потом объект прикрепит к нижней стороне стены без косяков и застряваний, и если скорость больше 32 то твой код не сработает. |
|
Paradox магистр Группа: Сообщество GM Сообщений: 462 |
Добавлено: 08-03-2006 08:00 |
такс, ладно, вот пример, точнее готовый движок под платформер. Он кстати войдет в диск по ГМ, о котором я написал в разделе сообщество. Ссылка |
|
Dimok бывалый Группа: Участники Сообщений: 49 |
Добавлено: 11-04-2006 00:53 |
Главное стене поставь галочку SOLID Два Solid объекта по понятиям гаймайкера не могут пройти друг через друга,а если вляпаются то не вылезут друг из друга если у них маленькая скорость |
|
serikus частый гость Группа: Участники Сообщений: 23 |
Добавлено: 14-05-2006 01:04 |
У меня трабл с застреванием. Я делаю игру типа пинг попг и иногда шарик при попадании на край ракетки застревает, а через секунд 5 отскакивает. Кто знает что делать? |
Страницы: 1 2 Next>> |
Game Maker Форум / Профессиональные Пользователи / Как сделать нормальное столкновение со стенами в 2D аркадах |