1

我尝试使用 b2DebugDraw 并且无法对其进行初始化,因为我从 getContext 函数返回了一个空值。我知道这不是 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 中)并在我的 b2DebugDraw 方法中调用它来代替 cocos2d 相关的一个:

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 回答