cocos2d-js:b2DebugDraw无法初始化。 element.getContext(" 2d")返回null

时间:2014-05-10 19:43:51

标签: cocos2d-x getelementbyid cocos2d-js

我尝试使用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

1 个答案:

答案 0 :(得分:1)

我正试图通过box2d使用box2d + ease.js传递给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,错误可能与空上下文有关。

希望这有帮助