cocos2d-x SimpleGame(1)如何添加一个精灵

SimpleGame的知名度对Cocos2der来说就好像helloworld对程序猿来说一样,都是经典入门案例。Cocos2d-x的作者也不能免俗,在他们的英文站上就有该项目的介绍和代码,以下为地址:http://www.cocos2d-x.org/projects/cocos2d-x/wiki,在第三点Cocos2d-x下,Chapter1-Chapter9部分。

为了方便一些英文不太好的同学,我在此献丑给大家翻译一下,同时由于年代久远的原因,例子里用的都是老版本的函数和宏,我在博客当中给大家贴的都是我当前版本的代码


我的环境  XP+VS2010+cocos2d-2.0-x-2.0.4


1添加游戏资源

以下这些即将用在cocos2d-x项目中的图片都是由 Ray Wenderlich的太太制作而来,大家鼓掌、撒花,表示感谢。


创建一个名为Cocos2dSimpleGame的项目,将上面三张图片下载,并找到你创建的项目的地址,把图片拷贝进cocos2d-x/Cocos2dSimpleGame/Resources文件夹内。

Win32的可执行文件会在它的相关路径中寻找资源。因此我们必须手动的把图片文件从cocos2d-x/Cocos2dSimpleGame/Resources文件夹拷贝到cocos2d-x/Debug.win32文件夹。

但作为一个像我这么懒的人,当然会找机会偷懒。


右键项目选择属性,生成事件->后期生成事件->命令行,在这位置填写这句命令:

xcopy /Y /E ..\Resources\*.* $(OutDir)

这样每当程序编译完成,VS就会帮你把资源文件拷到可执行文件的目录里。

译者注:我解释一下这段看起来神神叨叨的话,作者的意思其实是,当你在VS里面把程序跑起来后,在cocos2d-x/Debug.win32这里其实也生成了一个可执行文件,双击该文件可直接运行你写的程序,但是会提示你找不到图片,因为这个可执行文件是在当前目录里寻找你使用的图片,没拷过来当然找不到,所以要手动把cocos2d-x/Cocos2dSimpleGame/Resources目录下的资源文件全拷过来。但作者是个懒鬼,所以他选了一条懒路,他进行了一点设置,让VS在编译成功后顺便把资源文件拷过去。但是不知道是什么原因,他给出的这条命令其实是有错的,作者的写法是

xcopy /Y /E .\Resources\*.* $(OutDir)

但是这样写完成不了我们想要的功能,正确应该是这样写

xcopy /Y /E ..\Resources\*.* $(OutDir)

具体原因大家可以自行查找命令行下当前目录和上一级目录的表示方法,我们继续。

2.添加一个精灵

现在你可以看到把cocos2d游戏从obj-c移植到C++是多容易。打开HhelloWorldScene.cpp,把init方法下的内容替换成如下代码:
bool HelloWorld::init()
{
	bool bRet = false;
	do 
	{
		//
		// super init first
		//

		CC_BREAK_IF(! CCLayerColor::initWithColor(ccc4(255,255,255,255)));

		//
		// add your codes below...
		//

		// 设置菜单项并设置选中该项后的回调函数
		CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
			"CloseNormal.png",
			"CloseSelected.png",
			this,
			menu_selector(HelloWorld::menuCloseCallback));
		CC_BREAK_IF(! pCloseItem);

		// 设置菜单项位置
		pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));

		// 声明菜单并添加菜单项pCloseItem
		CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
		pMenu->setPosition(CCPointZero);
		CC_BREAK_IF(! pMenu);

		// 添加菜单到HelloWorld的层中
		this->addChild(pMenu, 1);


		//获取屏幕尺寸
		CCSize winSize = CCDirector::sharedDirector()->getWinSize();
		//声明并初始化精灵
		CCSprite *player = CCSprite::create("Player.png");
		//设置精灵位置
		player->setPosition( ccp(player->getContentSize().width/2, winSize.height/2) );
		//添加精灵到HelloWorld的层中
		this->addChild(player);

		bRet = true;
	} while (0);

	return bRet;
}

好的,接下来编译并运行代码。现在我们可以看到一个身着黑衣的猥琐忍者,红着眼睛隐藏在黑色的背景中。为了更好地游戏体验,我们把背景换成白色的。这很简单,修改HellowWorld,让HelloWorld继承CCLayerColor类,而不是CCLayer。

首先,修改HelloWorldScene.h的声明部分
class HelloWorld : public cocos2d::CCLayerColor

跟着修改HelloWorldScene.cpp文件的init()方法,将
CC_BREAK_IF(! CCLayer::init());
修改为
CC_BREAK_IF(! CCLayerColor::initWithColor(ccc4(255,255,255,255)));

温馨提示:
在C++里继承默认为private继承,所以继承CCLayerColor类时需要在前面加上public声明。

编译并运行代码,你就可以看到我们的英雄站在一片白茫茫的地方了。





如果你看不懂文字版,也有视频版可以看,在这我推荐无脑码农的视频,也是讲simplegame的: http://article.ityran.com/archives/2346


文章所写的东西只是我自己的理解,如果哪里出现错误,敬请斧正。

您可以留言、微博私聊我或Email我


我的微博:http://weibo.com/u/2007282737

我的Email:pengkailiao@gmail.com




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值