当前位置: 首页 > 工具软件 > Tiled > 使用案例 >

Tiled

狄宪
2023-12-01
specify /'spesɪfaɪ/   指定;列举;详细说明
点击符号”>>"—编辑地图信息---增加地形类型-将”新地形"改名为t  如果编辑错了必须要点击下“清除”  再点击“清除”才能继续绘图  选中的那个图块也要涂抹上-----close
在地图中画新图形t
地图—Map Properties—点击右下角”+“—输入type—输入”我是地图属性“
选中右上角的 scene —此时右下角显示为Tile Layer 点击”+“—输入type—输入”我是图层属性“
图块—选中第一块图块-此时右下角显示为ID 0 点击”+“—输入type—输入”我是图块属性“
点击 scene下面的“添加对象层”—输入object—选择“插入矩形”---选择“插入椭圆形”--选择“编辑多边形”—在右下角名称输入 player    选中矩形区域 在右下角名称输入 color
给player-- 点击”+“—输入type—输入”我是对象属性“
保存在桌面 map
Xcode—单击map.tmx

在player所在的图块(ID33)上添加属性move  输入”true“   表示player在该图快上是可以移动的
保存新地图,将Xcode中原来的地图删掉,添加新地图到Xcode


    auto map = TMXTiledMap :: create ( "map.tmx" );
   
   
addChild (map);
   
   
   
//map 属性是一个字典
   
auto maProperties = map-> getProperties ();
//   传入一个 key 也就是 type
   
auto str =maProperties[ "type" ]. asString ();
   
CCLOG ( "map pro:%s" ,str. c_str ());
   
   
// 获取图层属性
    auto sceneLayer = map->getLayer("scene");
    auto layerProperties = sceneLayer-> getProperties ();
    
CCLOG ( "scene pro:%s" ,layerProperties[ "type" ]. asString (). c_str ());
   
   
// 获取图块属性
   
// ID 返回值为 value 类型 这里需要转换为 ValueMap 类型
   
auto tilePro = map-> getPropertiesForGID ( 1 ). asValueMap ();
   
CCLOG ( "tile pro:%s" ,tilePro[ "type" ]. asString (). c_str ());
   
   
   
// 获取对象属性
   
auto objectGroup = map-> getObjectGroup ( "object" );
   
   
auto obj = objectGroup-> getObject ( "player" );
   
CCLOG ( "tile pro:%s" ,obj[ "type" ]. asString (). c_str ());
   
// 修改指定区域的颜色
   
auto colorObj = objectGroup-> getObject ( "color" );
   
CCLOG ( "tile pro:%s" ,colorObj[ "type" ]. asString (). c_str ());
   
   

   
auto colorObjX = colorObj[ "x" ]. asInt ()/ 32 ;
   
auto colorObjY = colorObj[ "y" ]. asInt ()/ 32 ;
   
auto colorObjW = colorObj[ "width" ]. asInt ()/ 32 ;
    auto colorObjH = colorObj["height"].asInt()/32;
    //    Tiled Y 轴是向下的,而 cocos2d-x Y 轴是向上的
     // color 区域全部变成红色
    for ( int x = colorObjX; x < colorObjX+colorObjW; x++) {
       
for ( int y = colorObjY; y < colorObjY+colorObjH; y++) {
           
           
// Tiled Y 轴是向下的,而 cocos2d-xY 轴是向上的所以用 map->getMapSize().height-y 代替 y
           
auto sprite = sceneLayer-> getTileAt ( Vec2 (x, map-> getMapSize (). height -y));
            sprite->
setColor ( Color3B ( 255 , 0 , 0 ));
        }
    }
   
   
   
   
// 加载小球
   
auto player = Sprite :: create ( "c.png" );
    player->
setPosition (obj[ "x" ]. asFloat (), obj[ "y" ]. asFloat ());
   
addChild (player);
   
   
auto eventListener = EventListenerTouchOneByOne :: create ();
    eventListener->
onTouchBegan = [map,sceneLayer,player]( Touch * touch, Event *event){
       
       
       
       
auto point = map-> convertToNodeSpace (touch-> getLocation ());
        point.
x = static_cast < int >(point. x / 32 );
       
       
//MapSize().height 图块的高度是从 1 开始的所以需要减去 1 point 的高度是从 0 开始的
        point.
y = map-> getMapSize (). height - static_cast < int >(point. y / 32 )- 1 ;
       
       
auto t = sceneLayer-> getTileAt (point);
//        t->setColor(Color3B(255,0,0));
//        获取该位置的图块 ID
       
       
auto gid = sceneLayer-> getTileGIDAt (point);
       
auto p = map-> getPropertiesForGID (gid). asValueMap ();
       
       
if (p[ "move" ]. isNull ()!= true &&  p[ "move" ]. asBool () == true ) {
            player->
setPosition (t-> getPosition (). x ,t-> getPosition (). y );
        }
       
       
       
       
return false ;
    };
   
   
    _eventDispatcher->addEventListenerWithSceneGraphPriority(eventListener, map);
 类似资料:

相关阅读

相关文章

相关问答