在 cocos2d-x 中检测平铺地图层碰撞
Detecting tiled map layer collision in cocos2d-x
我是 cocos2d-x3.2 的新手,我正在创建一个基于图块的游戏,比如马里奥。我创建了一个带有可碰撞层的瓦片地图。但是当我使用 Dictionary *properties;
然后它在字典中显示错误。那么我可以用什么来检测碰撞?
Point tileCoord = this->tileCoordForPosition(position);
int tileGid = CollisionLAyer->tileGIDAt(tileCoord);
if (tileGid) {
Dictionary *properties;
properties = _tileMap->propertiesForGID(tileGid);
if (properties) {
String *collision = new CCString();
*collision = *properties->valueForKey("Collidable");
if (collision && (collision->compare("True") == 0)) {
return;
}
}
对于 3.2,我相信属性是在 ValueMap 中创建的。
Value properties = this->getPropertiesForGID(0);
if (! properties.isNull())
{
ValueMap dict = properties.asValueMap();
Value collision = dict["Collidable"];
if (! collision.isNull() && collision.asString() == "True") {
return;
}
}
如果需要,您还可以使用额外的图块层,例如使用红色半透明单图块图块集。绘制应该是碰撞瓦片的所有瓦片。然后你可以检查该层上的 gid 是否 > 0 碰撞。
我是 cocos2d-x3.2 的新手,我正在创建一个基于图块的游戏,比如马里奥。我创建了一个带有可碰撞层的瓦片地图。但是当我使用 Dictionary *properties;
然后它在字典中显示错误。那么我可以用什么来检测碰撞?
Point tileCoord = this->tileCoordForPosition(position);
int tileGid = CollisionLAyer->tileGIDAt(tileCoord);
if (tileGid) {
Dictionary *properties;
properties = _tileMap->propertiesForGID(tileGid);
if (properties) {
String *collision = new CCString();
*collision = *properties->valueForKey("Collidable");
if (collision && (collision->compare("True") == 0)) {
return;
}
}
对于 3.2,我相信属性是在 ValueMap 中创建的。
Value properties = this->getPropertiesForGID(0);
if (! properties.isNull())
{
ValueMap dict = properties.asValueMap();
Value collision = dict["Collidable"];
if (! collision.isNull() && collision.asString() == "True") {
return;
}
}
如果需要,您还可以使用额外的图块层,例如使用红色半透明单图块图块集。绘制应该是碰撞瓦片的所有瓦片。然后你可以检查该层上的 gid 是否 > 0 碰撞。