转载自:http://cn.cocos2d-x.org/tutorial/show?id=1621

从Samples中找到CoinFlip文件夹,复制其中的 res 和 script 文件夹覆盖新建工程中的 res 和 script文件。

用player运行,游戏可正常打开。

打开main.lua

 function __G__TRACKBACK__(errorMessage)
print("----------------------------------------")
print("LUA ERROR: " .. tostring(errorMessage) .. "\n")
print(debug.traceback("", ))
print("----------------------------------------")
end

require("app.MyApp").new():run() --启动后执行 MyApp 脚本,并执行 run 方法。

main.lua 是lua脚本的启动文件。

无需改动。

打开 MyApp.lua

require("config")
require("framework.init")
require("framework.shortcodes")
require("framework.cc.init") local MyApp = class("MyApp", cc.mvc.AppBase) function MyApp:ctor()
MyApp.super.ctor(self)
self.objects_ = {}
end function MyApp:run()
CCFileUtils:sharedFileUtils():addSearchPath("res/")
display.addSpriteFramesWithFile(GAME_TEXTURE_DATA_FILENAME, GAME_TEXTURE_IMAGE_FILENAME) -- preload all sounds
for k, v in pairs(GAME_SFX) do
audio.preloadSound(v)
end self:enterMenuScene()
end function MyApp:enterMenuScene()
self:enterScene("MenuScene", nil, "fade", 0.6, display.COLOR_WHITE)
end function MyApp:enterMoreGamesScene()
self:enterScene("MoreGamesScene", nil, "fade", 0.6, display.COLOR_WHITE)
end function MyApp:enterChooseLevelScene()
self:enterScene("ChooseLevelScene", nil, "fade", 0.6, display.COLOR_WHITE)
end function MyApp:playLevel(levelIndex)
self:enterScene("PlayLevelScene", {levelIndex}, "fade", 0.6, display.COLOR_WHITE)
end return MyApp

run方法主要做了三件事:设置资源路径,加载游戏资源,进入主场景。

与此同时MyApp还封装了所有场景和它们的切换方法。

进入第一个场景——MenuScene

local AdBar = import("..views.AdBar")
local BubbleButton = import("..views.BubbleButton")

开头两句 import 方法和c++中用处相同,MenuScene要用到以上两个子定义的类。

local MenuScene = class("MenuScene", function()
return display.newScene("MenuScene")
end)

class方法有两个参数,第一个参数是类名。第二参数可以通过两种形式传递参数,一种是传入一个函数,另一种方式是传入一个Quick的类或者是Lua对象。

当传入函数时,新创建的类会以传入的函数作为构造函数。当传入的是一个对象时,会以传入的对象为父类派生下来。

所以此处是新建了一个类。

接下来是ctor方法:

 function MenuScene:ctor()
self.bg = display.newSprite("#MenuSceneBg.png", display.cx, display.cy) -- bg是self的一个属性。此处是一个Sprite,用于背景的添加。
self:addChild(self.bg)                             -- 将此 Sprite 节点添加到 MenuScene 这个节点中。 self.adBar = AdBar.new() -- 信息条:adBar。
self:addChild(self.adBar) -- create menu
self.moreGamesButton = BubbleButton.new({                   -- button 是 MenuScene 的一个属性
image = "#MenuSceneMoreGamesButton.png",
x = display.left + , -- 设置图片位置的坐标相对于边和底的距离
y = display.bottom + ,
sound = GAME_SFX.tapButton,
prepare = function()
self.menu:setEnabled(false)                       -- 关闭 menu 键的功能,防止在item作用的时候menu键也作用
end,
listener = function()
app:enterMoreGamesScene()                        -- 此方法在MyApp.lua中
end,
}) self.startButton = BubbleButton.new({
image = "#MenuSceneStartButton.png",
x = display.right - ,
y = display.bottom + ,
sound = GAME_SFX.tapButton,
prepare = function()
self.menu:setEnabled(false)
end,
listener = function()
app:enterChooseLevelScene()
end,
}) self.menu = ui.newMenu({self.moreGamesButton, self.startButton})
self:addChild(self.menu)
end

ctor 方法相当于构造函数,一旦new,就会调用ctor。

(信息条就是底下这个绿色的东西)



有用的信息:
display.width和display.height表示屏幕宽度
display.cx和display.cy表示屏幕的x轴中间位置和y轴中间位置
display.left和display.right表示屏幕的最左边和最右边(x轴坐标为0和display.width的点)
display.top和display.bottom表示屏幕的顶部和底部(y轴坐标为0和display.height的点)
display.CENTER、display.LEFT_TOP、display.CENTER_TOP等分别表示node的锚点位置。
ADBar.lua
 local AdBar = {}

 function AdBar.new()
