1

b2DebugDraw を使用しようとしましたが、getContext 関数から null が返されたため、初期化できませんでした。これが cocos2d 要素ではないことはわかっていますが、他のコンテキストでは正常に機能します。

「cocos new -l js」で新しい空の hello world プロジェクトを作成し、HelloWorldLayer の ctor 関数の最後に次のコードを配置しました。

var b2Vec2 = Box2D.Common.Math.b2Vec2,
    b2World = Box2D.Dynamics.b2World,
    b2DebugDraw = Box2D.Dynamics.b2DebugDraw;

this.world = new b2World(new b2Vec2(0, -5), true);

var debugDraw = new b2DebugDraw();
var element = document.getElementById("gameCanvas"),
    context = element.getContext("2d");   // context is null so
debugDraw.SetSprite(context);             // sprite is not set
debugDraw.SetDrawScale(20.0);
debugDraw.SetFillAlpha(0.5);
debugDraw.SetLineThickness(1.0);          // and crashes in SetLineThickness

なにが問題ですか?

エンジンのバージョンは 3.0a2

4

1 に答える 1

2

box2d + ease.js を使用してから、box2d を使用して cocos2d v3.0 に移行しようとしていますが、同じ問題が発生しています。

最終的に、メインの「gameCanvas」にさらにキャンバスを追加し(index.htmlの前に配置しました)、cocos2d関連の代わりにb2DebugDrawメソッドで呼び出すことを解決しました:

draw:function (ctx) {

         this.world.DrawDebugData();
         this._super(ctx);

    },

debugDraw: function(){
    var myDebugDraw = new b2DebugDraw();

    myDebugDraw.SetSprite(document.getElementById("debug").getContext("2d"));
    //debug instead of gameCanvas

    myDebugDraw.SetDrawScale(scale);
    myDebugDraw.SetFillAlpha(0.8);
    myDebugDraw.SetLineThickness(1.0); // no need to change this anymore
    myDebugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
    this.world.SetDebugDraw(myDebugDraw);



}

これ以上のものはありません。SetLineThickness を変更する必要もありません。エラーはおそらく null コンテキストに関連していました。

お役に立てれば

于 2014-07-08T14:59:00.787 に答える