1、首先推荐一篇文章:http://blog.youkuaiyun.com/liaowenfeng/article/details/8566856
2、glview->setFrameSize(320,480); //是改变win32屏幕下的的窗口大小
glview->setDesignResolutionSize(960,640,ResolutionPolicy::NO_BORDER); //是自适应屏幕大小,其中getWinSzie()是get这里的大小,而不是get glview->setFrameSize(320,480)的数值
3、由于场景随着角色移动这两天搞的我很头疼,因此,想重新用3.0重写TileMap,这里参照http://blog.youkuaiyun.com/hitwhylz/article/details/18466855
(1)瓦片地图:关系
Object(ValueMap) | ObjectGround | Map |
Tile(Sprite) | Layer | Map |
CCTMXObjectGroup.h文件:TMXObjectGround代表的是TMX对象组。
a、TMXObjectGround相当于一个层
b、TMXObjectGround可以存储多个Object对象,每个Object对象都用ValueMap(即Dictionary)存储其信息
c、通过对ValueMap对象的读取key操作来读取Object对象的位置或用户自定义的其他信息。
CCTMXLayer.h文件:TMXLayer代表的是TMX层
a、是SpriteBatchNode的类,TMXLayer相当于一个容器,每个Tile相当于一个精灵,将精灵加入TMXLayer容器中
b、TMXLayer的坐标系是以左上角为原点,具体的位置可以参考Tile这个软件所标识的位置:;每一个坐标都对应一个ID
c、移除Layer上的方法:
(一) m_pTileLayer=m_pTileMap->getLayer("Background");
m_pTileLayer->removeTileAt(Point(3,20));
(二) m_pTileLayer=m_pTileMap->getLayer("Background");
Sprite *pSp2=m_pTileLayer->getTileAt(Point(3,20));
m_pTileLayer->removeChile(pSp2,true);
d、关于gl坐标(以左下角为原点)转化TileMap坐标:
int x=position.x/m_pTileMap->getTileSize().width;
int y=(m_pTileMap->getMapSize().width*m_pTileMap->getTileSize().width-position.y)/m_pTileMap->getTileSize().height;
return Point(x,y);
瓦片大小(即每一个小瓦片的长宽):m_pTileMap->getMapSize();
地图大小(即TileMap有多少个瓦片):m_pTileMap->getTileSize();
整个地图大小:width=m_pTileMap->getMapSize().width*m_pTileMap->getTileSize().width;
height=m_pTileMap->getMapSize().height*m_pTileMap->getTileSize().height;
CCTMXXMLParser.h文件:解析XML文件
TMXLayerInfo为层的信息
TMXTilesetInfo为瓦片的信息
TMXMapInfo为地图的信息
CCTMXTileMap.h文件:
a、每一个瓦片会被当做一个精灵
b、通过调用layer->tileAt(position)来将精灵添加到TileMap
c、瓦片的锚点是(0,0),瓦片地图的锚点(0,0)
创建TileMap有两种方法:
(1)auto m_pTileMap=TMXTiledMap::create("TileMap/TileMap.tmx");
(2)std::string resources="TileMap";
std::string file=resources+"/TileMap.tmx";
String *str=String::createWithContentsOfFile(FileUtils::getInstance()->fullPathForFilename(file.c_str()).c_str());
m_pTileMap=TMXTiledMap::createWithXML(str->getCString(),resources.c_str());
当然,第二种方法只是好奇,个人不推荐使用。
CCDictionary.h文件:仅仅是Ref或者其子类的指针能够插入到Dictionary
使用方法:
__Dictionary *pDict=__Dictionary::create();
String *pValue1=String::create("100");
String *pValue2=String::create("120");
Integer *pValue3=Integer::create(200);
pDict->setObject(pValue1,"key1");
pDict->setObject(pValue2,"key2");
pDict->setObject(pValue3,"key3");
String *pStr1=static_cast<String *>(pDict->objectForKey("key1"));
Integer *pIneger=static_cast<Integer *>(pDict->objectForKey("key3"));
这里附上自己写的源码和资源:http://download.youkuaiyun.com/detail/h980740316/7209287