首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

haxe的nem与box2d入门例证

2012-09-02 
haxe的nem与box2d入门例子nme下载地址:http://www.haxenme.org/。安装过程很简单,安装完成后,再安装box2d库

haxe的nem与box2d入门例子
nme下载地址:http://www.haxenme.org/。
安装过程很简单,安装完成后,再安装box2d库,在cmd中输入:haxelib install box2d。
如果你还怎么熟悉haxe,我有一个电子版的教程Professional_haXe_and_Neko,下载地址:http://163.fm/Z5npQv2,提取码:uxoOvw7w。

开IDE推荐使用flashdevelop,这个IDE可以集成nme项目,调试很方便。下载地址:http://www.flashdevelop.org/。
安装好后点击“Tools”->“Program Settings”->“HaXeContext”,将右侧的“Generate”设置为“True”,可以自动导入类包。

haxe的语法与flash的as3很类似,目前好象还没有nme版的box2d手册,所有只有借鉴flash版的box2d手册,手册地址:http://www.box2dflash.org/。
haxe的nem与box2d入门例证
新建一个Haxe的NME Project,项目名称为“SimpleApp”,打开src目录中的Main.hx,如果你按F5运行调试,你会发现一个错误,因为“package”至少要3个参数,打开文件application.nmml,在第6行修改为package="com.sinaapp.gentwolf.SimpleApp"即可。在第18行加入,如果不加这行,会提示找不到box2d的类库。

打开Main.hx,
添加两个私有变量:
    //定义一个世界
    private var world : B2World;
    //在box2d中,是以米为单位而不是像素,1米为30个像素
    private var meterToPixel : Float = 1 / 30;


我们的代码文件放在init方法中:
    //初始化一个世界,重力向量为9.8,
    world = new B2World(new B2Vec2(0, 9.8), true);

    //创建一个地面
    createBox(313, 350, 600, 10, true);

    //创建一个自由落体的小球
    createBall(250, 40, 20, false);

    //将世界中的物体绘画出来
    drawDebug();
    //更新世界中物体的位置
    addEventListener(Event.ENTER_FRAME, update);


添加的方法
    private function createBall(x : Float, y : Float, radius : Float, isStatic : Bool) : Void {
        //定义一个物体
        var wheelBodyDef : B2BodyDef = new B2BodyDef();
        //将物体设置为动态物体
        if (!isStatic) wheelBodyDef.type = B2Body.b2_dynamicBody;
        //设置物体的位置,将像素转换为米
        wheelBodyDef.position.set(x *  meterToPixel, y * meterToPixel);
        //将上面定义的物体传入世界来创建一个物体
        var wheelBody : B2Body = world.createBody(wheelBodyDef);
        //定义一个形状
        var circleShape : B2CircleShape = new B2CircleShape(radius * meterToPixel);
        //定义附着物
        var wheelFixtureDef : B2FixtureDef = new B2FixtureDef();
        wheelFixtureDef.shape = circleShape;
        //物体的密度
        wheelFixtureDef.density = 1.0;
        //摩擦系数
        wheelFixtureDef.friction = 0.1;
        //反弹系数
        wheelFixtureDef.restitution = 0.8;
        //将附着物添加到物体上
        wheelBody.createFixture(wheelFixtureDef);
    }
    
    private function createBox(x : Float, y : Float, w : Float, h : Float, isStatic : Bool) : Void {
        var bodyDef : B2BodyDef = new B2BodyDef();
        bodyDef.position.set(x * meterToPixel, y * meterToPixel);
        if (!isStatic) bodyDef.type = B2Body.b2_dynamicBody;
        var body = world.createBody(bodyDef);
        
        var shape : B2PolygonShape =  new B2PolygonShape();
        //box2d中以物体的中心为原点,而不是左上角
        shape.setAsBox(w / 2 * meterToPixel, h / 2 * meterToPixel);
        
        var fixtureDef : B2FixtureDef = new B2FixtureDef();
        fixtureDef.shape = shape;
        
        body.createFixture(fixtureDef);
    }
    
    private function drawDebug() : Void {
        var sprite : Sprite = new Sprite();
        addChild(sprite);
        
        //因为没有给物体贴皮肤,所以是看不见的,在调试阶段时使用B2DebugDraw,正式发布时不要使用,
        var draw : B2DebugDraw = new B2DebugDraw();    
        draw.setSprite(sprite);
        draw.setLineThickness(1.0);
        draw.setFlags(B2DebugDraw.e_shapeBit);
        draw.setDrawScale(1 / meterToPixel);
        
        world.setDebugDraw(draw);
    }
    
    private function update(event : Event) : Void {
        world.step(1 / 30, 10, 10);
        world.clearForces();
        world.drawDebugData();
    }
保存后按F5调试,如果没有错误会打开生成的flash文件,你会看到一个自由落体的小球。

haxe的资料在国内很不好找,nme版的box2d资料则理少。

最后给出这个例子的下载地址:
    共享链接:http://163.fm/5SXkSwu

    提取码:5NPEhNlx

如果不能下载,请与博主联系。


原文地址:http://gentwolf.sinaapp.com/index/detail/163.html


热点排行