子彈 (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)

results matching ""

    No results matching ""