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添加游戏资源
创建一个名为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.添加一个精灵
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;
}
class HelloWorld : public cocos2d::CCLayerColor
跟着修改HelloWorldScene.cpp文件的init()方法,将
CC_BREAK_IF(! CCLayer::init());
修改为
CC_BREAK_IF(! CCLayerColor::initWithColor(ccc4(255,255,255,255)));
温馨提示:
文章所写的东西只是我自己的理解,如果哪里出现错误,敬请斧正。
您可以留言、微博私聊我或Email我
我的微博:http://weibo.com/u/2007282737
我的Email:pengkailiao@gmail.com