这一篇是系列文章的最后一篇了,这一章我们会将剩下的UI界面和元素补齐,比如:游戏开始界面、过关界面,画面滚动。

游戏开始界面

在前面我们看到过主界面的结构,在我们的游戏开始界面中,我们只给它添加了一个背景图和一个“开始游戏”的按钮。

我们新建一个名为StartScene.lua的文件,先加入如下内容:

local StartScene = class("StartScene", function()return display.newScene("StartScene")
end)function StartScene:ctor()local background = CCSprite:create("start-bg.jpg")background:setPosition(display.cx, display.cy)addChild(background)
endreturn StartScene

然后我们再加入一个开始游戏按钮,在StartScene:ctor()中添加如下代码:

local item = ui.newImageMenuItem({image="#start1.png", imageSelected="#start2.png",listener = function()display.replaceScene(require("app.scenes.MainScene").new(), "fade", 0.6, display.COLOR_WHITE)end})
item:setPosition(display.cx, display.cy)
local menu = ui.newMenu({item})
menu:setPosition(display.left, display.bottom)
self:addChild(menu)

接下来我们要改变游戏的入口为StartScene。打开scripts/app目录下的MyApp.lua文件,这个文件是作为游戏的入口文件。我们打开MyApp.lua来分析下:

local MyApp = class("MyApp", cc.mvc.AppBase)

这一句可以看出MyApp类是从AppBase类继承过来的,AppBase类是是Quick里的MVC架构中里的重要的一环,关于Quick的MVC我们后面再跟大家再讲。

function MyApp:run()CCFileUtils:sharedFileUtils():addSearchPath("res/")display.addSpriteFramesWithFile("image/role.plist", "image/role.pvr.ccz");display.addSpriteFramesWithFile("image/ui.plist", "image/ui.pvr.ccz");display.addSpriteFramesWithFile("image/effect.plist", "image/effect.pvr.ccz");self:enterScene("StartScene")
end

MyApp:run()是界面的启动函数,在启动时我们首先添加了资源的搜索路径res,这表示我们的资源放到res目录下面。然后接下来将做的大图添加到SpriteFrameCache中。

最后面一句是启动StartScene界面,原来这里是MainScene界面,这里就是我们更改程序启动界面的地方。

好了,改完之后我们刷新Player,界面是不是变了呢?

点击开始游戏,我们进入到原来的战斗界面:

我们再回到原来的暂停界面,里面是不是有一个回到开始界面的图标呢?

我们在原来的暂停界面中把PauseLayer::home()留空了,现在我们来把这个空不上,将下面的代码复制到PauseLayer::home()函数中:

display.resume()
self:removeFromParentAndCleanup(true)
display.replaceScene(require("app.scenes.StartScene").new())

这样,当我们点击回到开始界面的图标时,游戏就会切换到开始界面了。

过关

我们的游戏没有设置关卡选择界面,为了表示过关了,我们在消灭敌人后会提示说可以进下一关了,点了以后,玩家马上可以进入下一个关卡。

首先,我们要知道敌人挂了。我们添加一个table到MainScene中,在MainScene的ctor中我们添加一句

self.enemys = {}

在我们添加完enemy到MainScene中之后,我们也要把enemy添加到self.enemys中:

