Конечно, вы можете сделать это.
Например, в Box2D Body есть элемент userData, тип которого *, поэтому вы можете назначать любые данные там.
Поскольку Box2D и nape являются физическими движками 2D, вы можете сделать2d физические модификации по осям x и y.
Вот пример:
package
{
import as3isolib.display.primitive.IsoBox;
import as3isolib.display.scene.IsoScene;
import Box2D.Dynamics.Contacts.*;
import Box2D.Dynamics.*;
import Box2D.Collision.*;
import Box2D.Collision.Shapes.*;
import Box2D.Common.Math.*;
import Box2D.Dynamics.Joints.*;
import flash.events.Event;
import flash.display.Sprite;
public class Main extends Sprite
{
private var scene:IsoScene;
private var world:b2World;
private var gravity:b2Vec2;
private var body:b2Body;
private const worldScale:int = 30;
private const doSleep:Boolean = true;
private static const m_iterations:int = 10;
private static const m_timeStep:Number = 1.0/30.0;
public function Main ()
{
scene = new IsoScene();
scene.hostContainer = this;
var bodyDef:b2BodyDef;
var fixtureDef:b2FixtureDef = new b2FixtureDef();
gravity = new b2Vec2(0.0, 4.0);
world = new b2World(gravity, doSleep);
bodyDef = new b2BodyDef();
bodyDef.type=b2Body.b2_dynamicBody;
bodyDef.allowSleep = false;
bodyDef.linearDamping = 1;
bodyDef.angularDamping = 1;
bodyDef.position.x = 200/worldScale; //position
bodyDef.position.y = 100/worldScale; //position
bodyDef.userData = new IsoBox();
bodyDef.userData.setSize(25, 25, 25);
bodyDef.fixedRotation = true;
fixtureDef.restitution = 0.5;
fixtureDef.shape = new b2CircleShape(0.3);
fixtureDef.density = 1;
fixtureDef.friction = 5;
fixtureDef.restitution = 0.5;
scene.addChild(bodyDef.userData);
body = world.CreateBody(bodyDef);
body.CreateFixture(fixtureDef);
addEventListener(Event.ENTER_FRAME, Update);
}
private function Update(e:Event):void
{
world.Step(m_timeStep, m_iterations, m_iterations);
world.ClearForces();
body.GetUserData().moveTo(body.GetPosition().x * worldScale, body.GetPosition().y * worldScale, 0);
scene.render();
}
}
}