首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您知道我是否可以与as3isolib集成一些物理引擎,如nape或box2d?

您知道我是否可以与as3isolib集成一些物理引擎,如nape或box2d?
EN

Stack Overflow用户
提问于 2012-02-14 04:12:03
回答 1查看 452关注 0票数 1

我只是在搜索任何资源,解释或教导如何将as3isolib与某些物理引擎集成,如nape或box2d。有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-14 04:45:53

你当然可以做到。

例如,Box2D Body具有成员userData,其类型为*,因此您可以在那里分配任何数据。

只要Box2D和nape是2D物理引擎,您就可以在x和y轴上进行2d phys修改。

下面是一个示例:

代码语言:javascript
复制
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();
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9267331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档