[cocos2dx学习笔记]用cocos2dx3.X完成塔防游戏王国保卫战--游戏开始界面

修改AppDelegate中内容,将setDesignResolutionSize中改为

<span style="font-size:14px;">(960,640,ResolutionPolicy::FIXED_HEIGHT)</span>

保持传入的设计分辨率高度不变,根据屏幕分辨率修正设计分辨率的宽度

通过:

auto scene = WelcomeScene::createScene();
director->runWithScene(scene);
来启动新的场景,进入开始游戏界面

首先是Kingdom Rush的LOGO以及该LOGO的动画

加载资源文件xx.plist

SpriteFrameCache::getInstance()->addSpriteFramesWithFile("mainmenu_spritesheet_32_1-hd.plist");
添加背景图片

//从SpriteFrameCache中加载图片
auto sprite_background = Sprite::createWithSpriteFrameName("mainmenu_bg.png");

//设置位置
sprite_background->setPosition(Point(visibleSize.width/2,visibleSize.height/2));
//添加背景,Zorder设置为-1为此场景最底层
addChild(sprite_background,-1);
然后添加kingdom Rush Logo

sprite_Logo = Sprite::createWithSpriteFrameName("logo.png");
//计算Logo图应该在的位置
point_Logo.x = visibleSize.width/2,visibleSize.height;
point_Logo.y = visibleSize.height-(sprite_Logo->getContentSize().height/2);
//设置位置,初始大小
sprite_Logo->setScale(0.2f);
sprite_Logo->setPosition(point_Logo);
addChild(sprite_Logo,1);
这样LOGO就显示在了背景图片之上,初始大小为0.2倍,给它设置一个ScaleTo的动画例如 ScaleTo::create(0.5,1.5,1.5),然后播放即可

在LOGO缩放动画完成后,会有Kingdom从左到右闪烁的动画,通过查看原游戏资源图片发现这是一个帧动画,每一帧的图片已经保存在plist当中,通过播放帧动画即可实现效果。

//从资源中加图片,设置位置
auto sprite = Sprite::createWithSpriteFrameName("logo_brillo_0001.png");

sprite->setPosition(point_Logo);
//生成帧动画
//参见http://www.cnblogs.com/onlycxue/p/3509610.html
SpriteFrame* frame = NULL;
Vector<SpriteFrame*> aFrames(20);

for (int len = 1;len <= 21; len++)
{
  frame = SpriteFrameCache::getInstance()->spriteFrameByName(String::createWithFormat("logo_brillo_00%02d.png",len)->getCString());
  if(frame!=nullptr)
    aFrames.pushBack(frame);
}
  addChild(sprite,2);
  auto animation = Animation::createWithSpriteFrames(aFrames,0.1f);
  //播放动画
  sprite->runAction(RepeatForever::create(Animate::create(animation)));
动画RepeatForever::create创建一个不间断播放的动画,放置在Logo上覆盖,动画效果完成。


创建一个动画序列Sequence,在序列中加入logo的缩放动画和帧动画,即可在logo缩放动画完成之后链接上帧动画,达到原有游戏效果。


接下来是开始按键的生成以及动画

cocos2dx中,可以采用MenuItemSprite来定义一个精灵按键,方便设置按键效果以及监听

本文采用给Sprite添加监听的方式来实现一个按键

首先是加载资源图片

在上述动画序列Sequence的最后再添加一个开始按键的下移动画MoveTo即可实现,代码略

创建一个监听

auto button_Start_listener = EventListenerTouchOneByOne::create();

设置onTouchBegan即点击后的相应

