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

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

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

Регистрация: Aug 2011
Сообщений: 21
По умолчанию Не срабатывает определение столкновений

Всем привет.
В одном из классов с помощью цикла создаются статические тела-сенсоры, являющиеся бонусами в игре, которые необходимо собирать. Как-то так:
Код AS3:
for (var i:int = 0; i<3; i++) {
   var newCoin:Coin = new Coin();
   newCoin.x = 50 + 30 * i;
   newCoin.y = 100;
   coinsContainer.addChild(newCoin);
   /*
   Создается тело с userData == [newCoin, "coin"]
   */
]
При тестировании все создается.
С помощью класса MyContactListener (наследника b2ContactListener) пытаюсь проверить на столкновение с динамическим телом ball.
Код AS3:
if (contact.GetFixtureA().GetBody().GetUserData()[1]=="coin" && contact.GetFixtureB().GetBody().GetUserData()[1]=="ball") {
	trace('true');
} else trace('false');
При тестировании динамическое тело явно контактирует со статическим, однако 'true' не выводит.
Экземпляр MyContactListener добавлен в главный класс и связан с миром. Как решить проблему?

Старый 30.08.2011, 12:04
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Как решить проблему?
Написать правильный код.
Динамические тела в бокс2д точно контактируют со статичекими и с кинетическими.

Вот этот код мне вообще не понятен:
Код AS3:
contact.GetFixtureA().GetBody().GetUserData()[1]=="coin"
Зачем там [1]? Точнее, зачем вообще туда передавать массив? Чаще всего в качестве пользовательских данных передается ссылка на экземпляр класса.

В общем, вот пример того, как у меня проверяется столкнулся ли солдат с чем либо:
Код AS3:
override public function BeginContact(contact:b2Contact):void {
			contact.FlagForFiltering();
			var aFixture:	b2Fixture 	= contact.GetFixtureA();
			var bFixture:	b2Fixture 	= contact.GetFixtureB();
			var aBody:		b2Body		= aFixture.GetBody();
			var bBody:		b2Body		= bFixture.GetBody();
			if (bBody.GetUserData() is ISoldier) {
				bBody.GetUserData().enabled = false;
				bBody.GetLinearVelocity().NegativeSelf();
			} else if (aBody.GetUserData() is ISoldier) {
				aBody.GetUserData().enabled = false;
				aBody.GetLinearVelocity().NegativeSelf();
			}
 
		}
А вот так назначаются пользовательские данные:
Код AS3:
public function build(x:Number, y:Number, radius:Number, world:b2World, userData:ISoldier, ratio:Number = 30):void {
			_ratio									= ratio;
			_world									= world;
			var shape:				b2CircleShape	= new b2CircleShape(radius / _ratio);
			var circleBodyDef:		b2BodyDef		= new b2BodyDef();
			var circleFixtureDef:	b2FixtureDef	= new b2FixtureDef();
			circleFixtureDef.isSensor				= false;
			circleFixtureDef.shape					= shape;
			circleFixtureDef.filter.maskBits		= ~CategoryBits.PASS_THRU;
			_direction								= new b2Vec2(x / _ratio, y / _ratio);
			circleBodyDef.position.Set(_direction.x, _direction.y);
			_body									= world.CreateBody(circleBodyDef);
			_body.SetType(b2Body.b2_dynamicBody);
			_body.CreateFixture(circleFixtureDef);
			_body.SetLinearDamping(10);
			_body.SetAngularDamping(10);
			_body.SetUserData(userData);                                         // передается класс, применяющий интерфейс ISoldier
		}


Последний раз редактировалось goodguy; 30.08.2011 в 12:11.
Создать новую тему Ответ Часовой пояс GMT +4, время: 08:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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