cocos2dx关卡选择界面设计

原创 2015年06月09日 11:25:52

重点内容 做游戏时候经常用到关卡选择,写了个关卡选择界面逻辑类,关卡解锁,关卡类型显示,打过的关卡星级评定,一共六大关,每个大关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::extension;
class LevelSel : public CCLayer
{
public:
CREATE_FUNC(LevelSel);
bool init();
void selevent(CCObject *pSender, TouchEventType type);
void pageViewEvent(CCObject *pSender, PageViewEventType type);
void update(float delta);
void onEnter();
UIPageView* pageView;
Layout* layout_sel;
void refreshsel(int offset);
void aaaaa();
//////////////////////////////////////////////////////////////////////////
int stars[60];
int presel,cursel;
int curlevel;
};

endif

LevelSel.cpp文件

include “LevelSel.h”

include “Modules/Archive.h”

include “Scene/MapPrepareScene.h”

include “Common/EnterStageDataExchange.h”

include “PropLayer.h”

void LevelSel::refreshsel(int curoffset)
{
UIButton* Upgrade_bt;
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);
}
}
else
{
//锁定
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+idx;
int mode=(CDataSystem::GetLevelParanew(levelId,CGameDB::GetInstance()->GetTable(TABLE_ID_LEVEL_DATA)))->m_completeType;
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);
}
else
{
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

版权声明:每天进步一点点

相关文章推荐

Cocos2d-JS中使用CocosStudio资源——关卡选择界面

在本篇博客中,我们将通过一个在Cocos2d-JS中使用从CocosStudio导出的关卡选择界面资源的例子,来简要介绍以下内容:Button控件,Text控件,PageView控件,即翻页容器的使用...

cocos2dx3.x《格斗》类游戏实现人物选择界面(二)

先看最终实现的效果图: 由于原本2.x版本的监听事件移植到3.x上面,或许是API改了什么也不知道啊。 创建一个人物选择场景。ChooseHero.h如下: 暂时先定义成这样了,后面再看...

<三> cocos2dx常见32种场景切换动画

bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !CC...

cocos2dx 植物大战僵尸 1 简言创建关卡层

本系列不定期更新,我也在网上找了一些资源,但都没能很好地还原原作,不得不说有些遗憾,这次的编写使用的是类cocos2dx的语法,因为cocos2dx的更新速度很快,所以我采用的是类似于伪代码的形式,只...
  • bull521
  • bull521
  • 2017年05月19日 14:51
  • 222

cocos2dx游戏只关卡开发

小伙伴们今天晚上我要给大家讲讲cocos2dx之关卡开发,这里自己先看代码我里面写的很清楚了不懂的可以留言问我 我后续还有说明时间紧迫我暂时就不多写了,下次我在重点讲解#ifndef __MISSI...

Cocos2dx:实现游戏关卡ScrollView方式(二)

今天我们实现关卡的选择是使用ScrollView这个类。当然还有一些其他的方法,比如使用page view也可以,见上文。先说下整体的思路,ScrollView这个类是继承自CCLayer的,本身的触...
  • ZBJDSBJ
  • ZBJDSBJ
  • 2016年04月20日 19:14
  • 1842

Cocos2dx:实现游戏关卡PageView方式(一)

PageView实现游戏关卡:实现类似android平台下的viewpager #ifndef __LevelLayer_SCENE_H__ #define __LevelLayer_SCENE_H_...
  • ZBJDSBJ
  • ZBJDSBJ
  • 2016年04月20日 19:00
  • 3132

cocos2dx异步网络UI界面更新设计

cocos2dx异步网络UI界面更新设计主要有两个部分 a.异步网络请求 b.UI界面更新 主要思路: 创建一个用于UI界面更新的类: 主要代码如下 有 界面的更新 和 界面任务的更添加...

cocos2dx之抽奖界面与获奖概率的设计(一)

在不同游戏中,经常有各种各样抽奖的环节,比如每次登入游戏的免费抽奖,卡牌游戏中的抽不同颜色的卡牌英雄,不同品质的武器抽奖,十连抽等等。今天给大家讲解一下,比较传统的抽奖方式,就是转转盘的抽奖,包含抽奖...

cocos2dx之抽奖界面与获奖概率的设计(二)

上一篇博客,我们讲解了抽奖界面的设计,其中着重讲解了下沿椭圆运动的动作类EllipseBy。本篇将讲解抽奖概率的设计。 转盘抽奖的方式有两种:第一种是先转转盘,转到谁就是谁。第二种是我先计算你抽中了什...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2dx关卡选择界面设计
举报原因:
原因补充:

(最多只允许输入30个字)