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
为
1
返回值为
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);