Показать сообщение отдельно
Старый 30.08.2011, 12:04
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned

Регистрация: 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.