裝備 (Gear)

本模板允許玩家角色攜帶一個裝備,並且提供開發介面讓開發者可以自訂角色裝備,這裡的角色裝備即是環繞在角色周圍的物體,下圖中的角色攜帶了一個會輔助射擊的裝備,俗稱副砲。這裡我們會示範如何建立角色的副砲。

建立裝備

建立裝備實體

建立裝備實體必須引用裝備模組:Gear.lua

local Gear = require("Gear")

並使用 Gear.new 方法建立裝備實體:

    local myGear = Gear.new(options)

設定裝備屬性

接著我們必須設定裝備的屬性: dir 是裝備指向的方向,如果你未來需要旋轉你的裝備,指定這個屬性會讓你方便許多。最重要的屬性是 gearIdgearId 是裝備的識別碼,相同的 gearId 會被模板當作是相同的裝備,由於這個模板目前限制角色只能有一個裝備,當角色取得和目前裝備識別碼不同的裝備時,會將目前的裝備卸下,換上新的裝備。

    myGear.dir = 90
    myGear.gearId = "myGear_123456"

加入裝備圖像

不要忘記現在的裝備並沒有包含圖像,這裡我們加入兩個飛船當作是裝備中的砲管:

    local gun1 = Sprite["expansion-4"].new("Ships/38")
    local gun2 = Sprite["expansion-4"].new("Ships/38")
    myGear:insert(gun1)
    myGear:insert(gun2)

定位裝備圖像

透過 options.receiver 我們可以取得獲得裝備的角色實體,透過角色實體我們可以定位裝備的圖像,讓槍管位於角色的兩方:

    local receiver = options.receiver
    gun1.x = -receiver.width
    gun2.x = receiver.width

設定裝備功能

由於裝備模組是繼承自敵人模組,它擁有敵人模組全部的方法,首先我們先設定裝備要發射的子彈:

myGear:setDefaultBullet("bullets.Laser")

並設定指彈發射的頻率,起始位置與速度,就如同我們在設置敵人子彈的時候一樣,讓然你也可以套用發射敵人子彈的經驗,換成是追蹤導彈等等:

    myGear:addTimer(1000, function()
        myGear:shoot({
            x = myGear.x + receiver.width,
            degree = 90,
            speed = 100 * gameConfig.scaleFactor 

        })
        myGear:shoot({
            x = myGear.x - receiver.width,
            degree = 90,
            speed = 100 * gameConfig.scaleFactor
        })
    end, -1)

全部程式碼

--/levels/myLevel/MyGear.lua
local Gear = require("Gear")
local Sprite = require("Sprite")
local gameConfig = require("gameConfig")

local MyGear = {}

MyGear.new = function(options)
    local myGear = Gear.new(options)
    myGear.dir = 90
    myGear.gearId = "myGear_123456"

    local gun1 = Sprite["expansion-4"].new("Ships/38")
    local gun2 = Sprite["expansion-4"].new("Ships/38")

    local receiver = options.receiver

    myGear:insert(gun1)
    myGear:insert(gun2)
    gun1.x = -receiver.width
    gun2.x = receiver.width

    myGear:setDefaultBullet("bullets.Laser")

    myGear:addTimer(1000, function()
        myGear:shoot({
            x = myGear.x + receiver.width,
            degree = 90,
            speed = 100 * gameConfig.scaleFactor 

        })
        myGear:shoot({
            x = myGear.x - receiver.width,
            degree = 90,
            speed = 100 * gameConfig.scaleFactor
        })
    end, -1)

    return myGear
end
return MyGear

穿上自訂裝備

建立好裝備後,我們要讓角色穿上它,這裡我們透過建立自訂道具的方式,在角色獲得道具的同時,穿上裝備:

    function item:mentalEffect(receiver)
        receiver:addGear({
            gearClass = "levels.myLevel.MyGear",
            gearOptions = {

            },
            x = 0,
            y = 0
        })
    end

要讓角色穿上裝備,必須使用角色中的 addGear() 方法,穿上的裝備會在角色死亡時自動脫落。gearClass 是裝備的模組,gearOptions 是裝備建立時的參數,x, y 則是裝備中心與角色中心的相對位置。

全部程式碼

--/levels/myLevel/MyGearItem.lua
local gameConfig = require("gameConfig")
local Item = require("Item")
local Effect = require("effects.PixelEffect1")
local Sprite = require("Sprite")

local MyItem = {}

MyItem.new = function(options)
    local item = Item.new()
    local sprite = Sprite["expansion-1"].new("Items/105")
    item:insert(sprite)
    item.score = 5
    item:enablePhysics()

    function item:needKeep(receiver)
        return false
    end

    function item:mentalEffect(receiver)
        receiver:addGear({
            gearClass = "levels.myLevel.MyGear",
            gearOptions = {

            },
            x = 0,
            y = 0
        })
    end

    return item
end
return MyItem

results matching ""

    No results matching ""