Quick Cocos (2.2.5plus)CoinFlip解析(MenuScene display AdBar二次封装)

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

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

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

打开main.lua

1 function __G__TRACKBACK__(errorMessage)
2     print("----------------------------------------")
3     print("LUA ERROR: " .. tostring(errorMessage) .. "n")
4     print(debug.traceback("", 2))
5     print("----------------------------------------")
6 end
7 
8 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方法:

1 function MenuScene:ctor()
 2     self.bg = display.newSprite("#MenuSceneBg.png", display.cx, display.cy)   -- bg是self的一个属性。此处是一个Sprite,用于背景的添加。
 3     self:addChild(self.bg)                                -- 将此 Sprite 节点添加到 MenuScene 这个节点中。
 4 
 5     self.adBar = AdBar.new()                                                  -- 信息条:adBar。
 6     self:addChild(self.adBar)
 7 
 8     -- create menu
 9     self.moreGamesButton = BubbleButton.new({                   -- button 是 MenuScene 的一个属性
10         image = "#MenuSceneMoreGamesButton.png",
11         x = display.left + 150,                                               -- 设置图片位置的坐标相对于边和底的距离
12         y = display.bottom + 300,
13         sound = GAME_SFX.tapButton,
14         prepare = function()
15             self.menu:setEnabled(false)                       -- 关闭 menu 键的功能,防止在item作用的时候menu键也作用
16         end,
17         listener = function()
18             app:enterMoreGamesScene()                        -- 此方法在MyApp.lua中
19         end,
20     })
21 
22     self.startButton = BubbleButton.new({
23         image = "#MenuSceneStartButton.png",
24         x = display.right - 150,
25         y = display.bottom + 300,
26         sound = GAME_SFX.tapButton,
27         prepare = function()
28             self.menu:setEnabled(false)
29         end,
30         listener = function()
31             app:enterChooseLevelScene()
32         end,
33     })
34 
35     self.menu = ui.newMenu({self.moreGamesButton, self.startButton})
36     self:addChild(self.menu)
37 end

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

(信息条就是底下这个绿色的东西)
Quick Cocos (2.2.5plus)CoinFlip解析(MenuScene display AdBar二次封装)

有用的信息: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
1 local AdBar = {}
2 
3 function AdBar.new()
4     local sprite = display.newSprite("#AdBar.png")
5     sprite:align(display.BOTTOM_CENTER, display.cx, display.bottom)
6     return sprite
7 end
8 
9 return AdBar

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


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



原文链接: https://www.cnblogs.com/CrystalN/p/4503574.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/216138

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午9:19
下一篇 2023年2月13日 上午9:20

相关推荐