cocos2d-x plist文件读取

plist文件为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>texture</key>
	<dict>
		<key>width</key>
		<integer>1024</integer>
		<key>height</key>
		<integer>1024</integer>
	</dict>
	<key>frames</key>
	<dict>
		<key>[email protected]</key>
		<dict>
			<key>id</key>
			<integer>1002</integer>
			<key>x</key>
			<integer>1</integer>
			<key>y</key>
			<integer>1</integer>
			<key>width</key>
			<integer>640</integer>
			<key>height</key>
			<integer>760</integer>
			<key>offsetX</key>
			<real>0</real>
			<key>offsetY</key>
			<real>0</real>
			<key>originalWidth</key>
			<integer>640</integer>
			<key>originalHeight</key>
			<integer>760</integer>
		</dict>
		<key>[email protected]</key>
		<dict>
			........		</dict>
		<key>[email protected]</key>
		<dict>
			......		        </dict>
	</dict>
</dict>
</plist>


读取方法为:

//读取plist数据
CCRect Tools::getRectFromPlist(const char* fileName,const char* key1,const char* key2,const char* x,const char* y,const char* width,const char* height){  
    CCDictionary* pDictionary=(CCDictionary*)CCDictionary::createWithContentsOfFile(fileName);  //加载文件
    CCDictionary* content1=(CCDictionary*)pDictionary->objectForKey(key1);  
    CCDictionary* content2=(CCDictionary*)content1->objectForKey(key2);  
	CCString* _x=(CCString*)content2->objectForKey(x); 
	CCString* _y=(CCString*)content2->objectForKey(y); 
	CCString* _width=(CCString*)content2->objectForKey(width); 
	CCString* _height=(CCString*)content2->objectForKey(height); 
	//return CCRectMake(0,0,100,100);
	return CCRectMake(_x->intValue(),_y->intValue(),_width->intValue(),_height->intValue());
}


 

然后会得到一个CCRect,当然这样的方式在cocos2d中显得笨重。

----------------------------------------------------------------------------------------------------------------------------------------------
下面方法会显得更合适

//将BIRD_LIST加入缓冲区
		CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(BIRD_LIST);


[BIRD_LIST为plist的路径]

只要之前加入了plist入缓冲区,在任意一个文件下都可以直接使用下面这句话,获取其内部图片。
CCSprite *pSprite=CCSprite::createWithSpriteFrameName(“plist中key中显示的图片名”);

会得到一个切好的小图片。

//用它切换图片

1.// 首先载入贴图集   
2.CCSpriteBatchNode *spriteBatch=CCSpriteBatchNode::batchNodeWithFile("bird.png");  
3.this->addChild(spriteBatch);  
4.CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("bird.plist");  
5.// 生成Sprite   
6.CCSprite *firstSprite=CCSprite::spriteWithSpriteFrameName("headup.png");  
7.//需要更换图片时   
8.CCSpriteFrame *frame=CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("yellow_bird.png");  
9.firstSprite->setDisplayFrame(frame); 

 

当然帧动画用它再合适不过。

	CCSprite* stageLevel=CCSprite::createWithSpriteFrameName(stage_level_ready);
	stageLevel->setPosition(ccp(stageLevel->getContentSize().width/2+130,stageLevel->getContentSize().height));
	////stageLevelReady->setTag(1002);
	pSender->getChildByTag(1001)->addChild(stageLevel);
	CCSpriteFrame *stageLevelReady=CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(stage_level_ready);  
	CCSpriteFrame *stageLevelLevel=CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(stage_level_level);  
	CCSpriteFrame *stageLevelStart=CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(stage_level_start);  

	CCArray* pArray = CCArray::createWithCapacity(3);//此处不能直接用create
	pArray->addObject(stageLevelReady);
	pArray->addObject(stageLevelLevel);
	pArray->addObject(stageLevelStart);

	CCAnimation* animation= CCAnimation::createWithSpriteFrames(pArray,duration);
	CCAnimate* animate=CCAnimate::create(animation);
	

	stageLevel->runAction(CCRepeat::create(animate,1));

 

你可能感兴趣的:(cocos2d-x换图片,cocos2d-x帧动画,CCSprite换图片,plist文件读取)