我尝试使用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
答案 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,错误可能与空上下文有关。
希望这有帮助