Firstly, I have changed these physics instance from:
var params:Object = new Object();to Nape:
params.doSleep = false;
var box2D:Box2D = new Box2D("box2D",params);
box2D.gravity = new b2Vec2(0, 0);
box2D.touchable = false;
box2D.world.SetContinuousPhysics(false);
box2D.velocityIterations = 1;
add(box2D);
var params:Object = new Object();
var nape:Nape = new Nape("nape", params);
nape.gravity = new Vec2(0, 0);
nape.touchable = false;
add(nape);
I changed all my objects from extending Box2DPhysicsObject to NapePhysicsObject.
All my custom fixtures has been erased, and collision groups dissapeared.
_body.SetActive(true/false);to Nape:
_body.space = null; //to disable
_body.space = _nape.space //to enable.
Updating rotation:
before, Box2D:
_body.setRotation(rads)
now, Nape, (I think this same code should work the box2D wrapper?):
_body.rotation = rads;
Updating velocity:
before, Box2D:
_body.SetLinearVelocity(new b2Vec2(_currentSpeed.x, _currentSpeed.y);
now, Nape, (I think this same code should work the box2D wrapper?):
But since the units change betweens engines, Im using pixels as unit and updating the position with my own engine:_body.velocity = new Vec2(_currentSpeed.x, _currentSpeed.y);
x +=speed.x;This is uesful for shoot'em ups but I am very unsure what would happen if I was using real physics, with gravity, etc.
y +=speed.y;
Updating collisions... they use now a different override, but the rest is the same:
before, Box2D:
override public function handleBeginContact(contact:b2Contact):void { var collisionWith:* = Box2DUtils.CollisionGetOther(this, contact);
now, Nape:
override public function handleBeginContact(contact:InteractionCallback):void { var collisionWith:* = NapeUtils.CollisionGetOther(this, contact);
now fixtures are not present as such so I needed to change the way I set up the filters and physics:
override protected function defineBody():void {
_bodyType = BodyType.KINEMATIC ;
}
override protected function createFilter():void {
super.createFilter();
_shape.sensorEnabled = true;
_shape.filter.sensorGroup = PhysicsCollisionCategories.Get("enemyBullet");
_shape.filter.sensorMask = PhysicsCollisionCategories.Get("player", "playerBullet");
}
I think I didn't have to change anything else...
Performance doubled on my smartphone, I went from 18-30FPS to constant 30FPS for the game.
No comments:
Post a Comment