我本来是想将TiledMap中的每个Tile变成物理精灵的,所谓的那些教程以及现在市面上的cocos2d-js的书都没提及,反正好像就两本吧,我发现其中一本是没有介绍这个的,我想另一本也不会好到哪里去!
于是我在网上找了很多的资料,终于找到份 cocos2d-x的,关于如何将 精灵 变成 物理精灵的方法,就是直接调用 setPhysicsBody 方法,然后我去官方文档去看了下,确实有这个
大家来看看,这API写得
var setPhysicsBody ( var body )
设置PhysicsBody来让精灵sprite有物理世界机能。
注解
如果body非空,这个方法将会设置锚点为Vec2::ANCHOR_MIDDLE, 并且当有物理body存在的情况下你不可以改变这个锚点。
参数
body 附加给节点的物理body
是这样子说的啊,设置物理体,让Sprite拥有物理世界机能,大家看看就明白,这是JS语言的,也就是说 getTileAt 正返回的就是 Sprite, 所以只要设置它的 物理体 即可,可是
这个方法 尼玛 undefined 啊!还是写在Node这个节点类下啊! 然后我用输出Sprite下的 这个设置物理体 方法,也是undefined ,你这是坑爹么? 你丫的,没有定义,就不要在 API中乱写,或者注明,未实现
下面看看我在网上找的 C++代码,这说明 c++ 是有这个方法的
void GameLayer::loadTileMap()
{
map = TMXTiledMap::create("textmap.tmx");//从tmx创建一个TMXTileMap类
map - > setPositionX(getPositionX() + 34);//设置位置 76 addChild(map);
TMXLayer * layer = map - > getLayer("bricks");//从map中取出“bricks”图层
//这个循环嵌套是为了给每个砖块精灵设置一个刚体
for (int x = 0;
x < 13;
x++
)
{
for (int y = 0;
y < 18;
y++
)
{
int
gid = layer - > getTileGIDAt(Vec2(x, y));//为了提高点效率,我们没必要给每个tile加上刚体,在创建地图时我们设定了空白处的gid值为12,因此我们只对非12的tile加上刚体
if (gid != 12) {
Sprite * sprite = layer - > getTileAt(Vec2(x, y));//从tile的坐标取出对应的精灵
if (!sprite)//防止sprite为NULL
continue;
PhysicsBody * body = PhysicsBody::createEdgeBox(sprite - > getContentSize(), PhysicsMaterial(1.0
f, 1.0
f, 0.0
f
))
;//给精灵设置一个刚体
sprite - > setTag(3);//加入tag,方便碰撞时的判断
body - > setContactTestBitmask(0xFFFFFFFF);//设置接触掩码值
sprite - > setPhysicsBody(body);
}
}
}
loadProp();
}
```
还说什么整合到一起,我擦,你就是这么整合的!!!!!!!!!!!!!!
我并没有说cocos2d这个游戏引擎不好,只是你们做得太缺了!
写那么没实现的东西充数啊?
我想大家也明白我的意思了,我只是个菜鸟,
首先是想吐槽下cocos2d官方的xxxxx
其次,我就是想问下,现在setPhysicsBody方法没了,怎么用 chipmunk 将 TiledMap 中的 tiles 变成 物理精灵, 带进物理世界呢?