第2章 ——如何添加一个精灵-开发资源- Cocos2D-X中文站

更新时间:2023-07-15 21:31:02 阅读: 评论:0

第二章 ——如何添加一个精灵
Posted on 2012-03-28 15:44:39
水宜生水杯1.1 在iPhone
上添加资源
1.2 在Android 上添加资源
濮阳壮馍1.3 在win32上添加资源
1.4 在沃Phone 上添加资源
2. 添加一个精灵
要点1
要点2
教程中的源码可以在这下载:
你可以自己按照文章一步步来完成游戏,或者直接下载完整的代码,简单地编译运行。
1.加入图片资源
这里有三张由Ray Wenderlich 的妻子所做的图片,它们将会用在Cocos2dSimpleGame 里。学完第一章——在多种平台上创建新的cocos2d-x 项目后,你现在应该有一个cocos2d-x/Cocos2dxSimpleGame 文件夹。请下载这些图片,并把它们复制到cocos2d-
x/Cocos2dxSimpleGame/Resources 文件夹里。
之后回到各种平台上的IDE 上来。
1.1在iPhone 上添加资源
非常简单,打开Xcode ,然后点击Add->Existing Files from the context menu of
Cocos2dxSimpleGame/Resources group ,添加上面的三张图片。请注意,你应当在“Add To Targets”一栏里勾选Cocos2dxSimpleGame
1.2在Android 上添加资源
如果你是运行build_native.sh 来编译的话,你应该把图片复制到Resources 文件夹,否则就把图片文件复制到“asts”文件夹。
1.3在win32上添加资源
开发资源
首页>> 开发资源 >> 第二章 ——如何添加一个精灵
首页游戏展示开发资源参考资料博客论坛引擎下载
Win32的可执行文件会在它的相关路径中寻找资源。因此我们必须手动的把图片文件从cocos2d-x/Cocos2dxSimpleGame/Resources 文件夹复制到cocos2d-x/Debug.win32 文件夹。
但像我这样的懒人,总能找到偷懒的办法。
把这行写入Post-Build Event-> Command Line
xcopy /Y /E .\Resources\*.* $(OutDir)
辩证法三个基本观点
每次编译完成时,VistualStudio会复制资源到可执行的路径。
1.4在沃Phone上添加资源
在沃Phone 游戏里使用zip格式的资源包是非常推荐的。如果你仍然对此不太清楚,请阅读How to u ZIP resource package on cocos2d-uphone
2.添加一个精灵
你现在会发现把cocos2d 游戏从objc移植到c++是多么的简单。打开HelloWorldScene.cpp,替换init方法如下所示:
1bool HelloWorld::init()
2{
3 bool bRet = fal;
4 do
5 {
6 //////////////////////////////////////////////////////////////////////////
7 // super init first
8 //////////////////////////////////////////////////////////////////////////
9
10 CC_BREAK_IF(! CCLayer::init());
11
12 //////////////////////////////////////////////////////////////////////////
13 // add your
14 ////////////////////////////////////////////////////////////////////////// 15
16 // 1. Add a menu item with "X" image, which is clicked to quit the program.
17
18 // Create a "clo" menu item with clo icon, it's an auto relea object.
19 CCMenuItemImage *pCloItem = CCMenuItemImage::itemFromNormalImage(
20 "CloNormal.png",
21 "CloSelected.png",
22 this,
23 menu_lector(HelloWorld::menuCloCallback));
24 CC_BREAK_IF(! pCloItem);
25
26 // Place the menu item bottom-right conner.
27 pCloItem->tPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));
28
29 // Create a menu with the "clo" menu item, it's an auto relea object.
30 CCMenu* pMenu = CCMenu::menuWithItems(pCloItem, NULL);
31 pMenu->tPosition(CCPointZero);
32 CC_BREAK_IF(! pMenu);
33
34 // Add the menu to HelloWorld layer as a child layer.
35 this->addChild(pMenu, 1);
36
37 /////////////////////////////
38 // 2. add your
39
40 CCSize winSize = CCDirector::sharedDirector()->getWinSize();
41 CCSprite *player = CCSprite::spriteWithFile("Player.png",
42 CCRectMake(0, 0, 27, 40) );
43 player->tPosition( ccp(player->getContentSize().width/2, winSize.height/2) );
44 this->addChild(player);
45
46 bRet = true;
47 } while (0);
48
49 return bRet;
50}
上面的代码中,我实际上仅添加了“2.Add your codes below”那一节的内容。你可以从下面的对比中,看到如何一行一行地把cocos2d-iphone代码简单地转化为cocos2d-x跨平台的代码。
1// cpp with cocos2d-x
2bool HelloWorld::init()
3{
4 if ( CCLayer::init() )
5 {
6 CCSize winSize = CCDirector::sharedDirector()->getWinSize();
7 CCSprite *player = CCSprite::spriteWithFile("Player.png",
8 CCRectMake(0, 0, 27, 40) );
9 player->tPosition( ccp(player->getContentSize().width/2,
10 winSize.height/2) );
11 this->addChild(player);孕妇要生之前有什么征兆
12 }
13 return true;
14}
1// objc with cocos2d-iphone
2-(id) init
3{
4 if( (lf=[super init] ))
5 {
6 CGSize winSize = [[CCDirector sharedDirector] winSize];
7 CCSprite *player = [CCSprite spriteWithFile:@"Player.png"
8 rect:CGRectMake(0, 0, 27, 40) ];
9 player.position = tSize.width/2,
10 winSize.height/2);
11 [lf addChild:player];
12 }
家训作文13 return lf;
14}
腕足动物
要点1
1. 不要使用C++里的__super来替代objc里的super。关键字__super仅能在VC++中被识
别,但是无法被GCC给编译。因此你最好调用其父类名称,CCLayer::init()
2. 这里没有属性的概念。因此在objc里的属性,我们用get/t方法来代替。例如,如果你想要获取CCSprite的contentSize属性,你必须调用sprite->getContentSize()方法。contentSize的第一个字母应该为大写的“C”,之后为它加上“get”前缀。
3. 使用tter来设置属性的值,“player.position=…”,应变为player->tPosition(…)
4. 但是访问结构体的成员不遵循这一规则。例如,在winSize结构体中,没
有“width”&“height”的getter/tter
5. 你不需要像objc那样,解释每一个参数的用途。例如,[CCSprite spriteWithFile…, rect…];直接转换为CCSprite::spriteWithFile(…, ….);
6. 我们已经完成了一些常用的CGGeometry函数,诸如CGRectMake, CGPointMake, CGSizeMake, CGPointZero, CGSizeZero, CGRectZero。你可以在
cocos2dx/include/CCGemoetry.h中找到它们。它们的用途和iOS一样。仅有一点点不同在于它们的前缀,为了避免命名上的冲突,在cocos2d-x里,前缀为CG、NS、UI的类都统一改成了CC前缀。
7. 所有cocos2d-x里的游戏元素,例如sprite、layer、scene、label、action都在heap里被分配了内存。因此我们必须用指针“->”来调用它们的方法。
8. 在cpp里,用关键字“this”来代替objc里的“lf”
9. 现在init方法的返回值是“bool”类型了。在cpp里没有关键字“id”,因此那些返回值
为“id”的方法要么替换成对象的指针,要么换成bool。
10. 对于Android,由于标题栏占用了一些空间,因此你需要在cpp里这样设置玩家的位置(Size.width/2 + 40, winSize.height/2)。
好了,我们可以编译并运行代码了。现在忍者一袭黑衣,躲在黑暗中闪着红眼。要玩游戏的话,我们必须把背景改成白色的。这非常简单,修改HelloWorld,使它继承CCLayerColor,而不是CCLayer。
首先,修改HelloWorldScene.h的声明部分
1// cpp with cocos2d-x
2class HelloWorld : public cocos2d::CCLayerColor
1// objc with cocos2d-iphone
2@interface HelloWorld : CCLayerColor
之后修改HelloWorld::init()内的初始部分
1if ( !CCLayer::init() )
2{
3 return fal;
4}
改成
1if ( !CCLayerColor::initWithColor( ccc4(255,255,255,255) ) )
2{
3 return fal;
4}
鼠标没反应
这里有些和RayWenderlich的代码不同,因为我偏好防守型的代码风格。正常的代码是,if super init 成功了,then 执行什么什么,我比较偏好if init失败了,先做出错的处理,之后再编写正确的流程。好了,回到正题。让我们来继续比较c++与objc的转换
1// cpp with cocos2d-x
2if ( CCLayerColor::initWithColor( ccc4(255,255,255,255) ) )
1// objc with cocos2d-iphone
2if ( lf = [super initWithColor:ccc4(255,255,255,255)] )
要点2
1. 在c++里继承默认为private继承,因此需要在CCLayerColor类声明前加上“public”。
2. Cocos2d-iphone的主要作者RicardoQuesada建议我们在cocos2d-x中使用命名空间。检查你所调用的cocos2d-x类是在“cocos2d”命名空间还是在“CocosDenshion”命名空间是非常重要的。
编译并运行,之后你就会看到小英雄孤单地站在白色的背景里。
iPhone:
Android:
沃Phone:
Win32:
_How_to_Add_a_sprite柿子干的功效与作用
" >
首页游戏展示开发资源参考资料博客引擎下载
©2010-2012 Cocos2D-x 开源开发者社区版权所有

本文发布于:2023-07-15 21:31:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1082843.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:资源   游戏   图片   代码   例如
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图