cocos2d 学习

好想吐槽,唉,活得大喜大悲啊。牛犊不怕虎,自己都成老牛了,还是跟牛犊一样啊。

逃课情况下,发奋了七个月考上了研究生,复试突击5道题做对了1道。啥java,c++,都不懂啊。

为了给自己找压力,学习,实习了一份工作,各种不会啊。不会领工资很是内疚的啊啊啊。

昨天解析了plist文件,把其整理一下。

	<plist version="1.0">
  <dict>
    <key>sprites</key>
    <dict>
      <key>00_New_Sprite</key>
      <dict>
        <key>anchor</key>
        <string>{0.5,0.5}</string>
        <key>image</key>
        <string>bg.jpg</string>
        <key>position</key>
        <string>{510,384}</string>
        <key>rotation</key>
        <string>0</string>
        <key>scale</key>
        <string>{1,1}</string>
        <key>opacity</key>
        <string>255</string>
      </dict>
      <key>01_New_Sprite</key>
      <dict>
        <key>anchor</key>
        <string>{0.5,0.5}</string>
        <key>image</key>
        <string>sprite1.png</string>
        <key>position</key>
        <string>{253,238}</string>
        <key>rotation</key>
        <string>90</string>
        <key>scale</key>
        <string>{2,1}</string>
        <key>opacity</key>
        <string>255</string>
      </dict>
      <key>02_New_Sprite</key>
      <dict>
        <key>actorType</key>
        <string>CCActor</string>
        <key>anchor</key>
        <string>{0.5,0.5}</string>
        <key>image</key>
        <string>sprite2.png</string>
        <key>position</key>
        <string>{851,257}</string>
        <key>rotation</key>
        <string>45</string>
        <key>scale</key>
        <string>{1,2}</string>
        <key>opacity</key>
        <string>255</string>
      </dict>
      <key>03_New_Sprite</key>
      <dict>
        <key>actorType</key>
        <string>CCActor</string>
        <key>anchor</key>
        <string>{0.5,0.5}</string>
        <key>image</key>
        <string>sprite3.png</string>
        <key>position</key>
        <string>{522,528}</string>
        <key>rotation</key>
        <string>80</string>
        <key>scale</key>
        <string>{1,1}</string>
        <key>opacity</key>
        <string>255</string>
      </dict>
    </dict>
  </dict>
</plist>

这是文件格式。

任务:尝试通过sprite.plist加载页面,了解CCDictionary的用法:sprite.plist中以key,value的形式列出了界面上sprite的基本属性,通过加载plist文件,读取key的值可以知道每一个sprite的位置,大小,旋转角度,透明度等加载plist文件的方法:CCDictionary *dict = CCDictionary::createWithContentsOfFile("sprite.plist".c_str());


首先想到的是一个一个解析。麻烦的要死。单个代码如下

CCArray *animal_dictionary=CCDictionary::createWithContentsOfFile("sprites.plist");

	CCDictionary *content_1 = (CCDictionary*) animal_dictionary->objectForKey("sprites");
	 

	CCDictionary *content_11=(CCDictionary*) content_1->objectForKey("00_New_Sprite");
	CCSprite *sprite1=CCSprite::create(content_11->valueForKey("image")->getCString());
	sprite1->setPosition(CCPointFromString(content_11->valueForKey("position")->getCString()));
	//sprite1->setAnchorPoint(CCPointFromString(content_11->valueForKey("anchor")->getCString()));
	sprite1->setRotation((content_11->valueForKey("rotation")->getCString());
	this->addChild(sprite1);



	CCDictionary *content_12=(CCDictionary*)content_1->objectForKey("01_New_Sprite");
	CCSprite *sprite2=CCSprite::create(content_12->valueForKey("image")->getCString());
	sprite2->setPosition(CCPointFromString(content_12->valueForKey("position")->getCString()));
	sprite2->setAnchorPoint(CCPointFromString(content_12->valueForKey("anchor")->getCString()));
	sprite2->setRotation((float)(*content_12->valueForKey("rotation")->getCString()));
	this->addChild(sprite2);




	CCDictionary *content_13=(CCDictionary*)content_1->objectForKey("02_New_Sprite");
	CCSprite *sprite3=CCSprite::create(content_13->valueForKey("image")->getCString());*/
........

这样要写到几年啊。用个for循环把。

但是还是麻烦啊,每个都要顾及自己的变量啊。


自己创建个Sprite类,把里面的属性放到构造函数里面。读到文件plist(

CCArray *animal_dictionary=CCDictionary::createWithContentsOfFile("sprites.plist");
)后在读一次CCDictionary *content_1 = (CCDictionary*) animal_dictionary->objectForKey("sprites");可以到达sprites目录下,也就是可以看到xx_New_Sprite一系列的名字了。这时候可以new个精灵了,因为下一步就可以进入到精灵内部类。还有个问题,进入到sprites里面后,要把此目录下的四个文件放在数组里用到语句是

CCArray *plist_array=content_1->allKeys();

plist_array->count()是数组的长度。想把每个sprite的名字取出来该怎么办呢? CCString *str=(*CCString*) plist_array->objectAtIndex(i);

这时候已经得到了下层目录的值了,也就可以理解为四个文件夹的名字了。 str->getCCString();

让sprite指向这些名字(注意四个文件夹还是目录) CCDictionary *sprite =dynamic_cast<CCDictionary>(content1->objectForKey(str->getCString));

得到的这个sprite要使用这是每个精灵的对象的指针。

然后就是创建精灵 MySprite *sprites=new MySprite(sprite,this);

   把精灵的属性都放在构造函数里,这样的话,每次初始化一个精灵,每个精灵都会自动的调用自己的构造函数,完成构造。

精灵的头文件跟方法定义如下:

头文件:

#include "cocos2d.h"
using namespace cocos2d;


class MySprite:public CCSprite
{
public:
	MySprite(void);
	~MySprite(void);
	MySprite(CCDictionary* pDict,CCLayer* pScene);
	

};

构造方法实现:


#include"MySprite.h"

MySprite::MySprite(void)
{

}
MySprite::~MySprite(void)
{

}

MySprite::MySprite(CCDictionary *pDict,CCLayer* pScene)
{
	CCSprite::initWithFile(pDict->valueForKey("image")->getCString());

	this->setAnchorPoint(CCPointFromString(pDict->valueForKey("anchor")->getCString()));
	this->setRotation(pDict->valueForKey("rotation")->intValue());
	//this->setScale(CCPointFromString(pDict->valueForKey("scale")->getCString()));
	//this->setOpacity(pDict->valueForKey("opacity"));
	this->setPosition(CCPointFromString(pDict->valueForKey("position")->getCString()));
	this->setOpacity(pDict->valueForKey("opacity")->intValue());

	pScene->addChild(this);

}

注意传进来的是精灵对象 指针跟Scene指针。


注意里面的思想。把方法都封装了。直接调用构造函数即可。


复习一下。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值