子彈 (Bullet)
自訂子彈
不可銷毀子彈
不可銷毀子彈不會因為其他的子彈而被摧毀,像是雷射
建立子彈檔案
local Bullet = require("Bullet")
Laser.new = function(options)
local laser = Bullet.new(options)
return laser
end
return Laser
加入圖像
local sprite = Sprite["expansion-6"].new("Lasers/Rings/5")
laser:insert(sprite)
開啟物理引擎
laser:enablePhysics()
注意只要是 Bullet
類別創造出來的物件,都會開啟自動銷毀機制,所以你不用特別去處理用這個方式創造出來的子彈回收。
完整程式碼
--levels.myLevel.MyBullet.lua
local Bullet = require("Bullet")
local Sprite = require("Sprite")
local Laser = {}
Laser.new = function(options)
local laser = Bullet.new(options)
local sprite = Sprite["expansion-6"].new("Lasers/Rings/5")
laser:insert(sprite)
laser:enablePhysics()
return laser
end
return Laser
可銷毀子彈
可銷毀子彈會因為其他的子彈而被銷毀,如果這個子彈是敵人專用的,例如說:敵人發射的飛彈可以摧毀玩家,玩家的子彈也可以摧毀敵人的飛彈,我們可以透過一個技巧達成這樣的效果,即是把敵人當成是子彈發射出去:
建立子彈檔案
local Enemy = require("Enemy")
local MyBullet = {}
MyBullet.new = function(options)
local bullet = Enemy.new(options)
return bullet
end
return MyBullet
加入圖像
local sprite = Sprite.new("Missiles/2")
bullet:insert(sprite)
增加屬性
由於這個子彈其實是敵人,所以我們可以設定他的血量與分數資訊:
bullet.hp = 1
bullet.score = 1
開啟物理引擎並啟動自動銷毀機制
注意用此種方式建立的子彈,本質是敵人,所以你要記得處理回收的機制:
bullet:enablePhysics()
bullet:autoDestroyWhenInTheScreen()
完整程式碼
--level.myLevel.MyDestructibleBullet.lua
local Enemy = require("Enemy")
local Sprite = require("Sprite")
local MyBullet = {}
MyBullet.new = function(options)
local bullet = Enemy.new(options)
local sprite = Sprite.new("Missiles/2")
bullet.hp = 1
bullet.score = 1
bullet.name = "bullet"
bullet:insert(sprite)
bullet:enablePhysics()
bullet:autoDestroyWhenInTheScreen()
return bullet
end
return MyBullet
使用自訂的子彈
使用自訂的子彈只需要透過既有的發射子彈機制即可:
--myEnemy:setDefaultBullet("levels.myLevel.MyBullet")
myEnemy:setDefaultBullet("levels.myLevel.MyDestructibleBullet")
myEnemy:addTimer(1000,
function()
myEnemy:shoot({
x = myEnemy.x + part1.width/2 ,
degree = myEnemy.dir,
speed = 500 * gameConfig.scaleFactor
})
end
, -1)
你也可以自行建立子彈的實體:
對敵人的子彈
local MyBullet = require("MyBullet")
local bullet = MyBullet.new({
fireTo = "enemy"
--fireTo = "enemy"
})
bullet.damage = 5
bullet:setScaleLinearVelocity(-500, 0)
對玩家的子彈
local MyBullet = require("MyBullet")
local bullet = MyBullet.new({
fireTo = "character"
})
bullet.damage = 1
bullet:setScaleLinearVelocity(500, 0)