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();
                }

セットフォースや重力など、私が追加した他のプロパティは、問題ではありません。これが問題だと思う部分です...

フラッシュのエラー:

TypeError:エラー#1009:no se puede acceder a unapropiedadoaunmétododeunareferenciaa unobjetonulo。Main / drawPlayer()でMain / update()で

どうすれば修正できるのかわかりません

助けてください。

みなさん、ありがとう!

編集:

解決:

申し訳ありませんが、コードに失敗しました。エラーは、メニューにないステージ(レベル内を意味する)にいるときにプレーヤーに電話をかけるとゲームに言ったことがないということでした...このため、プレーヤーが表示される前にプレーヤーに電話をかけていました。私の間違いについて申し訳ありません。それで、ムービークリッププレーヤーを呼び出すためのそのようなものです:

private function update(e:Event):void 
{ 
//Call movieclips
 if (mc_player) {
 drawPlayer(); } 
}
4

1 に答える 1

1

update()はいつ/どのように呼び出されますか?mc_playerが初期化される前にコールバックを作成したことは問題ですか?

于 2012-11-19T16:15:33.830 に答える