Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.06.2015, 18:27
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 1  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
По умолчанию Как привязать графику к Nape?

Добрый день!
Помогите решить проблему, решил в приложении вместо Box2D использовать Nape (тормозит коробка). Поиск гугл выдаёт, что нужно писать:
Код AS3:
var box = new Body(BodyType.DYNAMIC);
var movic:MovieClip = new MovieClip(); //тут какой-то мувик с графикой
//.....................
box.graphic = movic;
так вот, похоже в новой редакции Nape нету graphic, тогда что же использовать? Могу конечно костыль написать, но это только ещё большие трудности потянет

Старый 13.06.2015, 18:40
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
А зачем вообще это делать?
Нейп должен существовать отдельно, а графика отдельно. Создается какой-то класс, к примеру Box, в нем будет создаваться физическая модель этой коробки и графическое представление, что-то типа такого:
Код AS3:
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;
}
п.с. но если уж по каким-то причинам надо что-то привязать к нейповскому телу, то у него есть свойство userData
например можно ему имя задать, чтобы при проверке столкновений определить что это такое, ну или еще какое-то свойство привязать
Код AS3:
boxBody.userData.title = "blabla";
boxBody.userData.image = boxView; // сама эта картинка, естественно, никуда двигаться не будет

Старый 13.06.2015, 19:31
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 3  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Спасибо, я как раз этот вариант и рассматривал, только после бокса выглядит как костыль

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

Добавлено через 2 минуты
под this понимается boxView?
Код AS3:
   this.x = boxBody.position.x;
   this.y = boxBody.position.y;


Последний раз редактировалось neonoviiwolf; 13.06.2015 в 20:03.
Старый 13.06.2015, 21:31
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
тем самым удаляя объект Body со сцены, удалялся и мувик с ним
Объект Body никогда и ни при каких условиях невозможно добавить на сцену. Это исключительно математическая модель и никакого графического представления не имеет, соответственно и ни в каком контейнере находиться не может.

Цитата:
под this понимается boxView?
Под this понимается экземпляр того класса, в котором все это создано. Если бы имелся в виду boxView, то и писать бы надо было boxView.x = ...

Старый 13.06.2015, 21:58
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 5  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Цитата:
Объект Body никогда и ни при каких условиях невозможно добавить на сцену. Это исключительно математическая модель и никакого графического представления не имеет, соответственно и ни в каком контейнере находиться не может.
ок, я имел в виду space, понятно, ещё вопрос, я буду пулы делать, так вот, придётся писать два массива, один будет содержать графику, второй мат модели nape?

Старый 13.06.2015, 22:05
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
ок, я имел в виду space
space - то же самое) Вообще в нейпе нет ничего, что можно добавить на сцену, кроме DebugDraw.
Как сделать правильнее я уже написал во втором посте

Старый 14.06.2015, 21:08
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 7  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
nape полностью абстрагирован от графики и это хорошо.
Каждому физическому объекту можно задать любые данные в userData. Я добавляю дисплейОбджекты в userData.graphics.
Через space есть доступ ко всем телам (Body). При апдейте нужно пройтись циклом по списку тел и их userData.graphics и применить соответствующие параметры:

Код AS3:
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 нужно перевести их в градусы.
		}
	}
}

Старый 15.06.2015, 10:37
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 8  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
В движке Citrus все эти вопросы увязаны.
http://citrusengine.com/

Старый 18.06.2015, 18:48
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 9  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Код AS3:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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