quick-cocos2d-x學習筆記【6】——製作自訂效果按鈕菜單,quickcocos2d

來源:互聯網
上載者:User

quick-cocos2d-x學習筆記【6】——製作自訂效果按鈕菜單,quickcocos2d

前面提到的是基本的菜單使用,還是很容易的,不過我們在商業產品中,經常看到的按鈕都是非常好看,不光光是圖片做得精美,而且動畫效果也很棒。Candy Crash都玩過吧,看它們那個按鈕,真的像果凍一樣,效果確實很贊,所以我們也來做個,當然不是它那個效果,而且點擊之後有一個抖動的效果。像這樣,



好了,開始做個吧,我這個也是搬了一下coinflip中的按鈕代碼,算是學習一下。

建立一個views檔案夾,裡面建立一個MyButton.lua檔案,這個就是我們的自訂按鈕類了。實現的原理比較簡單,在ui.newImageMenuItem的table參數中,有圖片,回呼函數等參數,所以我們的做法就是在傳入這些參數之後,我們在內部修改一些東西就可以了。等於quick給圖片按鈕封裝了一次,我們自己再封裝一下。

local MyButton = {}function MyButton.new(params)local button = nilbutton = ui.newImageMenuItem(params)return buttonendreturn MyButton

這就封裝了一下quick中的ui.newImageMenuItem,下面做的就是把params的參數捕獲,處理我們的效果之後再傳給ui.newImageMenuItem中的參數。

function MyButton.new(params)local button = nillocal listener = params.listenerparams.listener = function (tag)                --do things       listener(tag)        endbutton = ui.newImageMenuItem(params)return buttonend

上面這段代碼中,我們將傳入的回呼函數先用listener變數儲存起來,然後在listener參數中處理一些事情,最後記得在裡面調用之前傳入的回呼函數即可。所以現在還沒添加效果代碼,為了後面大家能看得更清楚些。


接下來,我們就來添加一下之前展示的效果了。

params.listener = function (tag)        local function zoom1(offset, time, onComplete)            local x, y = button:getPosition()            local size = button:getContentSize()            local scaleX = button:getScaleX() * (size.width + offset) / size.width            local scaleY = button:getScaleY() * (size.height - offset) / size.height            transition.moveTo(button, {y = y - offset, time = time})            transition.scaleTo(button, {                scaleX     = scaleX,                scaleY     = scaleY,                time       = time,                onComplete = onComplete,            })        end        local function zoom2(offset, time, onComplete)            local x, y = button:getPosition()            local size = button:getContentSize()            transition.moveTo(button, {y = y + offset, time = time / 2})            transition.scaleTo(button, {                scaleX     = 1.0,                scaleY     = 1.0,                time       = time,                onComplete = onComplete,            })        end        button:getParent():setEnabled(false)  --先關閉父類menu的功能        zoom1(40, 0.08, function()            zoom2(40, 0.09, function()                zoom1(20, 0.10, function()                    zoom2(20, 0.11, function()                        button:getParent():setEnabled(true)                        listener(tag)                    end)                end)            end)        end)end

zoom1和zoom2是兩個效果函數,主要是move和scale兩個動作,在做效果之前,首先關閉父類的menu功能,這樣防止在這個menu item還沒做完動作又被玩家點上別的按鈕上了,執行一系列的縮放效果之後,再開啟menu功能,最後執行之前的回呼函數,這樣一個動畫按鈕就新鮮出爐了。


趕緊放到menu中測試一下,

local Button = import("..views.MyButton") --匯入Buttonlocal MyScene = class("MyScene", function ()return display.newScene("myscene")end)function MyScene:ctor()local button = Button.new({image = "icon.png",listener = function ()print("click")end,x = display.cx,y = display.cy})local menu = ui.newMenu({button})self:addChild(menu)endreturn MyScene

這樣就可以添加上去了,還可以和quick封裝的其他按鈕一起放在menu管家中。

好了,大家都可以自己做個喜歡的效果了。




java jdk6 學習筆記——完整中文簡體版

已發,765747369@qq.com
 
教一下,vc++60中,怎自訂workspace表單中右鍵菜單的按鈕詳情多謝指教

VC6的 Bug,我也遇到幾次了
你可以在View標頭檔 先加 /* 標記為注釋 再刪除;
或者,
在 FileView 中刪除標頭檔,再加入;
再者,
在任意地方斷行符號儲存就可以了(但有時候貌似不行)。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.