cocos2dx渲染机制 怎么增加关卡

主题 : 姜老师的豆知识——使用cocos2dx制作游戏关卡编辑器
级别: 精灵王
可可豆: 4936 CB
威望: 4886 点
在线时间: 1608(时)
发自: Web Page
来源于&&分类
姜老师的豆知识——使用cocos2dx制作游戏关卡编辑器&&&
因为使用Release模式的EXE包可以在其他电脑上运行,所以,使用cocos2dx来做一个游戏的编辑器工具也是一个不错的选择。在这里,我分享做过的其中一个编辑器的过程。故事发生在几个月前,那时,我们做的一个游戏,告知需要在游戏中,增加一个元素,而且,时间有限,更改这个功能,总共不能超过两天,而此时如果要添加这个元素,需要让策划将过去拼好的关卡,重新拼一次,而且我也需要在地图编辑器中,添加一个新的元素。我本是想改编辑器,然后让策划重新拼,可是,这样时间不够。我这时意识到,如果当时编写编辑器时,如果能讲编辑好的地图直接读取,那么,这个工作就会变得很简单。所以,当做一个编辑器工具时,需要有一个可以直接将过去编辑好的内容直接打开的功能。这个就像是 LOAD 和 SAVE。这个功能,我使用了void GameBallArrayManager:: toSave(const char* nameP){ string path = &save\\m_&; path.append(nameP); path.append(&.map&); fout.open(path.c_str(),ofstream:: out|ofstream::trunc|ofstream:: binary); int valueP = rowVector.size(); char aT = (valueP && 24)&0 char bT = (valueP && 16)&0 char cT = (valueP && 8)&0 char dT = (valueP)&0
// fout.put(aT); fout.put(bT); fout.put(cT); fout.put(dT); // for(int i = 0; i & valueP;++i) { BallRow* rowTemp = rowVector.at(i); for(int j=0; j& 11;++j) {&& char ballId = rowTemp-&getId(j);&& fout.put(ballId); } } // fout.close();}void GameBallArrayManager:: toLoad(const char* nameP){ string path = &load\\m_&; path.append(nameP); path.append(&.map&); fin.open(path.c_str(),ifstream:: in | ifstream:: binary );&&int aT = fin.get() & 0     int bT = fin.get() & 0     int cT = fin.get() & 0     int dT = fin.get() & 0&&int length = ((aT&&24)|(bT&&16)|(cT&&8)|dT);&&CCLog(&length = %d&,length);&&toCleanAllRow();&&for(int i=0; i&++i)&&{&&addRow(i);&&}&&for(int i=0; i&++i)&&{&&for(int j =0;j& 11;++j)&&{&&char ballId = fin.get();&&toSetElement(ballId,j,i);&&}&&}   fin.close();}这里,我用了两个文件夹,save和load,目的是尽量保持清晰,放在同一个文件夹下也可以,个人习惯而已。传进来的字符串是 当前的关卡数。
我写了一个界面,可以编辑当前的关卡数字。 左下角按钮是清零,右下角是回到关卡编辑主界面因为编辑器中要用到很多“按钮”,于是,我单独写了一个类,来模拟按钮的功能#ifndef __JAROD_PRESS_BUTTON_H__#define __JAROD_PRESS_BUTTON_H__#include &cocos2d.h&#include &cocos-ext.h&using namespace cocos2d;usingclass JarodPressButton{public: JarodPressButton(void); virtual ~JarodPressButton(void); //设置按钮 void initWithFrameName(const char* nameP,const char* selectNameP); // void initWithFrameName(const char* nameP); // //设置plist的大小比例 void setPlistScale(float valueP); // void setPosition(int xP,int yP); // CCNodeRGBA* getOwnNode(); // void setScaleW(float valueP); void setScaleH(float valueP); // bool isTouchInPress(float xP,float yP); // void toTouchBegin(); void toTouchEnd(); void toTouchEndAnimation(); // float getButtonWidth(); float getButtonHeight(); // bool getIsSelect(); // CCPoint getPosition(); // CCSprite* getNormalSprite(); CCSprite* getSelectSprite(); //private: // float plistS CCSprite* normalS CCSprite* selectS CCNodeRGBA* ownN // float buttonW float buttonH // float collisionMinX; float collisionMaxX; float collisionMinY; float collisionMaxY; // float originScaleX; float originScaleY; //    float buttonScaleW;    float buttonScaleH; // bool isS //};#endif#include &JarodPressButton.h&JarodPressButton::JarodPressButton(void){ plistScale = 1.0f; buttonScaleW = 1.0f;    buttonScaleH = 1.0f;}JarodPressButton::~JarodPressButton(void){}void JarodPressButton:: setScaleW(float valueP){ buttonScaleW = valueP;;}void JarodPressButton:: setScaleH(float valueP){ buttonScaleH = valueP;}float JarodPressButton:: getButtonWidth(){ return buttonW}float JarodPressButton:: getButtonHeight(){ return buttonH}void JarodPressButton:: initWithFrameName(const char* nameP,const char* selectNameP){ // CCSpriteFrame* frameTemp = CCSpriteFrameCache::sharedSpriteFrameCache()-&spriteFrameByName(nameP); // normalSprite = CCSprite::createWithSpriteFrame(frameTemp); // buttonWidth = (frameTemp-&getRect().size.width / plistScale)*buttonScaleW; buttonHeight = (frameTemp-&getRect().size.height / plistScale)*buttonScaleH; // originScaleX = buttonScaleW/plistS originScaleY = buttonScaleH/plistS // isSelect = // selectSprite = CCSprite::createWithSpriteFrameName(selectNameP);
// ownNode = CCNodeRGBA::create(); normalSprite-&setVisible(true); selectSprite-&setVisible(false); ownNode-&addChild(normalSprite); ownNode-&addChild(selectSprite); ownNode-&setScaleX(originScaleX); ownNode-&setScaleY(originScaleY); //}void JarodPressButton:: initWithFrameName(const char* nameP){ // CCSpriteFrame* frameTemp = CCSpriteFrameCache::sharedSpriteFrameCache()-&spriteFrameByName(nameP); // normalSprite = CCSprite::createWithSpriteFrame(frameTemp); // buttonWidth = (frameTemp-&getRect().size.width / plistScale)*buttonScaleW; buttonHeight = (frameTemp-&getRect().size.height / plistScale)*buttonScaleH; // originScaleX = buttonScaleW/plistS originScaleY = buttonScaleH/plistS // isSelect = // selectSprite = CCSprite::createWithSpriteFrameName(nameP); selectSprite-&setScale(0.8f); // ownNode = CCNodeRGBA::create(); normalSprite-&setVisible(true); selectSprite-&setVisible(false); ownNode-&addChild(normalSprite); ownNode-&addChild(selectSprite); ownNode-&setScaleX(originScaleX); ownNode-&setScaleY(originScaleY); //}void JarodPressButton:: setPlistScale(float valueP){ plistScale = valueP;}CCNodeRGBA* JarodPressButton:: getOwnNode(){ return ownN}CCSprite* JarodPressButton:: getNormalSprite(){ return normalS}CCSprite* JarodPressButton:: getSelectSprite(){ return selectS}void JarodPressButton:: setPosition(int xP,int yP){ // ownNode-&setPosition(ccp(xP,yP)); collisionMinX = xP - buttonWidth/2; collisionMaxX = xP + buttonWidth/2; collisionMinY = yP - buttonHeight/2; collisionMaxY = yP + buttonHeight/2; //}CCPoint JarodPressButton:: getPosition(){ return ownNode-&getPosition();}bool JarodPressButton:: isTouchInPress(float xP,float yP){ if(xP & collisionMinX) { } if(yP & collisionMinY) { } if(xP & collisionMaxX) { } if(yP & collisionMaxY) { }}void JarodPressButton:: toTouchBegin(){ // normalSprite-&setVisible(false); selectSprite-&setVisible(true); // isSelect = //}void JarodPressButton:: toTouchEnd(){ // normalSprite-&setVisible(true); selectSprite-&setVisible(false); // isSelect = // }void JarodPressButton:: toTouchEndAnimation(){
// normalSprite-&setVisible(true); selectSprite-&setVisible(false); // isSelect = // normalSprite-&setScale(selectSprite-&getScale()); // CCScaleTo* scaleTo1 = CCScaleTo::create(0.15f,1.1f,1.1f); CCScaleTo* scaleTo2 = CCScaleTo::create(0.07f,0.9f,0.9f); CCScaleTo* scaleTo3 = CCScaleTo::create(0.07f,1.0f,1.0f); // CCArray* array = CCArray::create(); array-&addObject(scaleTo1); array-&addObject(scaleTo2); array-&addObject(scaleTo3); // normalSprite-&runAction(CCSequence::create(array)); //}bool JarodPressButton:: getIsSelect(){ return isS}使用的时候,还算比较方便例://----------------------------------------------------------&&&&backButton = new JarodPressButton();&&&&backButton-&setScaleW(0.5f);&&&&backButton-&setScaleH(0.5f);&&&&backButton-&initWithFrameName(&back.png&);&&&&backButton-&setPosition(50,1230);&&&&addChild(backButton-&getOwnNode());&&&&//----------------------------------------------------------&&&&&&&&if(backButton-&isTouchInPress(touchPoint.x,touchPoint.y))&&&&{&&&&&&&&backButton-&toTouchEndAnimation();&&&&&&&&ownMessageReceiver-&receiveMessageFrom(ownMessageSenderId,MESSAGE_BACK);&&&&&&&&&&&&&&&&&&&&}接下来,我写了四个单独的界面,让这四个单独的界面同一时间只能显示其中的一个,
橡皮负责清除,小手负责移动地图。点击球时,将这个元素添加在地图中。
至此,关卡编辑器的基本思路就完成了。
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版路漫漫其修远兮 吾将上下而求索
cocos2dx关卡选择界面设计
重点内容 做游戏时候经常用到关卡选择,写了个关卡选择界面逻辑类,关卡解锁,关卡类型显示,打过的关卡星级评定,一共六大关,每个大关10个小关,ui使用cocostudio编辑,代码如下:
LevelSel.h文件
#ifndef _LEVELSEL_H
define _LEVELSEL_H
include “cocos2d.h”
include “cocos-ext.h”
include “global.h”
using namespace cocos2d;
using namespace cocos2d::
class LevelSel : public CCLayer
CREATE_FUNC(LevelSel);
bool init();
void selevent(CCObject *pSender, TouchEventType type);
void pageViewEvent(CCObject *pSender, PageViewEventType type);
void update(float delta);
void onEnter();
UIPageView* pageV
void refreshsel(int offset);
void aaaaa();
//////////////////////////////////////////////////////////////////////////
int stars[60];
int presel,
LevelSel.cpp文件
include “LevelSel.h”
include “Modules/Archive.h”
include “Scene/MapPrepareScene.h”
include “PropLayer.h”
void LevelSel::refreshsel(int curoffset)
UIButton* Upgrade_
char str[128];
for(int i=1000;i&=10000;i+=1000)
Upgrade_bt = (UIButton *)(layout_sel-&getChildByTag(i));
Upgrade_bt-&addTouchEventListener(this, toucheventselector(LevelSel::selevent));
int idx=i/1000-1;
UIImageView* modeuw=(UIImageView*)layout_sel-&getChildByTag(i+2);
if(stars[idx+curoffset]&1)
//显示数字
Upgrade_bt-&loadTextures(“LevelSel_8.png”,”LevelSel_16.png”,”“,UI_TEX_TYPE_PLIST);
Upgrade_bt = (UIButton *)(layout_sel-&getChildByTag(i+9));
sprintf(str,”num_%d.png”,idx+1);
Upgrade_bt-&loadTextures(str,str,”“,UI_TEX_TYPE_PLIST);
for(int j=0;j&6;++j)
layout_sel-&getChildByTag(i+3+j)-&setVisible(true);
for(int j=8;j&5+stars[idx+curoffset]-1;–j)
layout_sel-&getChildByTag(i+j)-&setVisible(false);
else if(stars[idx+curoffset]==1)
//显示当前
Upgrade_bt-&loadTextures(“LevelSel_14.png”,”LevelSel_15.png”,”“,UI_TEX_TYPE_PLIST);
for(int j=0;j&3;++j)
layout_sel-&getChildByTag(i+3+j)-&setVisible(true);
for(int j=3;j&6;++j)
layout_sel-&getChildByTag(i+3+j)-&setVisible(false);
Upgrade_bt-&loadTextures(“LevelSel_19.png”,”LevelSel_20.png”,”“,UI_TEX_TYPE_PLIST);
for(int j=0;j&6;++j)
layout_sel-&getChildByTag(i+3+j)-&setVisible(false);
modeuw-&setVisible(false);
if(stars[idx+curoffset]&=1)
//特殊模式
int levelId=curoffset+
int mode=(CDataSystem::GetLevelParanew(levelId,CGameDB::GetInstance()-&GetTable(TABLE_ID_LEVEL_DATA)))-&m_completeT
modeuw-&setVisible(true);
if(stars[idx+curoffset]==1)
sprintf(str,”LevelSel_1/level_mode_0_1.png”);
modeuw-&loadTexture(str);
else if(mode==GAME_MODE_NEARWEAPON)//近战模式
sprintf(str,”LevelSel_1/level_mode_2_1.png”);
modeuw-&loadTexture(str);
else if(mode==GAME_MODE_REMOTEWEAPON)//远程模式
sprintf(str,”LevelSel_1/level_mode_5_1.png”);
modeuw-&loadTexture(str);
else if(mode==GAME_MODE_SCATTER)//防御模式
sprintf(str,”LevelSel_1/level_mode_3_1.png”);
modeuw-&loadTexture(str);
else if(mode==GAME_MODE_BALL)//铁球模式
sprintf(str,”LevelSel_1/level_mode_4_1.png”);
modeuw-&loadTexture(str);
else if(mode==GAME_MODE_BOSS)//BOSS模式
sprintf(str,”LevelSel_1/level_mode_1_1.png”);
modeuw-&loadTexture(str);
modeuw-&setVisible(false);
sprintf(str,”LevelSel_1/level_bk_%d.png”,curoffset/10+1);
((UIImageView*)layout_sel-&getChildByTag(i+1))-&loadTexture(str);
bool LevelSel::init()
//////////////////////////////////////////////////////////////////////////
for(int i=0;i&60;i++)
stars[i]=CArchive::GetInstance()-&GetStageUnlock(i);
if(stars[i]==1)
curlevel=i;
if(!CGameDB::GetInstance()-&GetTable(TABLE_ID_LEVEL_DATA))
CGameDB::GetInstance()-&LoadTable(TABLE_ID_LEVEL_DATA, TABLE_TYPE_CSV);
//////////////////////////////////////////////////////////////////////////
UILayer* baseUILayer=cocos2d::extension::UILayer::create();
Layout *widget = dynamic_cast
没有更多推荐了,希望为编程资料缺失的部分贡献自己的微薄之力……
【Cocos2dx】利用导演类、场景类完成重新开始游戏、暂停游戏、关闭游戏功能
重新开始游戏、暂停游戏、关闭游戏是绝对是游戏的基础,虽然代码不多,不过这要利用到Cocos2dx导演类、场景类完成,事先如果不对其进行了解,绝对是很难做出来。
下面用一个小例子说明如何利用导演类、场景类完成重新开始游戏、暂停游戏、关闭游戏功能,
这个被改写的HelloWorld场景,一开始就声明一个在屏幕中央开始5s内上升100px的按钮精灵,
可以看到,点击左上角的Refresh!按钮,这个场景的所有动作会重新开始,也就是,将HelloWorld场景销毁,重新执行HelloWorld场景的init()函数,相当于“重新开始游戏”。
点击右上角的Pause!按钮会保存当前HelloWorld场景的所有操作,来到一个新的Pause场景,点击其中的Back!按钮,会重新返回HelloWorld场景,按钮精灵会继续执行在屏幕中央开始5s内上升100px的动作,而不是重新开始,相当于"暂停游戏"。
"关闭游戏"在官方的Helloworld已经有,不过涉及这里的相关的知识,也在这里说说。
工程的文件结构如下:
“暂停游戏”必须新建一个带“返回”按钮场景,不新建这个暂停场景,是做不出来,虽然新建场景是一件复杂的事情,但你不这样做,是搞不出来的。
关于场景的概念在《【Cocos2dx】新建场景、场景的切换、设置启动场景与菜单的新建》()已经讲过了,但这里着重对场景的scene函数的重写,这个scene函数相当于场景新建时候执行的构造函数。
先看改写了的HelloWorldScene:
HelloWorldScene.h,一些声明,没什么好说,只是删除一些官方无用的预编译声明、注释:
#include "cocos2d.h"
#include "cocos-ext.h" //使用按钮事件,必须要需要的头文件
USING_NS_CC_EXT;//使用按钮事件,必须要需要的命名空间
class HelloWorld:public cocos2d::CCLayer
virtual bool init();//场景初始化的函数
//场景声明函数
static cocos2d::CCScene* scene();
CREATE_FUNC(HelloWorld);
void pause(CCObject* pSender,CCControlEvent event);//暂停
void restart(CCObject* pSender,CCControlEvent event);//重新开始
void close(CCObject* pSender,CCControlEvent event);//关闭
HelloWorldScene.cpp,看起来代码很长很长,然而在init()声明N个按钮起始是一大堆重复的,详情可以看《【Cocos2dx】使用CCControlButton创建按钮、按钮点击事件,点击事件中的组件获取,setPosition的坐标问题 》(),关键是各个函数的回调函数,核心是你要通过CCDirector::sharedDirector()召唤出导演,才能操作场景:
#include "HelloWorldScene.h"
#include "PauseScene.h"
USING_NS_CC;
CCScene* HelloWorld::scene()
CCScene *scene = CCScene::create();//创建HelloWorld场景
HelloWorld *layer = HelloWorld::create();//创建HelloWorld层
scene-&addChild(layer);//将HelloWorld层放在HelloWorld场景,所有元素只能放在层上,而不能放在场景上,场景仅能放层,相当于JavaSwing中在frame中添加panel才能继续搞
bool HelloWorld::init()
//获取屏幕的尺寸、位置信息等
CCSize visibleSize = CCDirector::sharedDirector()-&getVisibleSize();
//声明按钮部分
/*右上角按钮*/
CCScale9Sprite *btn_noraml1 = CCScale9Sprite::create("CloseNormal.png");//声明CloseNormal图片,用于按钮没被按下时的背景图片
CCLabelTTF *label1 = CCLabelTTF::create("Pause!","arial",36);//声明一个文字Pause!第2个参数是字体,仅能使用Resource文件夹中fonts文件夹中的字体,第3个参数是字体大小
CCControlButton *controlButton1 = CCControlButton::create(label1,btn_noraml1);
controlButton1-&setAnchorPoint(ccp(1,1));
controlButton1-&setPosition(ccp(visibleSize.width,visibleSize.height));
controlButton1-&addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::pause), CCControlEventTouchDown);//声明按钮的事件,第三个参数为定值常量意为,点击此按钮之后,触发第二个函数所声明的,下面给出的HelloWorld::pause(){}中所有代码。
this-&addChild(controlButton1);//将此按钮添加到场景,默认不自动添加
/*左上角按钮*/
CCScale9Sprite *btn_noraml2 = CCScale9Sprite::create("CloseNormal.png");//声明CloseNormal图片,用于按钮没被按下时的背景图片
CCLabelTTF *label2 = CCLabelTTF::create("Refresh!","arial",36);//声明一个文字Refresh!第2个参数是字体,仅能使用Resource文件夹中fonts文件夹中的字体,第3个参数是字体大小
CCControlButton *controlButton2 = CCControlButton::create(label2,btn_noraml2);
controlButton2-&setAnchorPoint(ccp(0,1));
controlButton2-&setPosition(ccp(0,visibleSize.height));
controlButton2-&addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::restart), CCControlEventTouchDown);//声明按钮的事件,第三个参数为定值常量意为,点击此按钮之后,触发第二个函数所声明的,下面给出的HelloWorld::restart(){}中所有代码。
this-&addChild(controlButton2);//将此按钮添加到场景,默认不自动添加
/*右下角按钮*/
CCScale9Sprite *btn_noraml3 = CCScale9Sprite::create("CloseNormal.png");//声明CloseNormal图片,用于按钮没被按下时的背景图片
CCLabelTTF *label3 = CCLabelTTF::create("Close!","arial",36);//声明一个文字Close!第2个参数是字体,仅能使用Resource文件夹中fonts文件夹中的字体,第3个参数是字体大小
CCControlButton *controlButton3 = CCControlButton::create(label3,btn_noraml3);
controlButton3-&setAnchorPoint(ccp(1,0));
controlButton3-&setPosition(ccp(visibleSize.width,0));
controlButton3-&addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::close), CCControlEventTouchDown);//声明按钮的事件,第三个参数为定值常量意为,点击此按钮之后,触发第二个函数所声明的,下面给出的HelloWorld::close(){}中所有代码。
this-&addChild(controlButton3);//将此按钮添加到场景,默认不自动添加
/*声明一个做动作的按钮精灵,以显示出效果*/
CCSprite *sprite=CCSprite::create("CloseSelected.png");
sprite-&setPosition(ccp(visibleSize.width/2,visibleSize.height/2));
this-&addChild(sprite);
CCFiniteTimeAction* action2=CCMoveBy::create(5.0f,ccp(0,100));//在5秒内提升100px
sprite-&runAction(action2);
void HelloWorld::pause(CCObject* pSender,CCControlEvent event)
//将游戏界面暂停,压入场景堆栈。并切换到GamePause界面
CCDirector::sharedDirector()-&pushScene(PauseScene::scene());
void HelloWorld::restart(CCObject* pSender,CCControlEvent event)
//将游戏界面重新开始,replaceScene意思是用一个新场景替换旧场景,旧场景被替换之后,马上被销毁
CCDirector::sharedDirector()-&replaceScene(HelloWorld::scene());
void HelloWorld::close(CCObject* pSender,CCControlEvent event)
//结束当前游戏
CCDirector::sharedDirector()-&end();
之后是暂停场景类PauseScene,
PauseScene.h同样是一些声明:
#include "cocos2d.h"
#include "cocos-ext.h" //使用按钮事件,必须要需要的头文件
USING_NS_CC_EXT;//使用按钮事件,必须要需要的命名空间
using namespace cocos2d;
class PauseScene:public CCLayer{
static CCScene* scene();
virtual bool init();
CREATE_FUNC(PauseScene);
void back(CCObject* pSender,CCControlEvent event);//返回场景
PauseScene.cpp则同样是放一个按钮,按钮的回调函数,同样是召唤出Cocos2dx的导演。
暂停功能是这样的:Cocos2dx自身就自带一个场景栈,在初始化的时候,在main.cpp指定的开始场景就会自动进入场景栈,具体见《【Cocos2dx】Windows平台下Cocos2dx 2.x的下载、安装、配置,打造自己的Helloworld》(),暂停的话,CCDirector::sharedDirector()召唤出来的导演,有令让某一场景进入场景栈的方法pushScene,Cocos2dx只会演出当前在场景栈最上方的场景,下方的所有场景的行为、元素位置,通通会被存档、暂停,待其回到场景栈最顶部才会继续运行。
导演同样有让当前在场景栈最上方的场景出栈的方法。场景被出栈是马上被销毁,再也找不到了。
如果场景栈为空,则会自动关闭游戏,不过建议还是用导演的end()与exit(0)方法来结束游戏,这也是Cocos2dx官方的Helloworld使用的方法。
#include "PauseScene.h"
USING_NS_CC;
CCScene* PauseScene::scene()
CCScene *scene=CCScene::create();
PauseScene* pauseScene=PauseScene::create();
scene-&addChild(pauseScene);
bool PauseScene::init()
//获取屏幕的尺寸、位置信息等
CCSize visibleSize = CCDirector::sharedDirector()-&getVisibleSize();
//声明按钮部分
cocos2d::extension::CCScale9Sprite *btn_noraml = cocos2d::extension::CCScale9Sprite::create("CloseNormal.png");//声明CloseNormal图片,用于按钮没被按下时的背景图片
CCLabelTTF *label1 = CCLabelTTF::create("back!","arial",36);//声明一个文字Click me!第2个参数是字体,仅能使用Resource文件夹中fonts文件夹中的字体,第3个参数是字体大小
CCControlButton *controlButton = CCControlButton::create(label1,btn_noraml);
controlButton-&setPosition(ccp(visibleSize.width/2,visibleSize.height/2));//按钮的中心点位于屏幕的中央
controlButton-&addTargetWithActionForControlEvents(this, cccontrol_selector(PauseScene::back), CCControlEventTouchDown);//声明按钮的事件,第三个参数为定值常量意为,点击此按钮之后,触发第二个函数所声明的,下面给出的PauseScene::back(){}中所有代码。
this-&addChild(controlButton);//将此按钮添加到场景,默认不自动添加
void PauseScene::back(CCObject* pSender,CCControlEvent event)
//本场景出栈
CCDirector::sharedDirector()-&popScene();
没有更多推荐了,cocos2dx如何加载超大型地图
[问题点数:40分]
本版专家分:0
结帖率 53.33%
CSDN今日推荐
本版专家分:0
2014年12月 专题开发/技术/项目大版内专家分月排行榜第一2014年11月 专题开发/技术/项目大版内专家分月排行榜第一2014年10月 专题开发/技术/项目大版内专家分月排行榜第一2014年9月 专题开发/技术/项目大版内专家分月排行榜第一2014年7月 专题开发/技术/项目大版内专家分月排行榜第一
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
匿名用户不能发表回复!|
其他相关推荐}

我要回帖

更多关于 cocos2dx用什么语言 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信