button_Start_listener->onTouchBegan = [&](Touch* touch,Event* event){
  //获取点击目标
  auto target = static_cast<Sprite*>(event->getCurrentTarget());
  //获取将世界坐标中触摸点转换为模型坐标后的点击坐标
  Point locationInNode = target->convertTouchToNodeSpace(touch);
  //获取目标的大小
  Size size = target->getContentSize();
  //创建rect区域
  Rect rect = Rect(0+40,0+30,size.width-80,size.height/3 +15);
  //当点击坐标在区域内时
  if (rect.containsPoint(locationInNode))
  {  
    //改变Button式样达到点击效果
    target->setDisplayFrame(SpriteFrameCache::getInstance()->spriteFrameByName("menu_startchain_0002.png"));			
    return true;  
  }  
  return false;  
};

 因为点击整个场景的所有精灵时,都会依次执行所有的 
EventListenerTouchOneByOne,所以需要在onTouchBegan中加入对点击区域的判断,以此来判断是否点击在所需精灵中,rect即精灵所在区域,这里对原有精灵的rect进行了修正,即去掉START按键中链子以及其他的部分,当点击是,改变改精灵的图片,达到点击效果。 
 

设置点击后释放动作监听

button_Start_listener->onTouchEnded = [&](Touch* touch,Event* event){
  auto target = static_cast<Sprite*>(event->getCurrentTarget());
  static_cast<Sprite*>(event->getCurrentTarget())->setDisplayFrame(SpriteFrameCache::getInstance()->spriteFrameByName("menu_startchain_0001.png"));
  button_Start->runAction(MoveTo::create(0.3f,Point(point_Logo.x,point_Logo.y)));
  button_Start->setVisible(false);
  setSaveMenuVisible();
};


点击后开始按键MoveTo到Logo后,隐藏,然后将开始游戏菜单上移


三个“NEW GAME”的背景图片是一个SPRITE,"CLOSE"按键设置监听方式与上述开始按键类似,也可使用MenuItemSprite方式,当点击开始按键后,给这些精灵添加MoveTo动画,移动到场景上。

“NEW GAME”采用新建一个自定义精灵的方式

class SlotMenu : public Sprite
{
public:
    SlotMenu();
    ~SlotMenu();
    virtual bool initWithNum(int num);
    CREATE_FUNC(SlotMenu);
    void button_Savelot_Delete_callback(Ref* pSender);
    void conform_delete(Ref* pSender);
    void cancel_delete(Ref* pSender);
    void createNewGame();
    static SlotMenu* createMenu(int num);
protected:
    Label* label_hint;
    MenuItemSprite* button_Savelot_Delete;
    Sprite* savelot;
};

首先我们自定义一个创建方法:

具体可参见http://cn.cocos2d-x.org/tutorial/show?id=1987

SlotMenu* SlotMenu::createMenu(int num)
{
    auto slotMenu = new SlotMenu();
 
    if (slotMenu && slotMenu->initWithNum(num))
    {
        slotMenu->autorelease();
        return slotMenu;
    }
    CC_SAFE_DELETE(slotMenu);
    return NULL;
}
其中num为传入参数,设置为3个NEW GAME中的哪一个按键
在initWithNum(int num)中,依次添加所有精灵



通过UserDefault::getInstance()->getBoolForKey方式设置某个记录游戏是否开始,

若存在则显示当前记录并且将X按键显示如右图,所不存在则显示NEW GAME

点击X按键,显示“DELETE SLOT”和两个按键

例如删除按键:

auto confirm_Delete = MenuItemSprite::create(Sprite::createWithSpriteFrameName("mainmenu_saveslot_confirmdelete_0001.png"),Sprite::createWithSpriteFrameName("mainmenu_saveslot_confirmdelete_0001.png"),CC_CALLBACK_1(SlotMenu::conform_delete,this));

以及该按键监听:

void SlotMenu::conform_delete(Ref* pSender)
{
	savelot->getChildByTag(LABEL_HINT)->setVisible(false);
	savelot->removeChildByTag(NEWGAME);
	createNewGame();
	UserDefault::getInstance()->setBoolForKey(String::createWithFormat("<span style="font-family: Arial,sans-serif;">is_savelot_%d_exit</span>",this->num)->getCString,false);
}


