以上,就是本次教學,謝謝大家。

 

 

 


老闆你有事嗎?


好的,因為最近工作的關係,遊戲開發再度停擺,不過停下來也算是好事,可以仔細想想程式架構和遊戲的內容是不是還需要做調整,基本上會再度重構一次框架吧…e04好痛苦的感覺。

本次要帶的一個小東西是數值跳動範例,基本上大部分會運用在戰鬥場景,例如正妹補師幫你加了充滿元氣的血量,或是敵人狠狠砍了你一刀扣損的血量,有一部分的遊戲會用彈跳出來的效果顯示,幾個重點如下:

1.使用toBack讓物件往後移動,相對的toFront是將物件往前移動。
2.善用LUA強大的TABLE
3.將物件加入event,本次用到的還是touch。
4.timer。
5.transition裡面的onComplete以及transition兩大參數

做出這個效果的概念其實很簡單,整理如下:

1.產生一組數值亂數。
2.將產生的亂數擷取出來換成圖片顯示。
3.排好圖片位置。
4.將圖片層次(Z-order),移到按鈕後面。
5.加入touch事件。
6.使用transition改變物件的Y軸,並且放入transitiont產生運動效果
7使用transition.onComplete,在動作完成時接著後續動作

以下,就是本次程式的範例,下載點在這

local btn = display.newImage( 'btn.png', display.contentCenterX, display.contentCenterY)
local controller = {}

local function jump()
 controller.index = 1

local function onComplete1(self)
 transition.to( self, { time = 100, alpha = 0 })
 end

local function onComplete(self)
 local delay = 100 + (self.index - 1) * 30
 transition.to( self, { time = 100, delay = delay, y = display.contentCenterY, onComplete = onComplete1 })
 end

local function listener( event )
 local time = 300 - (controller.index - 1) * 20
 transition.to( controller.imgs[controller.index], { time = time, y = controller.imgs[controller.index].y - 200, onComplete = onComplete, transition=easing.outCirc } )
 controller.index = controller.index + 1
 end
 
 timer.performWithDelay( 100, listener, controller.lengths ) 
end

local function punch()
 controller = {}
 local rand = tostring(math.random(100,9999))
 local lengths = string.len(rand)
 local t = {}
 for i = 1,lengths do
 local a = string.sub(rand,i,i)
 local img
 local imb_x = btn.x - btn.width * 0.5 + 30
 if (a == '1') then img = display.newImage('a1.png', imb_x, btn.y) 
 elseif (a == '2') then img = display.newImage('a2.png', imb_x, btn.y)
 elseif (a == '3') then img = display.newImage('a3.png', imb_x, btn.y)
 elseif (a == '4') then img = display.newImage('a4.png', imb_x, btn.y)
 elseif (a == '5') then img = display.newImage('a5.png', imb_x, btn.y)
 elseif (a == '6') then img = display.newImage('a6.png', imb_x, btn.y)
 elseif (a == '7') then img = display.newImage('a7.png', imb_x, btn.y)
 elseif (a == '8') then img = display.newImage('a8.png', imb_x, btn.y)
 elseif (a == '9') then img = display.newImage('a9.png', imb_x, btn.y)
 elseif (a == '0') then img = display.newImage('a0.png', imb_x, btn.y) end
 img:toBack()
 img.index = i
 table.insert(t,img)
 end

controller.lengths = lengths
 controller.imgs = t

for k, v in pairs(t) do
 v.x = v.x + (k - 1) * v.width
 end

jump()
end


function btn:touch( event )
 if ( event.phase == "began" ) then 
 -- Set touch focus
 display.getCurrentStage():setFocus( self )
 self.isFocus = true
 self.width = self.width * 1.1
 self.height = self.height * 1.1
 elseif ( self.isFocus ) then
 if ( event.phase == "moved" ) then
 elseif ( event.phase == "ended" or event.phase == "cancelled" ) then
 -- Reset touch focus
 display.getCurrentStage():setFocus( nil )
 self.isFocus = nil
 self.width = self.width / 1.1
 self.height = self.height / 1.1
 end
 punch()
 end
 return true
end
btn:addEventListener( "touch", btn )

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

Related Posts

Corona sdk 實作

CORONA SDK 音樂播放

使用可樂的好處就是比一般的遊戲引擎還快上手,一是不需要做太多設定,二是 Read more…

Corona sdk 實作

Corona SDK影格動畫(2)

因為工作的關係,很久很久沒有更新網誌了,目前卡牌部分已經暫停下來,在此 Read more…

Corona sdk 實作

Corona SDK 伺服器讀取資料(文字檔篇)

其實這陣子工作之餘,也忙著開始找尋美術,所以在巴哈發了篇文,原本想說資 Read more…