AlexCooper
09.06.2011, 03:27
Здравствуйте.
Контуры движок вырисовывает а считать объект физически не хочет, то-есть не срабатывают касания.
Используемые функции
public function CreateMultiShape(PointArray:Array):b2PolygonShape
{
for( var cord in PointArray) PointArray[cord] = new b2Vec2(PointArray[cord].x/pixels_in_a_meter,PointArray[cord].y/pixels_in_a_meter);
var tempShape:b2PolygonShape = new b2PolygonShape();
tempShape.SetAsArray(PointArray,PointArray.length);
return tempShape;
}
public function CreateFix(Shapes, density:Number, brake:Number=0, returnedForce:Number=0):b2FixtureDef
{
var tempFix:b2FixtureDef = new b2FixtureDef();
tempFix.shape = Shapes;
tempFix.density = density;
tempFix.friction = brake;
tempFix.restitution = returnedForce;
return tempFix;
}
public function CreateBody( FIX, posX:Number,posY:Number, ang:Number=0, fixRotation:Boolean = false, type:uint=1 ):b2Body
{
var tempBodyDef:b2BodyDef = new b2BodyDef();
var tempBody:b2Body;
tempBodyDef.type = (type) ? b2Body.b2_dynamicBody: b2Body.b2_staticBody;
tempBodyDef.fixedRotation = fixRotation;
tempBodyDef.position.Set(posX/pixels_in_a_meter, posY/pixels_in_a_meter);
tempBodyDef.angle = ang;
tempBody = m_world.CreateBody(tempBodyDef);
tempBody.CreateFixture(FIX);
return tempBody;
}
Само объявление объекта
var multi:Array = new Array();
multi.push(new b2Vec2(-100,0));
multi.push(new b2Vec2(-100,-20));
multi.push(new b2Vec2(-120,-20));
multi.push(new b2Vec2(-120,20));
multi.push(new b2Vec2(120,20));
multi.push(new b2Vec2(120,-20));
multi.push(new b2Vec2(100,-20));
multi.push(new b2Vec2(100,0));
var sL2:b2PolygonShape = CreateMultiShape(multi);
var fL:b2FixtureDef = CreateFix( sL2, 1);
var ves:b2Body = CreateBody(fL, 400, 360);
В результате объект то вырисовывается, но он пролетает всё что попадаются ему на пути и лишь некоторые на нём точки имею реакцию на столкновения с другими объектами. В чём проблема?
Если создавать более простой объект к примеру триугольник то всё работает нормально
var multi:Array = new Array();
multi.push(new b2Vec2(-100,0));
multi.push(new b2Vec2(-100,100));
multi.push(new b2Vec2(0,100));
var sL2:b2PolygonShape = CreateMultiShape(multi);
var fL:b2FixtureDef = CreateFix( sL2, 1);
var ves:b2Body = CreateBody(fL, 400, 360);
Контуры движок вырисовывает а считать объект физически не хочет, то-есть не срабатывают касания.
Используемые функции
public function CreateMultiShape(PointArray:Array):b2PolygonShape
{
for( var cord in PointArray) PointArray[cord] = new b2Vec2(PointArray[cord].x/pixels_in_a_meter,PointArray[cord].y/pixels_in_a_meter);
var tempShape:b2PolygonShape = new b2PolygonShape();
tempShape.SetAsArray(PointArray,PointArray.length);
return tempShape;
}
public function CreateFix(Shapes, density:Number, brake:Number=0, returnedForce:Number=0):b2FixtureDef
{
var tempFix:b2FixtureDef = new b2FixtureDef();
tempFix.shape = Shapes;
tempFix.density = density;
tempFix.friction = brake;
tempFix.restitution = returnedForce;
return tempFix;
}
public function CreateBody( FIX, posX:Number,posY:Number, ang:Number=0, fixRotation:Boolean = false, type:uint=1 ):b2Body
{
var tempBodyDef:b2BodyDef = new b2BodyDef();
var tempBody:b2Body;
tempBodyDef.type = (type) ? b2Body.b2_dynamicBody: b2Body.b2_staticBody;
tempBodyDef.fixedRotation = fixRotation;
tempBodyDef.position.Set(posX/pixels_in_a_meter, posY/pixels_in_a_meter);
tempBodyDef.angle = ang;
tempBody = m_world.CreateBody(tempBodyDef);
tempBody.CreateFixture(FIX);
return tempBody;
}
Само объявление объекта
var multi:Array = new Array();
multi.push(new b2Vec2(-100,0));
multi.push(new b2Vec2(-100,-20));
multi.push(new b2Vec2(-120,-20));
multi.push(new b2Vec2(-120,20));
multi.push(new b2Vec2(120,20));
multi.push(new b2Vec2(120,-20));
multi.push(new b2Vec2(100,-20));
multi.push(new b2Vec2(100,0));
var sL2:b2PolygonShape = CreateMultiShape(multi);
var fL:b2FixtureDef = CreateFix( sL2, 1);
var ves:b2Body = CreateBody(fL, 400, 360);
В результате объект то вырисовывается, но он пролетает всё что попадаются ему на пути и лишь некоторые на нём точки имею реакцию на столкновения с другими объектами. В чём проблема?
Если создавать более простой объект к примеру триугольник то всё работает нормально
var multi:Array = new Array();
multi.push(new b2Vec2(-100,0));
multi.push(new b2Vec2(-100,100));
multi.push(new b2Vec2(0,100));
var sL2:b2PolygonShape = CreateMultiShape(multi);
var fL:b2FixtureDef = CreateFix( sL2, 1);
var ves:b2Body = CreateBody(fL, 400, 360);