Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Персонаж прилипает к стенам (http://www.flasher.ru/forum/showthread.php?t=171675)

ch3cker 21.11.2011 20:19

Персонаж прилипает к стенам
 
делаю игру на box2d. Персонаж в виде прямоугольника, по горизонтали двигается через SetLinearVelocity, а по вертикали через ApplyImpulse.
Когда персонаж находится в прыжке его можно направлять клавишами влево/вправо, так вот если удерживать например клавишу влево он приклеится к левой стене и не падает.

Если задать объектам нулевое трение, то персонаж очень долго скользит и не может остановиться.

Какие посоветуете выходы из данной ситуации?

artcraft 21.11.2011 20:23

1) приделать персонажу колесо и двигать его влево-право вращением колеса, заодно пропадёт и управление в полёте
2) сделать только стены скользкими

goodguy 21.11.2011 20:43

Цитата:

удерживать например клавишу влево он приклеится к левой стене и не падает.
Абсолютно логичное поведение. Бокс2д - это физический движок. Если прижать кирпич рукой к стене и давить на него с постоянной силой, он упадет? Не?

Нужно просто создать слушатель столкновений и при ударе о стену убирать нажатие клавиши, чтобы оно не становилось активным до следующего нажатия.
Что-то типа:
Код AS3:

var aFixture:b2Fixture         = contact.GetFixtureA();
var bFixture:b2Fixture        = contact.GetFixtureB();
var userData1:*            = aFixture.getBody().getUserData();
var userData2:*            = bFixture.getBody().getUserData();
if ((userData1 is Wall && userData2 is Character) ||
    (userData2 is Wall && userData1 is Character) {
    arrowKeyPressed = false;
}

Это будет чем-то вроде временного ослабления давления на тело, что позволит движку сэмулировать падение.

Цитата:

1) приделать персонажу колесо и двигать его влево-право вращением колеса, заодно пропадёт и управление в полёте
2) сделать только стены скользкими
Больше походит на костыли, чем на решение проблемы.

artcraft 21.11.2011 20:59

Цитата:

Сообщение от goodguy (Сообщение 1047421)
Больше походит на костыли, чем на решение проблемы.

На таких костылях с колесом работают хорошие игрушки, например зомботрон: http://www.kongregate.com/games/AntKarlov/zombotron

это решает одним махом еще и проблему неровностей на полу,
за которые, катающееся колесо цепляется не так сильно как коробка которую волокут

Ваше решение напротив - убивает отскок от стенки.
И представьте себе такую ситуацию:

Код:

  O-->    |
 ____    |
    |
    |____________

если пользователь будет всё время держать кнопку вправо, то
в моём случае, после падения, пресонаж побежит дальше, а с вашим решением оставовится

ch3cker 21.11.2011 21:01

Цитата:

Нужно просто создать слушатель столкновений и при ударе о стену убирать нажатие клавиши
Тоже думал о таком варианте, но не будет ли падения производительности если таких стен будет очень много?

Добавлено через 1 минуту
artcraft, видел реализации с колесом, но если честно не понимаю чем колесо поможет от прилипания к стене?

artcraft 21.11.2011 21:10

Цитата:

Сообщение от ch3cker (Сообщение 1047426)
не понимаю чем колесо поможет от прилипания к стене?

персонажа к стене приклеивает боковая постоянная сила и трение

если разгонять персонажа колесом, то в прыжке колесо будет работать вхолостую и не будет ни на что влиять, пока персонаж не касается горизонтальной поверхности

ch3cker 21.11.2011 21:13

Тогда каким образом он сможет запрыгнуть, на что либо с места без разгона?

artcraft 21.11.2011 21:17

это обратная сторона медали, но ведь в реальном мире так всё и работает :)
никто, как Марио, не может менять направление прыжка пока летит

ну и никто не запрещает, при прыжке, придать еще и горизонтальный импульс

goodguy 21.11.2011 21:30

Цитата:

На таких костылях с колесом работают хорошие игрушки, например зомботрон
аа, я не так себе представил сначала это колесо :D
Тогда дико извиняюсь =) Да, вариант на самом деле неплохой


Часовой пояс GMT +4, время: 01:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.