【问题标题】:Detecting tiled map layer collision in cocos2d-x在 cocos2d-x 中检测平铺地图层碰撞
【发布时间】:2015-04-22 11:24:50
【问题描述】:

我是 cocos2d-x3.2 的新手,我正在创建一个基于图块的游戏,比如 mario。我创建了一个带有可碰撞图层的瓦片地图。但是当我使用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;
        }
    }

【问题讨论】:

    标签: xcode cocos2d-iphone cocos2d-x cocos2d-x-3.0


    【解决方案1】:

    对于 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 以表示冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多