local sprite = display.newSprite("#AdBar.png")
sprite:align(display.BOTTOM_CENTER, display.cx, display.bottom)
return sprite
end return AdBar

AdBar 是一个二次封装的精灵,new时,将自动创建并返回一个设置好精灵帧、锚点、X坐标和Y坐标的精灵。


(二次封装的目的除了外部的方便调用外,最大的动能就是代码的复用!所以可以预测到后面的编写中必定将会继续用到这个信息条)


 

Quick Cocos (2.2.5plus)CoinFlip解析(MenuScene display AdBar二次封装)的更多相关文章

  1. cocos2dx与Lua以及quick cocos

    1.cocos2dx中的脚本架构与组件 2.quick cocos的开发优势 3.自定义c++类如何导出到lua

  2. 【Quick 3.3】资源脚本加密及热更新(二)资源加密

    [Quick 3.3]资源脚本加密及热更新(二)资源加密 注:本文基于Quick-cocos2dx-3.3版本编写 一.介绍 在前一篇文章中介绍了代码加密,加密方式是XXTEA.对于资源文件来说,同样 ...

  3. 制作、解析带logo的二维码

    用DecoderQRCode来解析带logo的二维码,发现报错,解析不了,于是便又查资料,找到了更强大的制作二维码 工具:GooleZXing 首先下GooleZXing的jar包. -------- ...

  4. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  5. Android6.0执行时权限解析,RxPermissions的使用,自己封装一套权限框架

    Android6.0执行时权限解析,RxPermissions的使用.自己封装一套权限框架 在Android6.0中,新添加了一个执行时的权限,我相信非常多人都已经知道了.预计也知道怎么用了,这篇博客 ...

  6. 15. 深入解析Pod对象(二):使用进阶

    15. 深入解析Pod对象(二):使用进阶 15.1 Projected Volume,投射数据卷 备注:Projected Volume 是 Kubernetes v1.11 之后的新特性 在 Ku ...

  7. 3) drf 框架生命周期 请求模块 渲染模块 解析模块 自定义异常模块 响应模块(以及二次封装)

    一.DRF框架 1.安装 pip3 install djangorestframework 2.drf框架规矩的封装风格 按功能封装,drf下按不同功能不同文件,使用不同功能导入不同文件 from r ...

  8. D. The Wu 解析(思維、二進位運算)

    Codeforce 1017 D. The Wu 解析(思維.二進位運算) 今天我們來看看CF1017D 題目連結 題目 略,請直接看原題 前言 官方解答實在看不懂...之後還記得的話再補那個做法吧 ...

  9. Spring源码解析之ConfigurationClassPostProcessor(二)

    上一个章节,笔者向大家介绍了spring是如何来过滤配置类的,下面我们来看看在过滤出配置类后,spring是如何来解析配置类的.首先过滤出来的配置类会存放在configCandidates列表, 在代 ...

随机推荐

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. 2016年Web前端面试题目

    以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中无法解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢迎指正.:) HTML/CSS部分 1. ...

  3. C#剪切,复制,粘贴底层应用编写

    zz备用复制剪切粘贴的底层应用 /// <summary> /// 复制或剪切文件至剪贴板(方法) /// </summary> /// <param name=&quo ...

  4. Hbase学习连接

    http://blog.csdn.net/baolibin528/article/details/43672131 http://m.blog.csdn.net/article/details?id= ...

  5. Linux ——————用Secure传文件时直接拖了文件用的是AssIC导致linux那边直乱码

    如下: 解决办法: 直接删除.

  6. 完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip

    之前在测试环境(centos7.2)上部署了openstack云平台(完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建),openstack在neutron组网 ...

  7. 一个简单的ASP.NET MVC异常处理模块

    一.前言 异常处理是每个系统必不可少的一个重要部分,它可以让我们的程序在发生错误时友好地提示.记录错误信息,更重要的是不破坏正常的数据和影响系统运行.异常处理应该是一个横切点,所谓横切点就是各个部分都 ...

  8. <img>标签链接地址失效如何自动显示默认图片

    <img src="errurl" onerror="this.src='default.jpg'">

  9. 51Nod 1268 和为K的组合

    51Nod  1268  和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...

  10. ViewPager实现引导页

    1. 要使用ViewPager,必须要创建 PagerAdapter. 这里创建一个 ViewPagerAdapter来继承PagerAdapter public class ViewPagerAda ...