![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
Добрый день!
Помогите решить проблему, решил в приложении вместо Box2D использовать Nape (тормозит коробка). Поиск гугл выдаёт, что нужно писать: так вот, похоже в новой редакции Nape нету graphic, тогда что же использовать? Могу конечно костыль написать, но это только ещё большие трудности потянет |
|
|||||
|
А зачем вообще это делать?
Нейп должен существовать отдельно, а графика отдельно. Создается какой-то класс, к примеру Box, в нем будет создаваться физическая модель этой коробки и графическое представление, что-то типа такого: var boxBody:Body = new Body(BodyType.DYNAMIC); //... тут создаем все шейпы для коробки _space.bodies.add(boxBody); var boxView:DisplayObject = какая-то картинка или спрайт, или еще что-то addChild(boxView); // ну а потом просто ставим свой объект туда же, где находится физической тело в нейпе private function onEnterFrame(e:Event):void { this.x = boxBody.position.x; this.y = boxBody.position.y; } например можно ему имя задать, чтобы при проверке столкновений определить что это такое, ну или еще какое-то свойство привязать |
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
Спасибо, я как раз этот вариант и рассматривал, только после бокса выглядит как костыль
хотя вот думаю, создать класс, который расширяет класс Body и в него закидывать нужный мувик, тем самым удаляя объект Body со сцены, удалялся и мувик с ним (у меня в игрушке много стрельбы и столкновений, постоянно будет что-то убираться со сцены Добавлено через 2 минуты под this понимается boxView? Последний раз редактировалось neonoviiwolf; 13.06.2015 в 20:03. |
|
|||||
|
Цитата:
Цитата:
|
|
|||||
|
Регистрация: Jun 2014
Сообщений: 558
|
Цитата:
|
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
nape полностью абстрагирован от графики и это хорошо.
Каждому физическому объекту можно задать любые данные в userData. Я добавляю дисплейОбджекты в userData.graphics. Через space есть доступ ко всем телам (Body). При апдейте нужно пройтись циклом по списку тел и их userData.graphics и применить соответствующие параметры: public function update():void { space.step(1 /30); var bodies:BodyList = space.bodies; for (var i:int = 0; i < bodies.length; i++) { var body:Body = bodies.at(i); if (body.userData.graphics != null) { var graphics:DisplayObject = body.userData.graphics; graphics.x = body.position.x; graphics.y = body.position.y ; graphics.rotation = body.rotation; // nape использует радианы. В случае с displayList нужно перевести их в градусы. } } } |
|
|||||
|
В движке Citrus все эти вопросы увязаны.
http://citrusengine.com/ |
|
|||||
private function onFrame(event:Event):void { _space.step(1 / stage.frameRate); _space.liveBodies.foreach(updateGraphics); } private function updateGraphics(body:Body):void { var image:Image = body.userData.graphic as Image; // or other DO image.x = body.position.x; image.y = body.position.y; image.rotation = body.rotation; }
__________________
return this... |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|