特效 (Effect)

自訂特效

建立特效檔案

首先我們要先建立一個特效的模組檔案,這個檔案引用 Effect 模組,並且必須要實作 effect:show() 的方法:

local Effect = require("Effect")
local MyEffect = {}
MyEffect.new = function(options)
    local effect = Effect.new(options)

    function effect:show()
    end

    return effect
end
return MyEffect

新增特效動畫

這裡用像素風格的動畫風格,它位於 pixel-effect 的 spriteshhet 中,建立動畫的方式很簡單,我們只要使用 Sprite.newAnimation() 方法即可,其中 name 為該動畫的名稱,frames 則為影格,time 則為整體播放時間,loopCount 為重複播放的次數,當它為 0 時表示重複播放。新增完後將它加入特效中:

        local sprite = Sprite["pixelEffect"].newAnimation({
            {
                name = "start",
                frames = {
                    "2/1",
                    "2/2",
                    "2/3",
                    "2/4",
                    "2/5",
                    "2/6",
                },
                time = 600,
                loopCount = 0   
            }
        })
        self:insert(sprite)

播放動畫

播放動畫要先設定要播放的動畫名稱,接著使用 sprite:play() 播放:

        sprite:setSequence("start")
        sprite:play()

播放音效

如果特效有聲音,可以加入音效:

    sfx:play("explosion2")

完整程式碼

--level.myLevel.MyEffect
local Effect = require("Effect")
local GameObject = require("GameObject")
local Sprite = require("Sprite")
local gameConfig = require("gameConfig")
local move = require("move")
local sfx = require("sfx")
local MyEffect = {}
MyEffect.new = function(options)
    local effect = Effect.new(options)

    function effect:show()
        local sprite = Sprite["pixelEffect"].newAnimation({
            {
                name = "start",
                frames = {
                    "2/1",
                    "2/2",
                    "2/3",
                    "2/4",
                    "2/5",
                    "2/6",
                },
                time = 600,
                loopCount = 0   
            }
        })

        self:insert(sprite)
        sprite.xScale = 5
        sprite.yScale = 5
        sprite:setSequence("start")
        sprite:play()
        sfx:play("explosion2")
    end

    return effect
end
return MyEffect

使用自訂的特效

要使用自訂的特效只需要將它引用,使用 Effect.new() 方法,帶入特效的持續時間以新增特效實體並加入場景之中。接著使用 effect:show() 方法 播放特效,特效會在時間結束後自行回收,你不需要特別去處理特效的回收。

--levels.myLevel.level_custom_effect
local gameConfig = require("gameConfig")
local Sublevel = require("Sublevel")
local MyEffect = require("levels.myLevel.MyEffect")
local util = require("util")
local myLevel = Sublevel.new("9999999-056", "custom effect", "author name", {duration = 1800})

function myLevel:addEffect(x)
    local effect = MyEffect.new({ time = 500})
    self:insert(effect)
    --place the effect
    effect.x = x
    effect.y = -effect.height/2
    effect:start()
    effect:enablePhysics()
    --move the effect with the stage speed
    effect:setScaleLinearVelocity( 0, gameConfig.stageSpeed )
    return effect
end

function myLevel:show(options)
    self:addEffect(gameConfig.contentWidth*0.25)
    self:addTimer(1000, function ()
        self:addEffect(gameConfig.contentWidth*0.5)
    end)

    self:addTimer(1500, function ()
        self:addEffect(gameConfig.contentWidth*0.75)
    end)

    self.enemy = enemy
end

return myLevel

results matching ""

    No results matching ""