文字采用Label方式创建,3个按键采用MenuItemSprite方式设置监听以及点击效果,监听内设置逻辑判断哪一项该隐藏哪一项该显示,具体代码略。

将整个精灵的底层精灵设置监听,点击后跳转到新游戏界面

if (rect.containsPoint(locationInNode)&&!savelot->getChildByTag(LABEL_HINT)->isVisible())
{  
  target->setDisplayFrame(SpriteFrameCache::getInstance()->spriteFrameByName("mainmenu_saveslot_0002.png"));			
  return true;  
}  
下一张将讲如何自定义一个跳转场景

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
1. 圆形音量button事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:好了,不多解释,本篇到此为止。(旁白: 噗。就这样结束了?)啊才怪~我们来看看代码:[cpp] viewplaincopyprint?CCContro
原文链接:http://www.cnblogs.com/physwf/archive/2013/04/26/3043912.html为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。在上一节中我们建
2019独角兽企业重金招聘Python工程师标准>>>cocos2d2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框,最直观的形象就是ios里的短信气泡了),这就要求图
原文链接:http://www.cnblogs.com/linji/p/3599478.html1.环境和工具准备Win7VS2010/2012,至于2008v2版本之后似乎就不支持了。 2.安装pythonv.2.0版本之前是用vs模板创建工程的,到vs2.2之后就改用python创建了。到python官网下载版本2.7.5的,然后
环境:ubuntu14.04adt-bundle-linux-x86_64android-ndk-r9d-linux-x86_64cocos2d-x-3.0正式版apache-ant1.9.3python2.7(ubuntu自带)加入环境变量exportANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdkexportPATH=${PATH}:/$ANDROID_SDK_ROOTools/export
1开发背景游戏程序设计涉及了学科中的各个方面,鉴于目的在于学习与进步,本游戏《FlappyBird》采用了两个不同的开发方式来开发本款游戏,一类直接采用win32底层API来实现,另一类采用当前火热的cocos2d-x游戏引擎来开发本游戏。2需求分析2.1数据分析本项目要开发的是一款游
原文链接:http://www.cnblogs.com/linji/p/3599912.html//纯色色块控件(锚点默认左下角)CCLayerColor*ccc=CCLayerColor::create(ccc4(255,0,0,128),200,100);//渐变色块控件CCLayerGradient*ccc=CCLayerGradient::create(ccc4(255,0,0,
原文链接:http://www.cnblogs.com/linji/p/3599488.html//载入一张图片CCSprite*leftDoor=CCSprite::create("loading/door.png");leftDoor->setAnchorPoint(ccp(1,0.5));//设置锚点为右边中心点leftDoor->setPosition(ccp(240,160));/
为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院关老师的Cocos2d-x课程之一可以送智捷课堂编写图书一本(专题可以送3本)。一、Cocos2d-x课程列表:1、Cocos2d-x入门与提高视频教程__Part22、Cocos2d-x数据持久化与网络通信__Part33、Cocos2d-x架构设计与性能优化内存优
Spawn让多个action同时执行。Spawn有多种不同的create方法,最终都调用了createWithTwoActions(FiniteTimeAction*action1,FiniteTimeAction*action2)方法。createWithTwoActions调用initWithTwoActions方法:对两个action变量初始化:_one=action1;_two=action2;如果两个a
需要环境:php,luajit.昨天在cygwin上安装php和luajit环境,这真特么是一个坑。建议不要用虚拟环境安装打包环境,否则可能会出现各种莫名问题。折腾了一下午,最终将环境转向linux。其中,luajit的安装脚本已经在quick-cocos2d-x-develop/bin/中,直接luajit_install.sh即可。我的lin
v3.0相对v2.2来说,最引人注意的。应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯,不枉我改了那么多类名。话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。v3.0在载入图片方面也有了非常大改变,仅仅只是