接下来需要导入精灵帧资源,因为之前下载了TexturePacker,然后通过TexturePacker的"Publish sprite sheet"方法可以生成一个.pvr.ccz文件和一个.plist文件,但是我试用版生成的.pvr.ccz文件里面是加码的,所以我决定这里还是先通过一张图片一张图片添加的方式把图片资源加入到SpriteFrameCache当中。
附:原来添加plist的方式是继续在init函数中加入:

SpriteFrameCache::getInstance()->addSpriteFramesWithFile("image/role.plist","image/role.pvr.ccz");

我画了两张图片用于表示hero和enemy,名为hero-0.png和enemy-0.png,同样放在Resources/images/目录下。
hero-0.png:

enemy-0.png:

在使用plist的方法中,我们需要在HelloWorld::init()方法中将图片加入到SpriteFrameCache中,方法如下:

SpriteFrameCache::getInstance()->addSpriteFramesWithFile("images/hero-0.png", "images/enemy-0.png");

但是因为还没有获得TexturePacker的license key,所以这里现不使用这种方法。
我们将游戏中的人物分为两类,一类就是我们将要控制的玩家,另一类就是敌人,我们可以定义一个枚举类型PlayerType,然后再定义一个Player类,在Player的构造函数中通过传入参数PlayerType来确定Player的类型。
Player.h:

#ifndef __Palyer__
#define __Player__
#include "cocos2d.h"
USING_NS_CC; class Player : public Sprite
{
public:
enum PlayerType
{
HERO,
ENEMY
};
bool initWithPlayerType(PlayerType type);
static Player* create(PlayerType type);
}; #endif

Player.cpp:

#include "Player.h"
bool Player::initWithPlayerType(PlayerType type)
{
std::string spName = "";
switch (type)
{
case PlayerType::HERO:
spName = "hero-0.png";
break;
case PlayerType::ENEMY:
spName = "enemy-0.png";
break;
}
this->initWithSpriteFrameName(spName);
return true;
}
Player* Player::create(PlayerType type)
{
Player* player = new Player();
if (player && player->initWithPlayerType(type))
{
player->autorelease();
return player;
}
else
{
delete player;
player = NULL;
return NULL;
}
}

还需要在CMakeLists.txt中添加有关Player的信息:

set(GAME_SRC
Classes/AppDelegate.cpp
Classes/HelloWorldScene.cpp
Classes/Player.cpp
${PLATFORM_SPECIFIC_SRC}
) set(GAME_HEADERS
Classes/AppDelegate.h
Classes/HelloWorldScene.h
Classes/Player.h
${PLATFORM_SPECIFIC_HEADERS}
)

因为我们没有从plist中读取图片,而是一张图片一张图片地将图片加入到SpriteFrameCache中,所以我们在HelloWorld::init()函数中加入如下代码来将图片加入到SpriteFrameCache中:

    SpriteFrame *spriteFrame = CCSpriteFrame::create("images/hero-0.png", CCRectMake(, , , ));
Sprite *sprite = CCSprite::createWithSpriteFrame(spriteFrame);
SpriteFrameCache::getInstance()->addSpriteFrame(spriteFrame, "hero-0.png");
spriteFrame = CCSpriteFrame::create("images/enemy-0.png", CCRectMake(, , , ));
sprite = CCSprite::createWithSpriteFrame(spriteFrame);
SpriteFrameCache::getInstance()->addSpriteFrame(spriteFrame, "enemy-0.png");

然后根据PlayerType将Hero和Enemy两个精灵加入到游戏当中:

    Player* player = Player::create(Player::PlayerType::HERO);
player->setPosition(origin.x + player->getContentSize().width/, origin.y + visibleSize.height/);
this->addChild(player);
Player* enemy = Player::create(Player::PlayerType::ENEMY);
enemy->setPosition(origin.x + visibleSize.width - player->getContentSize().width/, origin.y + visibleSize.height/);
this->addChild(enemy);

程序运行效果:

完整的HelloWorldScene.cpp:

#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
#include "Player.h" USING_NS_CC; Scene* HelloWorld::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create(); // 'layer' is an autorelease object
auto layer = HelloWorld::create(); // add layer as a child to scene
scene->addChild(layer); // return the scene
return scene;
} // on "init" you need to initialize your instance
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
} auto visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin(); Sprite* background = Sprite::create("images/background.png");
background->setPosition(origin + visibleSize/);
this->addChild(background); SpriteFrame *spriteFrame = CCSpriteFrame::create("images/hero-0.png", CCRectMake(, , , ));
Sprite *sprite = CCSprite::createWithSpriteFrame(spriteFrame);
SpriteFrameCache::getInstance()->addSpriteFrame(spriteFrame, "hero-0.png");
spriteFrame = CCSpriteFrame::create("images/enemy-0.png", CCRectMake(, , , ));
sprite = CCSprite::createWithSpriteFrame(spriteFrame);
SpriteFrameCache::getInstance()->addSpriteFrame(spriteFrame, "enemy-0.png"); Player* player = Player::create(Player::PlayerType::HERO);
player->setPosition(origin.x + player->getContentSize().width/, origin.y + visibleSize.height/);
this->addChild(player);
Player* enemy = Player::create(Player::PlayerType::ENEMY);
enemy->setPosition(origin.x + visibleSize.width - player->getContentSize().width/, origin.y + visibleSize.height/);
this->addChild(enemy); return true;
} void HelloWorld::menuCloseCallback(Ref* pSender)
{
Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit();
#endif
}

完整的HelloWorldScene.cpp

最新文章

  1. 解决java文件编码和windows7系统(中文版)默认编码冲突所导致的乱码情况
  2. jetbrains公司全系列软件最简单破解教程
  3. 在Myeclipse buildpath 加server lib
  4. mac编程的debug工具
  5. MVC 读取图片
  6. C 语言中 typeof keyword简单介绍
  7. 来,试试PERL
  8. WinAPI: GetVolumeInformation - 读取文件系统信息
  9. JSP简单练习-使用JDOM创建xml文件
  10. Spark SQL1.2测试
  11. python/匿名函数和内置函数
  12. BZOJ_3223: Tyvj 1729 文艺平衡树 _splay
  13. Django进阶使用
  14. Matplotlib python 基本用法
  15. WCF分布式开发常见错误解决(1):An error occurred while attempting to find services at...添加服务引用出错
  16. android 常见内存泄漏原因及解决办法
  17. Java电话监听器【精品博客】
  18. 回归模型效果评估系列3-R平方
  19. 043——VUE中组件之使用.sync修饰符与computed计算属性实现购物车原理
  20. mysql 自动记录数据最后修改时间

热门文章

  1. js 函数参数 arguments[0]
  2. json关键总结
  3. 利用GDB对程序进行调试
  4. oracle 字符集 AL32UTF8、UTF8
  5. Java类对象数组声明和初始化
  6. ElasticSearch自定义分析器-集成结巴分词插件
  7. iOS边练边学--通知机制和键盘处理
  8. 解决ssh连接超时时间(ssh timeout)的设置方法
  9. 判断IE浏览器的最简洁方法
  10. 20 个 jQuery 和 CSS 的文本特效插件