如何将精灵添加到box2d物体中?

3

已修复。问题已解决。

我对as3和box2D都很新,所以至少我在学习。我有一个问题,就是无法将我的精灵(电影剪辑)添加到动态实体中。虽然精灵出现了,但它给了我一个错误,因此所有的游戏原型都运行不良。静态实体则没有任何问题。我该怎么办?

这是我的代码:

在代码之前,我将它们设置为变量:

 private var player:b2Body;
 private var mc_player:MovieClip;

首先,我的动态身体功能:

public function createPlayer(px:int, py:int):void
    {
        mc_player = new _pork();
        addChild(mc_player);

        var playerDef:b2BodyDef = new b2BodyDef();
        playerDef.position.Set(px / worldScale, py / worldScale);
        playerDef.type = b2Body.b2_dynamicBody;


        var playerShape:b2PolygonShape = new b2PolygonShape();
        playerShape.SetAsBox(25 / 2 / worldScale, 40 / 2 / worldScale);

        var playerForce:b2FixtureDef = new b2FixtureDef();
        playerForce.shape = playerShape;

        player = world.CreateBody(playerDef);
        player.CreateFixture(playerForce);
    }

然后是添加mc(movieclip)的函数:
private function drawPlayer():void
    {
        mc_player.x = player.GetPosition().x * worldScale;
        mc_player.y = player.GetPosition().y * worldScale;
    }

在此更新中,我只是将其称为:
 private function update(e:Event):void
            {
                drawPlayer();
                }

我添加的其他属性,比如设置力和重力,并不是问题所在。下面是我认为出了问题的部分...
Flash中的错误:
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo. at Main/drawPlayer() at Main/update()
我不知道如何修复它。
请帮帮忙。。
谢谢大家!
编辑:
解决方案:
对不起,我的代码出了问题。错误在于我从未告诉游戏在场景(即关卡)而不是在菜单中调用玩家...因此我在出现玩家之前就调用了玩家。对我的错误感到抱歉...
所以调用movieclip player的方式如下:
private function update(e:Event):void 
{ 
//Call movieclips
 if (mc_player) {
 drawPlayer(); } 
}
1个回答

1

update() 函数是在什么时候/如何被调用的?这是因为您在 mc_player 初始化之前创建了回调函数吗?


我认为你问我的是这样的:addEventListener(Event.ENTER_FRAME, update);这在主函数Main里面。 - Gabriel
在添加ENTER_FRAME回调之前,请确保已将播放器添加到舞台。类似于:http://stackoverflow.com/a/13457986/1809570 - Gone3d
是的,我已经解决了...我编辑了我的问题并找到了解决方案...至少我不再有任何问题了...顺便说一下,谢谢 :) - Gabriel
太好了!很高兴它运作正常 - 我知道这些问题有多令人沮丧。 - Gone3d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接