地图画好了之后,它只是一根线,还要给它加上刚体,勾好分组,才能让车在上边跑。
动态添加刚体的脚本。
cc.Class({
extends: cc.PhysicsCollider,
mixins: [cc.Collider.Polygon],
properties: {
lineWidth: 5,
},
editor: {
requireComponent: cc.RigidBody
},
_createShape: function (scale) {
var shapes = [];
var polys = this.points;
var offset = this.offset;
for (var i = 0; i < polys.length - 1; i++) {
var posBegin = polys[i];
var posEnd = polys[i+1];
var linelen = posBegin.sub(posEnd).mag();
var angle = Math.atan2(posEnd.y - posBegin.y, posEnd.x - posBegin.x) - Math.PI / 2;
var midPos = posBegin.add(posEnd).mul(0.5);
var shape = new b2.PolygonShape();
if (shape) {
shape.SetAsBox(this.lineWidth / 2 / 32, linelen / 2 / 32, new b2.Vec2(midPos.x / 32, midPos.y / 32), angle);
shapes.push(shape);
}
}
this.friction =1
this.density = 1;
return shapes;
}
});
将上边的脚本挂载在划线后节点上(self.gra),设置好分组,就可以让车平稳的落在你画的地图上了。
self.line = self.gra.addComponent("Line");
self.line.lineWidth = self.path.lineWidth;
self.line.points = self._posArrar; //这里的点数组使用的是上一篇文章划线时存的点
self.line.getComponent(cc.RigidBody).type = cc.RigidBodyType.Static;
self.line.apply();
self.gra.group = "ground";