![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 21
|
Всем привет.
В одном из классов с помощью цикла создаются статические тела-сенсоры, являющиеся бонусами в игре, которые необходимо собирать. Как-то так: 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. if (contact.GetFixtureA().GetBody().GetUserData()[1]=="coin" && contact.GetFixtureB().GetBody().GetUserData()[1]=="ball") { trace('true'); } else trace('false'); Экземпляр MyContactListener добавлен в главный класс и связан с миром. Как решить проблему? |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Динамические тела в бокс2д точно контактируют со статичекими и с кинетическими. Вот этот код мне вообще не понятен: Зачем там [1]? Точнее, зачем вообще туда передавать массив? Чаще всего в качестве пользовательских данных передается ссылка на экземпляр класса. В общем, вот пример того, как у меня проверяется столкнулся ли солдат с чем либо: 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(); } } 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, время: 04:25. |
|
|
« Предыдущая тема | Следующая тема » |
|
|