1. 程式人生 > >quick-cocos2d-x例項之挑戰記憶極限設計文件

quick-cocos2d-x例項之挑戰記憶極限設計文件

               

1.  來源

QuickV3 sample專案中的2048樣例遊戲,以及最近《最強大腦》娛樂節目。將2048改造成一款挑戰玩家對數字記憶的小遊戲。

微信公眾號:HopToad

2.  邏輯

可選擇簡單,中等,困難三種難度遊戲。

開局UI


每種難度進入後有多個選項如下:


2.1         gridshow

每一塊數字是報錯在全域性變數gridshow 數字中,其中元素是一個cell的table型別。

Cell表型別中有一個塊大小,一個背景,一個數字,另加一個layer(用於實現觸控輸入),一個index(用於除錯,顯示塊),一個輸入控制元件(用於輸入)

全域性變數grid中儲存所有顯示的數字。通過呼叫initGrid函式返回得到。

3.  遊戲開始

點選begin後,顯示如下


3秒後顯示如下


3.1         3秒倒計時到後

取消定時器。

self:removeChild(timelabel)

            self:createTipLabel("請填入看到的9個數字")

            self:createGridHide();

            grid=initGrid(3,3,"點選\n輸入")

            self:createGridShowSize(20)

            self:createInput()

           print("unschedule")

其中createInput函式呼叫addCellTouch函式,該函式實現增加觸控及輸入控制元件新增。

4.  填入數字

4.1      建立輸入控制元件

通過cc.ui.UIInput.new(options)新建一個輸入控制元件。其中引數 options table 型別,可選值如下:

·        image:輸入框的影象,可以是影象名或是 display.newScale9Sprite()建立的Sprite9Scale物件。

·        imagePressed:輸入狀態時輸入框顯示的影象(可選)

·        imageDisabled:禁止狀態時輸入框顯示的影象(可選)

·        listener:回撥函式,監聽輸入事件(可選)

·        size:輸入框的尺寸,用

cc.size(寬度,高度) 建立

·        x, y:座標(可選)

我們來看看如何簡單的建立一個輸入控制元件,在MainScenector中加入下面程式碼

1

2

3

4

5

6

7

local editbox = cc.ui.UIInput.new({

    image = "editbox.png", -- 輸入控制元件的背景

    x = 200,

    y = 300,

    size = cc.size(200, 40)

})

self:addChild(editbox)

4.2     獲取文字

可以使用getText()方法獲取輸入控制元件的文字內容。

1

local text = editbox:getText()

4.3     設定提示資訊

你可以設定輸入欄位預期值的提示資訊,該提示會在輸入欄位為空時顯示,並會在欄位獲得焦點時消失。

假如輸入框期望輸入的是密碼:

1

editbox:setPlaceHolder("請輸入密碼")

4.4     設定顯示文字

你也可以給輸入控制元件設定預設值。比如你想讓玩家給遊戲角色起名稱,在輸入框框中可以預留一個預設名字,使用者可以偷懶不輸入新名字,直接點選確認開始遊戲。

1

editbox:setText("路人甲")

4.5     監聽輸入事件

在新建輸入控制元件的時候,我們可以通過引數傳遞一個輸入事件監聽器給該控制元件,監聽系統輸入法在整個輸入過程中的狀態變化情況。

示例程式碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

-- 輸入事件監聽方法

local function onEdit(event, editbox)

    if event == "began" then

    -- 開始輸入

        print("開始輸入")

    elseif event == "changed" then

    -- 輸入框內容發生變化

        print("輸入框內容發生變化")

        local text = editbox:getText()

        print(text)

    elseif event == "ended" then

    -- 輸入結束

        print("輸入結束")

    elseif event == "return" then

    -- 從輸入框返回

        print("從輸入框返回")

    end

end

local editbox = cc.ui.UIInput.new({

    image = "editbox.png", -- 輸入控制元件的背景

    listener = onEdit, -- 繫結輸入監聽事件處理方法

    x = 200,

    y = 300,

    size = cc.size(200, 40)

})

