裝備 (Gear)
本模板允許玩家角色攜帶一個裝備,並且提供開發介面讓開發者可以自訂角色裝備,這裡的角色裝備即是環繞在角色周圍的物體,下圖中的角色攜帶了一個會輔助射擊的裝備,俗稱副砲。這裡我們會示範如何建立角色的副砲。
建立裝備
建立裝備實體
建立裝備實體必須引用裝備模組:Gear.lua
:
local Gear = require("Gear")
並使用 Gear.new
方法建立裝備實體:
local myGear = Gear.new(options)
設定裝備屬性
接著我們必須設定裝備的屬性: dir
是裝備指向的方向,如果你未來需要旋轉你的裝備,指定這個屬性會讓你方便許多。最重要的屬性是 gearId
,gearId
是裝備的識別碼,相同的 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