self.enemys[#self.enemys+1] = enemy1
self.enemys[#self.enemys+1] = enemy2

另外我们还需要给MainScene添加一个敌人死亡的消息:

CCNotificationCenter:sharedNotificationCenter():registerScriptObserver(nil, function(_, enemy) self:enemyDead(enemy) end, "ENEMY_DEAD")

当然,要记得在退出的时候把消息取消掉。

我们打开Enemy1.lua和Enemy2.lua文件,在里面的Enemyx:dead()函数的remove()中添加这样一句:

CCNotificationCenter:sharedNotificationCenter():postNotification("ENEMY_DEAD", self)

接下来,我们在MainScene里添加一个MainScene:enemyDead(enemy)的方法来响应敌人死亡的事件。函数内容如下:

function MainScene:enemyDead(enemy)print("EnemyDead")-- 检测敌人是否已经没血了self:removeEnemy(enemy)-- 如果敌人全部挂了if #self.enemys == 0 thenself:showNextLevelItem()end
end

removeEnemy的作用是将enemy从self.enemys里移除掉,具体内容可以参考github上的代码。showNextLevelItem的作用是显示继续下一关的按钮,像这样:

首先,我们在创建菜单时创建一个图片菜单项,然后隐藏,在showNextLevwelItem中我们,让他显示出来,并且执行闪烁动画:

-- 显示进入下一关的按钮
function MainScene:showNextLevelItem()local goItem = self.menu:getChildByTag(2)goItem:setVisible(true)goItem:runAction(CCRepeatForever:create(CCBlink:create(1, 1)))
end

在点击下一关按钮时,我们移动背景:

-- 进入下一关
function MainScene:gotoNextLevel()local goItem = self.menu:getChildByTag(2)transition.stopTarget(goItem)goItem:setVisible(false)self.background:move("left", self.player)
end

在移动完成后,会发送一个背景移动结束的消息给MainScene,这时再添加敌人到场景中:

function MainScene:backgroundMoveEnd()self:addEnemys()
end

过关界面

在我们的游戏中,因为没有等级和金币系统,所以我们的过关界面没有内容,在这里就不列出来了,在代码中有个GameoverLayer.lua实现了一个简单的过关界面,有兴趣的同学可以下来自己完成,为了T恤,加油哦!

【官方教程】使用Quick-Cocos2d-x搭建一个横版过关游戏(六)相关推荐

  1. Cocos2D教程:使用SpriteBuilder和Cocos2D 3.x开发横版动作游戏——Part 2

    本文是"使用Cocos2D 3.x开发横版动作游戏"系列教程的第二篇,同时也是最后一篇.是对How To Make A Side-Scrolling Beat Em Up Game ...

  2. cocos2d:如何制作一个横版格斗过关游戏 Cocos2d-x 2.0.4

    转载于:http://blog.csdn.net/akof1314/article/details/8549150 本文实践自 Allen Tan 的文章<How To Make A Side- ...

  3. Cocos2D来制作横版过关游戏1

    本文实践自 Allen Tan 的文章< How To Make A Side-Scrolling Beat 'Em Up Game Like Scott Pilgrim with Cocos2 ...

  4. Cocos2D教程:使用SpriteBuilder和Cocos2D 3.x开发横版动作游戏——Part 1

    本文是对教程How To Make A Side-Scrolling Beat Em Up Game Like Scott Pilgrim with Cocos2D – Part 1的部分翻译,加上个 ...

  5. Unity 4 3 制作一个2D横版射击游戏

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 这是一个 ...

  6. Unity 4.3 制作一个2D横版射击游戏

    这是一个横版射击游戏. 教程来自: http://pixelnest.io/tutorials/2d-game-unity/   中文版教程: http://www.litpo.com/categor ...

  7. 如何制作一个横版格斗过关游戏 2 Cocos2d x 2 0 4

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在第一篇 ...

  8. Unity 4 3 制作一个2D横版射击游戏 2

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 在上一篇 ...

  9. 如何制作一个横版格斗过关游戏(2) Cocos2d-x 2.0.4 .

    本文原创版权归 csdn 无幻 所有,转载请详细标明原创作者及出处,以示尊重! 作者:无幻 原文:http://blog.csdn.net/akof1314/article/details/85725 ...

最新文章

  1. PHP全栈学习笔记20
  2. bottle模板 template/jinja2_template
  3. 从零开始学习docker(十二)介绍Docker Compose基本使用
  4. java并发问题_并发理论基础:并发问题产生的三大根源
  5. 20160828_第4周周报
  6. Qt Creator 使用技巧
  7. pip安装软件 Command “python setup.py egg_info“ failed with error code 1 in
  8. ORACLE小错误和小技巧
  9. Python+django网页设计入门(20):使用WebSocket创建多人在线聊天室
  10. XMLHttpRequest发送POST请求
  11. 中文近义词工具包,Synonyms 发布新版本 v3.16,支持词汇表扩大至 40w+
  12. 点云sift matlab,点云配准SIFT算法
  13. IE6——png图片的修复
  14. java获取时分秒毫秒_JAVA中如何获取毫秒和微秒数
  15. OSChina 周六乱弹 ——因为四毛钱,友谊的小船就翻了
  16. # 公有云?私有云?混合云?多云?行业云?傻傻分不清楚(下篇)
  17. php程序员 合川_PHP程序员将何去何从?
  18. MDX的实例讲解(排名前15的小例子)
  19. Altium脚本开发
  20. php网站老掉线,电脑网络不稳定老掉线的两种解决方法

热门文章

  1. python汇率兑换双向_汇率兑换—python第一课
  2. MacOS 搭建一个vue项目(完整步骤)
  3. CheatSheet——PCL
  4. 开始Python的新手教程
  5. 优化算法+神经网络:神经网络自动参数优化
  6. Vue—使用canvas实现电子签名
  7. CCD相机模数转换芯片时序简介
  8. 关于DELL戴尔服务器安装系统是否需要引导盘的问题
  9. 捷配浅谈PCB叠层的概念、设计原则
  10. 李开复微博数据分析--微博爬虫、数据挖掘、数据可视化(持续更新)