这几天一直都在看红孩儿的博客,里面讲cocos2d-x可以说:逆天了!!!你无法想象他注解的详细,详细的让你觉得枯燥,害怕。对我这种初学者来说,一篇博客看下来整个人都凌乱了。不过真的讲的很好!不吊大家胃口,直接上链接:http://blog.csdn.net/honghaier?viewmode=contents
其中几篇对action 讲述的很好,从里到外。本文就是在红孩儿博客的基础上,再参考蓝米粒的动作小例子:http://blog.csdn.net/xiaoxiangp/article/details/7693343
还是分步骤来:
1.先看.h文件,在类的声明中声明各种需要用到的成员函数和成员变量:
-
classHelloWorld:publiccocos2d::CCLayer
-
{
-
public:
-
-
virtualboolinit();
-
-
-
staticcocos2d::CCScene*scene();
-
-
下面是按下各个文字菜单调用的回调函数
-
virtualvoidLJCallback(CCObject*pSender);
-
virtualvoidCXCallback(CCObject*pSender);
-
virtualvoidBJCallback(CCObject*pSender);
-
virtualvoidInitback(CCObject*pSender);
-
virtualvoidGZCallback(CCObject*pSender);
-
virtualvoidJDCallback(CCObject*pSender);
-
virtualvoidonExit();
-
-
-
LAYER_NODE_FUNC(HelloWorld);
-
protected:
-
cocos2d::CCSprite*m_tamara;
-
cocos2d::CCProgressTimer*m_left;
-
cocos2d::CCSizes;
-
};
2. 现在看.cpp文件,init()函数中把菜单实现,并且初始化各种变量...代码中有很多宏判断,是因为需要转换字符才能显示中文,后面会告诉大家方法...
-
boolHelloWorld::init()
-
{
-
boolbRet=false;
-
do
-
{
-
CC_BREAK_IF(!CCLayer::init());
-
-
CCMenuItemFont::setFontName("Thonburi");
-
CCMenuItemFont::setFontSize(25);
-
-
s=CCDirector::sharedDirector()->getWinSize();
-
-
std::stringmenuItemStr="立即动画";
-
#if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
-
GBKToUTF8(menuItemStr,"gb2312","utf-8");
-
#endif
-
CCMenuItem*shuenjian=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
-
menu_selector(HelloWorld::LJCallback));
-
-
menuItemStr="持续动画";
-
#if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
-
GBKToUTF8(menuItemStr,"gb2312","utf-8");
-
#endif
-
CCMenuItem*chixu=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
-
menu_selector(HelloWorld::CXCallback));
-
-
menuItemStr="补间动画";
-
#if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
-
GBKToUTF8(menuItemStr,"gb2312","utf-8");
-
#endif
-
CCMenuItem*bujian=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
-
menu_selector(HelloWorld::BJCallback));
-
-
menuItemStr="跟踪动画";
-
#if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
-
GBKToUTF8(menuItemStr,"gb2312","utf-8");
-
#endif
-
CCMenuItem*genzong=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
-
menu_selector(HelloWorld::GZCallback));
-
-
menuItemStr="进度动作";
-
#if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
-
GBKToUTF8(menuItemStr,"gb2312","utf-8");
-
#endif
-
CCMenuItem*jingdu=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
-
menu_selector(HelloWorld::JDCallback));
-
-
menuItemStr="初始化精灵";
-
#if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
-
GBKToUTF8(menuItemStr,"gb2312","utf-8");
-
#endif
-
CCMenuItem*InitItem=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
-
menu_selector(HelloWorld::Initback));
-
-
-
CCMenu*pMenu=CCMenu::menuWithItems(shuenjian,chixu,bujian,genzong,jingdu,InitItem,NULL);
-
pMenu->alignItemsVertically();
-
CC_BREAK_IF(!pMenu);
-
pMenu->setPosition(s.width/2+s.width/4,s.height/2);
-
this->addChild(pMenu,1);
-
-
-
m_tamara=CCSprite::spriteWithFile("jl.png");
-
m_tamara->retain();
-
addChild(m_tamara,1);
-
m_tamara->setPosition(CCPointMake(s.width/2,s.height/2));
-
-
-
CCSprite*bg=CCSprite::spriteWithFile("bg_24.png");
-
bg->setPosition(ccp(s.width/2+s.width/2,s.height/2));
-
this->addChild(bg,-1);
-
-
bRet=true;
-
}while(0);
-
-
returnbRet;
-
}
3. 规范代码,养成好习惯,所以我们添加<Tools.h> 和 <Tools.cpp> 文件,把字符转换的处理函数写在里面:
--Tools.h,其中会调用到‘.iconv.h’这个头文件,要自己手动添加进去,这让我一阵好找!在
cocos2d-1.0.1-x\cocos2dx\platform\third_party\win32\iconv
tool.h:
-
#ifndef_TOOLS_H_
-
#define_TOOLS_H_
-
-
#include"cocos2d.h"
-
-
#if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
-
-
#include"iconv.h"
-
intGBKToUTF8(std::string&gbkStr,constchar*toCode,constchar*formCode);
-
-
#endif
-
-
#endif
--Tools.cpp
-
#include"tools.h"
-
-
#if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
-
-
intGBKToUTF8(std::string&gbkStr,constchar*toCode,constchar*formCode)
-
{
-
iconv_ticonvH;
-
iconvH=iconv_open(formCode,toCode);
-
if(iconvH==0)
-
{
-
return-1;
-
}
-
-
constchar*strChar=gbkStr.c_str();
-
constchar**pin=&strChar;
-
-
size_tstrLength=gbkStr.length();
-
char*outbuf=(char*)malloc(strLength*4);
-
char*pBuff=outbuf;
-
memset(outbuf,0,strLength*4);
-
size_toutLength=strLength*4;
-
if(-1==iconv(iconvH,pin,&strLength,&outbuf,&outLength))
-
{
-
iconv_close(iconvH);
-
return-1;
-
}
-
-
gbkStr=pBuff;
-
iconv_close(iconvH);
-
return0;
-
}
-
#endif
4. 添加附加依赖项,不添加的话,会提示找不到的外部符号....
对工程右键-> 属性 -> 连接器 -> 输入 -> 附加依赖项 栏目->后面有个按钮,点击打开,换一行加入libiconv.lib,或者在最后空一格加上libiconv.lib也行
5. 对号入座的实现各个小功能的回调函数和退出的处理函数:
-
-
voidHelloWorld::LJCallback(CCObject*pSender)
-
{
-
CCActionInstant*Action1=CCPlace::actionWithPosition(ccp(100,100));
-
m_tamara->runAction(Action1);
-
}
-
-
-
voidHelloWorld::CXCallback(CCObject*pSender)
-
{
-
-
CCFiniteTimeAction*actionsGo=CCSpawn::actions(
-
CCMoveTo::actionWithDuration(1.0f,ccp(0,0)),
-
CCRotateBy::actionWithDuration(1.0f,360),NULL);
-
-
-
CCFiniteTimeAction*actionsBack=CCSpawn::actions(
-
CCMoveTo::actionWithDuration(1.0f,CCPointMake(s.width/2,s.height/2)),
-
CCRotateBy::actionWithDuration(2,720),NULL);
-
-
-
CCFiniteTimeAction*All=CCSequence::actions(actionsGo,actionsBack,NULL);
-
-
-
m_tamara->runAction(CCRepeatForever::actionWithAction((CCActionInterval*)All));
-
}
-
-
-
voidHelloWorld::BJCallback(CCObject*pSender)
-
{
-
CCActionInterval*actionTo=CCRotateBy::actionWithDuration(4.0f,360);
-
m_tamara->runAction(CCEaseBackOut::actionWithAction(actionTo));
-
}
-
-
-
voidHelloWorld::GZCallback(CCObject*pSender)
-
{
-
CCActionInterval*Moveto=CCMoveBy::actionWithDuration(3.0f,CCPointMake(s.width*2+100,0));
-
CCActionInterval*MoveBack=Moveto->reverse();
-
CCFiniteTimeAction*All=CCSequence::actions(Moveto,MoveBack,NULL);
-
CCAction*rep=CCRepeatForever::actionWithAction((CCActionInterval*)All);
-
-
m_tamara->runAction(rep);
-
this->runAction(CCFollow::actionWithTarget(m_tamara,CCRectMake(0,0,s.width*2,s.height)));
-
}
-
-
-
voidHelloWorld::JDCallback(CCObject*pSender)
-
{
-
CCProgressTo*to1=CCProgressTo::actionWithDuration(2,100);
-
CCProgressTimer*left=CCProgressTimer::progressWithFile("jl.png");
-
left->setType(kCCProgressTimerTypeHorizontalBarLR);
-
addChild(left);
-
left->setPosition(CCPointMake(100,s.height/2));
-
left->runAction(CCRepeatForever::actionWithAction(to1));
-
}
-
-
-
voidHelloWorld::Initback(CCObject*pSender)
-
{
-
m_tamara->stopAllActions();
-
m_tamara->setRotation(0.0f);
-
m_tamara->setPosition(ccp(s.width/2,s.height/2));
-
}
-
-
voidHelloWorld::onExit()
-
{
-
m_tamara->release();
-
CCLayer::onExit();
-
}
最后的释放中,我只释放了 m_tamara.但是还有一个m_left成员变量,如果在此释放就会出问题..有谁知道原因的请留言哦...谢谢
分享到:
相关推荐
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
Cocos2d-x游戏编程——C++篇(电子工业出版社,徐飞 著)书本配套的光盘代码,
cocos2d-x-2.1.5
在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...
Cocos2d-x是移动跨平台开发最流行的游戏引擎,而本书是一本很全面的、比较‘接地气’的游戏开发教程。书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关...
资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...
cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656
cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...
cocos2d-x 2.x action集合(详细注释分类)
资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...
这是我重新弄的cocos2d-x-3.0的类图.之前别人兄台弄的,有些不全面,有些地方错误.我这个可以说是最新的了.每个类添加了中文的详细注解,同时也添加了中文的类名称翻译.这样对cocos2d-x-3.0的框架比较好上手. 有兴趣的...
经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip
精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发
Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...
Cocos2d-x windows vs2010 配置图文详解
cocos2d-x 动画工具 Flash2Cocos2d-x 1.3
Cocos2d-x实战 JS卷 Cocos2d-JS开发 PDF 电子书完整版本
cocos2d-x 3.0 人物行走 . 包里有代码和 图片资源.
Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签