cocos2d-x 3.0深入了解之五

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)LayerMap

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值