怎样用cocos2dx 实现rpg对话来实现游戏的重新开始

今天看啥 热点:
疯狂跑酷(CrazyRun)游戏项目解析,cocos2dxcrazyrun
原创作品,允许转载,转载时请务必以超链接形式标明文章&原始出处&、作者信息和本声明。否则将追究法律责任http://blog.csdn.net/a/article/details/&
游戏下载地址:/android-475978.html
&直入正题,开始剖析涉及到的开发技术
&作为一个游戏,是由UI和场景构成;开始界面、关卡选择、提示框等等统属于UI,游戏过程中的核心游戏代码在场景中实现:
一、游戏开始界面由背景、菜单、游戏logo、动态飘动的云层、粒子、背景音乐元素构成
1、背景、logo都是Cocos2dx中的图片精灵:
相关代码:
/* 游戏标题图片 */
&&CCSprite* titleSprite2 = CCSprite::create(&pickure/mainUI/886.png&);
&&&&& titleSprite2-&setPosition(ccp(visibleSize.width / 2, visibleSize.height /2));
&&&&&&&&&&& this-&addChild(titleSprite2, 3);
visibleSize.width / 2 是一个相对屏幕坐标。,我们也可以填写绝对坐标,比如titleSprite2-&setPosition(ccp(200, 400));
2、菜单是用CCMenuItemImage实现,我采用单个的创作模式,因为这样使菜单的位置摆放比较灵活
相关代码:
&&CCMenuItemImage *tile = CCMenuItemImage::create(
&&&&&&&&&&&&&& &pickure/mainUI/image 185_1.png&,
&&&&&&&&&&&&&& &pickure/mainUI/image 187_1.png&,
&&&&&&&&&&&&&& this,
&&&&&&&&&&&menu_selector(mainUI::enter));
&&&&&&&&&& CC_BREAK_IF(! tile);
&&&&&&&&&& tile-&setPosition(ccp(650,200));
&&&&&&&&&& CCMenu* ptile = CCMenu::create(tile, NULL);
&&&&&&&&&& ptile-&setPosition(CCPointZero);
&&&&&&&&&& CC_BREAK_IF(! ptile);
&&&&&&&&&& this-&addChild(ptile, 3);
& 菜单和按钮有很多相似之处,按钮功能却又可以通过精灵动作来实现,但使用最多的还是菜单,比较方便
3、Cocos2dx在windows上有专门的粒子制作工具,C#编写,我使用的时候对其代码和界面简单的优化了一下
相关代码:
& &//小树叶特效
&& CCParticleSystem * lizi = new CCParticleSystemQuad();
&& //设置plist动画文件
&& lizi-&initWithFile(&treedown.plist&);
& &//设置粒子显示位置
&& lizi-&setPosition(ccp(400,500));
&& // 把粒子对象添加到场景中
&& this-&addChild(lizi,10);
4、背景音乐这个就不用多少了,播放本地的一个音乐文件
&&&& 相关代码:
/* 游戏背景音乐 */
&&CocosDenshion::SimpleAudioEngine::sharedEngine()-&playBackgroundMusic(&music/bgMusic.wav&,-1);
当然我们也可以定义一个ID分配给它,用于控制停止播放,这种播放方式运用在音效的使用上,因为在游戏中可能有多种音效同时播放,我们或有需要停止某个正在播放的音效
5、飘动的云层,采用精灵动作和回调事件来实现,设置好目标点,执行动作回调
&&&& 相关代码:
//设置精灵动作
&&& CCMoveTo* ToRight = CCMoveTo::create(8.0f, ccp(2800,thing1-&getPositionY()));
&& &CCSequence*s = CCSequence::create(ToRight,
&&&&CCCallFuncN::create(this,
&&&&callfuncN_selector(MapThings::GetRight)),
&&&&NULL);
&& &thing1-&runAction(s);
//回调函数
&& void MapThings::GetRight(CCObject* pSender)
&& thing1-&setFlipX(true);
&& CCMoveTo* ToLeft = CCMoveTo::create(8.0f, ccp(200,thing1-&getPositionY()));
&& CCSequence*s = CCSequence::create(ToLeft,
&&&CCCallFuncN::create(this,
&&&callfuncN_selector(MapThings::GetLeft)),
& &thing1-&runAction(s);
void MapThings::GetLeft(CCObject* pSender)
&& thing1-&setFlipX(false);
&& CCMoveTo* ToRight = CCMoveTo::create(8.0f, ccp(2800,thing1-&getPositionY()));
&& CCSequence*s = CCSequence::create(ToRight,
&&&CCCallFuncN::create(this,
&&&callfuncN_selector(MapThings::GetRight)),
&& thing1-&runAction(s);
二、游戏关卡选择界面涉及到的相关技术与架构
&&&&& 组成元素:游戏得分、金币数量、关卡图标、(任务/仓库、充值等菜单)、动作精灵、返回菜单构成
1、金币和游戏得分采用CCLabelAtlas实现
相关代码:
&&&&&&&&&&&&&&&&&&&&&&&CCLabelAtlas*SumscoreLabs = CCLabelAtlas::create(CCString::createWithFormat(&%d&, Sumscore)-&getCString(), &pickure/ChoiceUI/labelatlasimg.png&, 24, 32,
&&&&&&& &&&&&&& && &&&'0');
&&&&&&& &&&&&&& &&&&& &SumscoreLabs-&setAnchorPoint(ccp(0,0.5));
&&&&&&& &&&&&&& &&&&& &SumscoreLabs-&setPosition(ccp(260,400));
&&&&&&& &&&&&&& &&&&& &SumscoreLabs-&setScale(0.7f);
&&&&&&&&&&&&&&&&&&&&&& this-&addChild(SumscoreLabs,3);
&&&&&&&&&&&&&&&&&&&&&& SumscoreLabs-&setString(&360&);
2、各个页面是如何跳转?在菜单回调函数中切换场景
相关代码:
//进入商城界面
void ChoiceUI::shop(CCObject* pSender)
& CCDirector::sharedDirector()-&replaceScene(CCTransitionFlipAngular::create(1.0f,shop::scene()));
3、这里是如何记录玩家是否已经有权限进入关卡呢?这里设置顺利完成前一关,即可进入下一关
相关代码:
//给没有权限的关卡添加 锁定图标
&&&&&&&&&&&&& if(Maxlock!=4)
&&& lock4 =CCSprite::create(&pickure/ChoiceUI/suo.png&);
&&&&&&&&&&&&&&&&&&&& &lock4-&setPosition(ccp(visibleSize.width / 7+(visibleSize.width / 6.5+visibleSize.width / 12)*3, visibleSize.height /2));
&&&&&&&&&&&&&&&&&&&& &this-&addChild(lock4,3);
&&&&&&&&&& if(Maxlock!=3)
&&&&&&&& {
&&& lock3 =CCSprite::create(&pickure/ChoiceUI/suo.png&);
&&&&&&&&&&&&&&&&&&&& lock3-&setPosition(ccp(visibleSize.width / 7+(visibleSize.width / 6.5+visibleSize.width / 12)*2, visibleSize.height /2));
&&&&&&&&&&&&&&&&&&&& &this-&addChild(lock3,3);
&&&&&&&&&&&&&&& if(Maxlock!=2)
&&&&&&&&&&&& {
&&&&&&& lock2 =CCSprite::create(&pickure/ChoiceUI/suo.png&);
&&&&&&&&&&&&&&&&&&&& &lock2-&setPosition(ccp(visibleSize.width / 7+visibleSize.width / 6.5+visibleSize.width / 12, visibleSize.height /2));
&&&&&&&&&&&&&&&&&&&& &this-&addChild(lock2,3);
&&&&&&&&&&&&&&&&&&& if(Maxlock!=1)
&&&&&&&&&&&&&&&&& {
&&&&&&&&& lock1 =CCSprite::create(&pickure/ChoiceUI/suo.png&);
&&&&&&&&&&&&&&&&&&&& &lock1-&setPosition(ccp(400,200));
&&&&&&&&&&&&&&&&&&&& &this-&addChild(lock1,1);
&&&&&&&&&&&&&&&&&&&& &}
&&&&&&&&& &&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
//玩家点击关卡图标,判断是否有权限进入游戏场景
相关代码:
void ChoiceUI::Unlock2(CCObject* pSender)
& &CocosDenshion::SimpleAudioEngine::sharedEngine()-&playEffect(
& &&music/button.mp3&);
& if(golds&36)
&&& CCBlink*blink = CCBlink::create(1, 2);
&&& CCSequence*s = CCSequence::create( blink,
& &&CCCallFuncN::create(this,
&&&&callfuncN_selector(ChoiceUI::yincang)),
&& &NULL);
&& &tishi2-&setVisible(true);
&& &tishi2-&runAction(s);
&if(Maxlock&2)
&&& CCRotateBy* move = CCRotateBy::create(2,360);
&&& lock2-&runAction(move);
&&&//showAd();
&& CCScaleBy* out = CCScaleBy::create(0.5f,2);
&& CCCallFunc* callFunc = CCCallFunc::create(this, callfunc_selector(ChoiceUI::in));
&& CCSequence* actions = CCSequence::create(out, callFunc, NULL);
& &ts-&runAction(actions);
&&if(Maxlock&1)
&& locknamber=2;
&&CCLOG(&tiled x=%d&, Maxlock);
&&if(score2!=0)
&& &SUMscore(375 ,295,score2);
&& &Messbox ();
&&&CCUserDefault::sharedUserDefault()-&setIntegerForKey(&golds&, golds-20);
&&&CCUserDefault::sharedUserDefault()-&flush();
&&&golds=CCUserDefault::sharedUserDefault()-&getIntegerForKey(&golds&);
&&&SumgoldLabs-&setString(CCString::createWithFormat(&%d&, golds)-&getCString());
&&& CCDirector::sharedDirector()-&replaceScene(CCTransitionPageTurn::create(1.0f,Scenea::scene(),false));
三、游戏场景中涉及到的相关技术与架构
&&&&& 组成元素:游戏得分计算过程、玩家角色动画的播放,运动的控制,怪物的AI,碰撞宝石的检测,游戏地图的制作与加载,道具的使用,以及对角色的影响等
地图滚动实现代码:
void Scenea::update( float delta )
&int bgposX1 = m_bgSprite1-&getPositionX();&// 背景地图1的x坐标
&int bgposX2 = m_bgSprite2-&getPositionX();&// 背景地图2的x坐标
&int bgiSpeed = 7;&// 地图滚动速度
&/* 两张地图向左滚动(两张地图是相邻的,所以要一起滚动,否则会出现空隙) */
&bgposX1 -= bgiS
&bgposX2 -= bgiS
&/* 地图大小 */
&CCSize mapSize = m_bgSprite1-&getContentSize();
&/* 当第1个地图完全离开屏幕时,让第2个地图完全出现在屏幕上,同时让第1个地图紧贴在第2个地图后面 */
&if(bgposX1 & -mapSize.width / 2) {
&&bgposX2 = mapSize.width / 2;
&&bgposX1 = mapSize.width + mapSize.width / 2;
&/* 同理,当第2个地图完全离开屏幕时,让第1个地图完全出现在屏幕上,同时让第2个地图紧贴在第1个地图后面 */
&if(bgposX2 & -mapSize.width / 2) {
&&bgposX1 = mapSize.width / 2;
&&bgposX2 = mapSize.width + mapSize.width / 2;
&m_bgSprite1-&setPositionX(bgposX1);
&m_bgSprite2-&setPositionX(bgposX2);
与宝石碰撞检测涉及到的技术
相关代码:
void Scenea::Monstersnock()
for (int i = 0; i & m_monsterArr-&count(); i++)
&CCSprite *target = (CCSprite *)m_monsterArr-&objectAtIndex(i);
&& CCRect playerRect = CCRectMake(
&&&& player-&getPosition().x - ( player-&getContentSize().width/2),
&&&& player-&getPosition().y - ( player-&getContentSize().height/2),
&&&& player-&getContentSize().width,
&&&& player-&getContentSize().height);
&& CCRect gunchildRect = CCRectMake(
&&&& gunchild-&getPosition().x - ( gunchild-&getContentSize().width/2),
&&&& gunchild-&getPosition().y - ( gunchild-&getContentSize().height/2),
&&&& gunchild-&getContentSize().width,
&&&& gunchild-&getContentSize().height);
&&& CCRect coard1Rect = CCRectMake(
&&&&& target-&getPosition().x - ( target-&getContentSize().width/2),
&&&&& target-&getPosition().y - (target-&getContentSize().height/2),
&&&&& target-&getContentSize().width,
&&&&& target-&getContentSize().height);
&&& //子弹击中宝石
&&& if (gunchildRect.intersectsRect(coard1Rect))
&&&& CocosDenshion::SimpleAudioEngine::sharedEngine()-&playEffect(
&&&&&music/eat.mp3&);
&&&CCMoveTo* robot1moveToright = CCMoveTo::create(2.0f, ccp(100,450));
&&&target-&runAction(robot1moveToright);
&&& //主角碰撞宝石
&&& if (playerRect.intersectsRect(coard1Rect))
&&&CocosDenshion::SimpleAudioEngine::sharedEngine()-&playEffect(
&&&&&&music/eat.mp3&);
&& m_monsterArr-&removeObject(target);
&&&& map-&removeChild(target);
其他。。。后续更新。。。
相关搜索:
相关阅读:
相关频道:
Android教程最近更新cocos2dx注册场景 使用CCEditBox实现输入框
cocos2dx注册场景 使用CCEditBox实现输入框
我们在开始玩一个游戏时,通常要做的第一件事就是注册账号,下面就让我们来制作一个简单的注册场景,我所使用的cocos2dx版本为2.2.2
在这个场景中最主要的元素就是输入框和按钮,我从网上找了一些素材(也有自己P的),样子不太好看,但是最终的效果都是一样的。
在这个场景中,元素的摆放和按钮的功能都比较简单,唯一有些困难的就是输入框。在cocos2dx2.2.2中输入框可以使用CCTextFieldTTF和CCEditBox来实现,我们这里使用的是CCEditBox。
下面我们先来看看这个注册场景操作层的头文件
1 #ifndef __MyGame__RegisterHandleLayer__
2 #define __MyGame__RegisterHandleLayer__
4 #include &iostream&
5 #include "cocos2d.h"
6 #include "cocos-ext.h"
7 using namespace cocos2d;
8 USING_NS_CC_EXT;
10 class RegisterHandleLayer:public CCLayer,public CCEditBoxDelegate{
11 private:
CCEditBox * editBoxU//用户名
CCEditBox * editBoxP//密码
CCEditBox * editBoxReP//重复密码
void addEditBox(CCEditBox * editBox,CCPoint editPoint, char * defaultValue,bool isPassword);//添加输入框
bool checkInput();//输入验证
void toGameScene();//跳转到游戏场景
void toLoginScene();//跳转到登录场景
20 public:
virtual bool init();
CREATE_FUNC(RegisterHandleLayer);
virtual void editBoxEditingDidBegin(extension::CCEditBox* editBox);
virtual void editBoxEditingDidEnd(extension::CCEditBox* editBox);
virtual void editBoxTextChanged(extension::CCEditBox* editBox, const std::string& text);
virtual void editBoxReturn(extension::CCEditBox* editBox);
28 #endif /* defined(__MyGame__RegisterHandleLayer__) */
使用CCEditBox需要引入扩展库extension,我们引入头文件 "cocos-ext.h",再引入命名空间,可以使用“using namespace extension”或宏定义“USING_NS_CC_EXT”,同时,还需要继承CCEditBoxDelegate。在该类中,我们定义了3个输入框,用户名、密码和重复密码,及设置输入框的方法。最后的4个虚函数是CCEditBoxDelegate中定义的,我们对输入框的不同操作会触发相应的方法,我们这里不会用到,但是可以通过日志查看各方法的触发时机,各方法的触发时机如下:
1 //键盘弹出后输入框获得焦点时触发
2 void RegisterHandleLayer::editBoxEditingDidBegin(extension::CCEditBox *editBox)
CCLog("begin");
7 //键盘隐藏后输入框失去焦点时触发
8 void RegisterHandleLayer::editBoxEditingDidEnd(extension::CCEditBox *editBox)
CCLog("end");
13 //输入框内文本变化时触发
14 void RegisterHandleLayer::editBoxTextChanged(extension::CCEditBox *editBox, const std::string &text)
CCLog("change");
19 //按下返回键或点击键盘外的位置时触发(点击当前输入框时不触发)
20 void RegisterHandleLayer::editBoxReturn(extension::CCEditBox *editBox)
CCLog("return");
下面我们来看看最关键的addEditBox方法,我们可以使用该方法设置输入框的不同属性
* 功能 : 向场景中添加输入框并设置相应属性
editBox : 输入框
editPoint : 位置
* defaultValue : 缺省文本
isPassword : true-密码,false-非密码
9 void RegisterHandleLayer::addEditBox(CCEditBox * editBox,CCPoint editPoint, char * defaultValue,bool isPassword)
editBox-&CCNode::setPosition(editPoint.x,editPoint.y); //位置
editBox-&setFontColor(ccWHITE); //文字颜色
editBox-&setPlaceHolder(defaultValue); //输入框缺省文字
editBox-&setPlaceholderFontColor(ccWHITE); //缺省文字颜色
editBox-&setMaxLength(20); //最大长度
editBox-&setReturnType(kKeyboardReturnTypeDone); //默认使用键盘return类型为Done
editBox-&setInputMode(kEditBoxInputModeEmailAddr); //输入键盘模式
if (isPassword) {
editBox-&setInputFlag(kEditBoxInputFlagPassword); //输入密码时的替代符
editBox-&setDelegate(this); //设置委托代理对象为当前类
this-&addChild(editBox);
相关属性还是比较好理解的,大家可以改变属性查看不同的效果。其中setReturnType、setInputMode、setInputFlag这3个方法的参数可能会有些疑问,但是我们可以在“CCEditBox.h”头文件中查看各参数的含义,也可以改变各参数,分别查看不同的效果。例如,我们这里对密码类型输入框的设置“editBox-&setInputFlag(kEditBoxInputFlagPassword);”会得到如下效果:
各参数的原始定义如下:
1 enum KeyboardReturnType {
kKeyboardReturnTypeDefault = 0,
kKeyboardReturnTypeDone,
kKeyboardReturnTypeSend,
kKeyboardReturnTypeSearch,
kKeyboardReturnTypeGo
* \brief The EditBoxInputMode defines the type of text that the user is allowed
* to enter.
14 enum EditBoxInputMode
* The user is allowed to enter any text, including line breaks.
kEditBoxInputModeAny = 0,
* The user is allowed to enter an e-mail address.
kEditBoxInputModeEmailAddr,
* The user is allowed to enter an integer value.
kEditBoxInputModeNumeric,
* The user is allowed to enter a phone number.
kEditBoxInputModePhoneNumber,
* The user is allowed to enter a URL.
kEditBoxInputModeUrl,
* The user is allowed to enter a real number value.
* This extends kEditBoxInputModeNumeric by allowing a decimal point.
kEditBoxInputModeDecimal,
* The user is allowed to enter any text, except for line breaks.
kEditBoxInputModeSingleLine
* \brief The EditBoxInputFlag defines how the input text is displayed/formatted.
56 enum EditBoxInputFlag
* Indicates that the text entered is confidential data that should be
* obscured whenever possible. This implies EDIT_BOX_INPUT_FLAG_SENSITIVE.
kEditBoxInputFlagPassword = 0,
* Indicates that the text entered is sensitive data that the
* implementation must never store into a dictionary or table for use
* in predictive, auto-completing, or other accelerated input schemes.
* A credit card number is an example of sensitive data.
kEditBoxInputFlagSensitive,
* This flag is a hint to the implementation that during text editing,
* the initial letter of each word should be capitalized.
kEditBoxInputFlagInitialCapsWord,
* This flag is a hint to the implementation that during text editing,
* the initial letter of each sentence should be capitalized.
kEditBoxInputFlagInitialCapsSentence,
* Capitalize all characters automatically.
kEditBoxInputFlagInitialCapsAllCharacters
在我们了解了CCEditBox的相关属性和用法后,就可以完成我们的注册场景了,注册场景操作层的init方法代码如下:
1 bool RegisterHandleLayer::init()
if (!CCLayer::init()) {
return false;
//精灵帧缓存
CCSpriteFrameCache * sfCache = CCSpriteFrameCache::sharedSpriteFrameCache();
sfCache-&addSpriteFramesWithFile("p_register.plist");
//屏幕尺寸
CCSize size = CCDirector::sharedDirector()-&getWinSize();
CCSpriteFrame * f_register_box = sfCache-&spriteFrameByName("register.png");
CCSprite * spriteBox = CCSprite::createWithSpriteFrame(f_register_box);
spriteBox-&setPosition(CCPointMake(size.width/2, size.height/2));
this-&addChild(spriteBox);
//注册框尺寸
CCSize boxSize = spriteBox-&getContentSize();
CCSpriteFrame * f_register_username = sfCache-&spriteFrameByName("username.png");
CCSprite * spriteUsername = CCSprite::createWithSpriteFrame(f_register_username);
CCSize spriteUsernameSize = spriteUsername-&getContentSize();
CCSize editSize = CCSizeMake(spriteUsernameSize.width*3/5, spriteUsernameSize.height);
CCPoint spriteUsernamePoint = CCPointMake(size.width/2, size.height/2+spriteUsernameSize.height*11/6);
spriteUsername-&setPosition(spriteUsernamePoint);
this-&addChild(spriteUsername);
CCSpriteFrame * f_register_password = sfCache-&spriteFrameByName("password.png");
CCSprite * spritePassword = CCSprite::createWithSpriteFrame(f_register_password);
CCPoint spritePasswordPoint = CCPointMake(size.width/2, size.height/2+spriteUsernameSize.height/2);
spritePassword-&setPosition(spritePasswordPoint);
this-&addChild(spritePassword);
//重复密码
CCSpriteFrame * f_register_repassword = sfCache-&spriteFrameByName("password.png");
CCSprite * spriteRePassword = CCSprite::createWithSpriteFrame(f_register_repassword);
CCPoint spriteRePasswordPoint = CCPointMake(size.width/2, size.height/2-spriteUsernameSize.height*5/6);
spriteRePassword-&setPosition(spriteRePasswordPoint);
this-&addChild(spriteRePassword);
//添加输入框
editBoxUsername = CCEditBox::create(editSize, CCScale9Sprite::create());
addEditBox(editBoxUsername, spriteUsernamePoint, "输入账号",false);
editBoxPassword = CCEditBox::create(editSize, CCScale9Sprite::create());
addEditBox(editBoxPassword, spritePasswordPoint, "创建密码",true);
editBoxRePassword = CCEditBox::create(editSize, CCScale9Sprite::create());
addEditBox(editBoxRePassword, spriteRePasswordPoint, "重复密码",true);
//注册按钮
CCSpriteFrame * f_register_btn_register = sfCache-&spriteFrameByName("btn_register_normal.png");
CCSprite * sprite_register_btn_register = CCSprite::createWithSpriteFrame(f_register_btn_register);
CCSpriteFrame * f_register_btn_register_select = sfCache-&spriteFrameByName("btn_register_select.png");
CCSprite * sprite_register_btn_register_select = CCSprite::createWithSpriteFrame(f_register_btn_register_select);
CCMenuItemSprite * itemRegister = CCMenuItemSprite::create(
sprite_register_btn_register,
sprite_register_btn_register_select,
menu_selector(RegisterHandleLayer::toGameScene));
CCSize registerBthSize = itemRegister-&getContentSize();
itemRegister-&setPosition(CCPointMake(size.width/2-boxSize.width/4,
size.height/2 - boxSize.height/2 + registerBthSize.height*2));
//已有账号登录按钮
CCSpriteFrame * f_register_btn_login = sfCache-&spriteFrameByName("btn_register_login_normal.png");
CCSprite * sprite_register_btn_login = CCSprite::createWithSpriteFrame(f_register_btn_login);
CCSpriteFrame * f_register_btn_login_select = sfCache-&spriteFrameByName("btn_register_login_select.png");
CCSprite * sprite_register_btn_login_select = CCSprite::createWithSpriteFrame(f_register_btn_login_select);
CCMenuItemSprite * itemLogin = CCMenuItemSprite::create(
sprite_register_btn_login,
sprite_register_btn_login_select,
menu_selector(RegisterHandleLayer::toLoginScene));
CCSize loginBthSize = itemLogin-&getContentSize();
itemLogin-&setPosition(CCPointMake(size.width/2+boxSize.width/4,
size.height/2 - boxSize.height/2 + loginBthSize.height*2));
//按钮菜单
CCMenu * menu = CCMenu::create(itemRegister,itemLogin,NULL);
menu-&setPosition(CCPointZero);
this-&addChild(menu);
return true;
代码比较简单,我们的注册场景现在基本完成了,参数验证等其他功能我们会在后续文章中再做补充。
如果您想提高自己的技术水平,认识同行朋友、开拓技术视野,请加入QQ群:
Powered by
& 2014 &&&联系本站:如何通过配置在cocos2dx引擎下制作强制指引的新手引导_百度知道
如何通过配置在cocos2dx引擎下制作强制指引的新手引导
提问者采纳
想了两个方案都有点问题之前用cocos2dx的游戏做的新手引导(只能点指定区域)是在代码中写死的,控件非常多,通过编号查找到对应的控件,现在这个游戏的功能比较多。还有一个是将系统的控件都编号,一个方案是坐标点,这个方案在不同分辨率下如何转化是个问题,查找也不方便,所以新手引导想通过配置来实现
其他类似问题
为您推荐:
新手引导的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁主题 : cocos2dx用来开发应用(非游戏类)如何?
级别: 新手上路
可可豆: 10 CB
威望: 10 点
在线时间: 28(时)
发自: Web Page
来源于&&分类
cocos2dx用来开发应用(非游戏类)如何?&&&
如题,可以吗? 不可以是为什么?
UID: 231210
可可豆: 540 CB
威望: 448 点
在线时间: 581(时)
发自: Web Page
有人曾经这样做过,但是觉得不好...原因是一般的APP,直接调用OS原生的UI控件就好了,这样你的APP和OS显得更加的融为一体,你用起来也方便,比如我一直就觊觎IOS的那个ScrollView。。 对比下CCScrollView。。 真是恨铁不成钢啊其实非要用也不是不可以 ,毕竟跨平台很方便。 经验不多,只能讨论到这了
级别: 新手上路
UID: 308399
可可豆: 187 CB
威望: 151 点
在线时间: 121(时)
发自: Web Page
现在CrossApp就是做这个。
级别: 新手上路
可可豆: 17 CB
威望: 17 点
在线时间: 1(时)
发自: Web Page
我的视频app就是拿cocos2dx做的,充分利用了cocos2dx的动画效果开发 动态特性的UI, 可以拿去参考
改进了CCTableView的效率, 支持网络图片动态下载,缓存,显示, 支持调用 外部的Android camera, gallery,支持coco2dx层面的图片编辑, 支持百度云盘上传,下载, 支持MP4视频播放,JNI和cocos2dx的互相调用,支持Discuz的加密算法保证网络通信中的加密传输,不能被人发破解数据包 IOS的正在做,马上就要出炉了[ 此帖被rarph在 10:56重新编辑 ]
UID: 262363
发帖: 1029
可可豆: 2713 CB
威望: 2183 点
在线时间: 2620(时)
发自: Web Page
耗电,很多平台API在cocos2d-x上都没封装,平台原生的控件丰富
级别: 新手上路
可可豆: 1 CB
威望: 1 点
在线时间: 0(时)
发自: Web Page
有进展么,我也想这么做啊,可以一起交流么?
级别: 新手上路
可可豆: 69 CB
威望: 69 点
在线时间: 37(时)
发自: Web Page
发什么神经啊。。不只是api控件的区别好吗c2d是使用opengles来绘图的去了解下opengl是干嘛的行吗
关注本帖(如果有新回复会站内信通知您)
3*3+1 正确答案:10
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版}

我要回帖

更多关于 cocos2dx 实现背包 的文章

更多推荐

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

点击添加站长微信