editbox:addTo(self)

監聽回撥函式有兩個引數

·        event,事件型別。它有4個引數:

·        began,開始輸入,並不是所有系統都產生這個事件。Player模擬器上,不會有這個事件,只有changed事件 iOS上,點選輸入框,會彈出系統輸入法介面,began事件產生。

·        changed,輸入框內容發生變化。通常用來檢測輸入字串長度以及合法性。

·        ended,輸入結束。

·        return,從輸入框返回。return事件通常緊跟 ended事件之後。我們點選手機鍵盤上的 return按鈕,或點選輸入控制元件之外的地方,都會關閉輸入框,觸發這兩個事件。一般地,我們可以在 return事件中獲取最終的字串,並作介面切換。

·        editbox,生產事件的輸入框例項。

4.6     密碼輸入

在輸入密碼的時候,通常希望用*來顯示輸入的文字。我們可以通過setInputFlag(0)方法,來啟動密碼輸入模式。

1

2

editbox:setInputFlag(0)

editbox:setPlaceHolder("請輸入密碼")

5.  提交

是否和隨機產生的相同,如果相同則勝利,否則失敗。

5.2         origingrid

origingrid表中儲存了隨機產生的陣列。

5.3         answergrid

玩家輸入的數字儲存在answergrid儲存玩家返回的數字。

6.  音效設定

6.1         audio

播放音樂、音效

6.2         設定

根據全域性變數設定按鈕的開與關否,如下。其中localMusic是建立button的返回指標。

localMusic:setButtonLabelString("true")

Quick-Cocos2d-xv3.x版本中已經移除了選單Menu,使用自己的封裝Button實現選單的功能。

按鈕是一個專案中最基本的東西,因為你不論什麼專案都缺少不了按鈕。它是Quick中常見的UI控制元件。

6.3         UIButton

按鈕Button是基於Node的封裝,可以建立帶圖片的按鈕或文字標籤的按鈕,新增到層Layer上顯示。就像普通按鈕一樣,我們可以很方便的處理按鈕事件,按鈕的狀態。設定背景和顯示文字。

注:UIButton不直接使用

7.按鈕的種類

Quick中有三種Button控制元件,分別是UIPushButton(按鈕控制元件)UICheckBoxButton(CheckButton控制元件)UICheckBoxButtonGroup(CheckButton組控制元件)。它們是Quick封裝的按鈕控制元件,原始碼檔案分別位於Quick目錄的/framework/cc/ui/目錄下UIPushButton.lua/UICheckBoxButton.lua/UICheckBoxButtonGroup.lua

6.3.1         事件

Quick-Cocos2d-x中的按鈕控制元件支援如下的事件:

·        CLICKED點選按鈕使用UIButton:onButtonClicked(callback)方法監聽按鈕的點選事件

·        PRESSED按下按鈕使用UIButton:onButtonPressed(callback)方法監聽按鈕的按下事件

·        RELEASE釋放按鈕使用UIButton:onButtonRelease(callback)方法監聽按鈕的釋放事件

·        STATE_CHANGED狀態改變(enable <---> disable)使用UIButton:onButtonStateChanged(callback)方法監聽按鈕的狀態改變事件

Quick中的各種按鈕控制元件都支援上面的事件。我們可以通過響應的方法監聽並處理相應的事件。

7.  燒入真機注意事項

7.1         去掉print函式

蛤蟆這裡反正不去掉就是黑屏一直。

7.2         真機豎屏問題

複製config.json 檔案到 ECLIPSE專案中,修改其中的橫寬比例即可。

7.3         分行語句注意

太長語句進行分行的,要合拼成一行。

7.4         無法載入檔案

修改檔案路徑

直接修改檔案路徑

configFile =device.writablePath.."hxgame.config"

為如下:

configFile = "hxgame.config"

7.5         讀寫檔案

8.4中可解決問題,但是寫入時候無法寫入,通過初始化後重新定義全域性變數configFile=”test.config”,可實現寫入。