Phaserjs基礎教程第八節 Weapon物件

2021-08-15 01:33:21 字數 2623 閱讀 7485

首先,我們先來了解一下weapon物件:weapon物件也可以稱為weapon外掛程式,它提供了快速建立和管理子彈池的能力。

**(weapons)射擊出子彈(phaser.bullet物件),這些子彈實際上是有一些額外屬性的sprite物件,並且這些子彈還支援arcade物理引擎,不過暫時不支援p2引擎。

所有的子彈都被建立在乙個叫weapon.bullets的組(group)中,所以組物件支援的屬性和方法,子彈組也都支援。

子彈還可以有自己的紋理和動畫,你也可以控制它的射擊頻率、移動速度、射擊角度等等屬性,甚至你還可以給它們新增重力。

上面的內容幾乎都是官網的翻譯,下面我們先來看下面的**,如果快速地建立乙個會射擊的小飛機:

var game = new phaser.game(800, 600, phaser.canvas, 'phaser-example', );

function preload()

var sprite;

var weapon;

var cursors;

var firebutton;

function create()

function update()

else if (cursors.right.isdown)

//按下空格鍵時,**

if (firebutton.isdown)

}function render()

這個例子中,我們建立了乙個會射擊的小飛機,它只能左右移動,並且它每次只能發射一顆子彈,如果你擔心它的子彈數量太少,那麼修改下weapon = game.add.weapon(1, 'bullet');的數量即可,這個數量其實是子彈池的數量,同時也意味著同一時間螢幕上最多有這個數量的子彈數。

上面的例子中,視窗中只有一顆子彈未免太單調了,不僅如此,子彈的顏色也太單一了,下面我們就再來看乙個例子來熟悉weapon的各種屬性:

var game = new phaser.game(800, 600, phaser.canvas, 'phaser-example', );

function preload()

var sprite;

var weapon;

var cursors;

var firebutton;

function create()

function update()

else

if (cursors.left.isdown)

else if (cursors.right.isdown)

else

if (firebutton.isdown)

//是否換向顯示

game.world.wrap(sprite, 16);

}function render()

看過了兩個例子,我們大概就知道了其中幾個屬性的含義了,不過還是要強調一下:

bulletspeed:子彈初速度(移動速度)。

firerate:射擊頻率(子彈出現的頻率,單位毫秒,即多少毫秒出現一顆子彈)。

tracksprite:上面已經說過,子彈的偏移量。

autofire:這個簡單,是否自動發射子彈。

sprite.body.drag.set(70):api的翻譯太過繞口,你直接理解成剎車速度就行,也就是停止時的速度減小量(每秒),這是乙個物件(和scale、anchor等一樣),方法接收兩個引數,比如這裡只寫了乙個,其實也等於sprite.body.drag.set(70,70),之前沒有講到這個,這裡補充下。

sprite.body.maxvelocity.set(200):(小飛機)最大速度設定。

angularvelocity:角速度,每秒旋轉的角度。

上面的**只是發射一顆子彈,如果你想一次發射多顆子彈,也是可以的,只不過這些子彈還是直線彈道,雖然單個子彈可以設定便宜角度,但是沒有辦法像散彈槍一樣,發射扇形的子彈(我研究了兩個小時,在不修改原始碼的情況下沒有辦法實現,希望以後有這個功能吧),發射多顆子彈的**也很簡單,看下面的**:

var game = new phaser.game(800, 600, phaser.canvas, 'phaser-example', );

function preload()

var sprite;

var weapon;

var cursors;

var firebutton;

var bulletpositions;

function create() ,,,

,,

];}function update()

else if (cursors.right.isdown)

if (firebutton.isdown)

}function render()

步驟其實很簡單,建立多顆子彈,開啟多發,設定各個子彈的偏移量,然後就ok了,是不是很簡單?

還有乙個屬性需要了解下,就是weapon的bulletanglevariance屬性,我在上面的**中也注釋過了,它給所有的子彈提供了乙個隨機的發射角度,而且每次重新整理都是相對於當前的位置隨機的,所以會出現一條隨機的彈道,只是很遺憾,我還是沒有找到在不修改源**的情況下發射扇形子彈的方法。

第八節 函式

函式的特性 減少 重複 使程式變得可擴充套件 使程式變得易維護 乙個函式只做一件事情 變數作用域 python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在 賦值的。變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。python的作用域一共有4種,分別是 以 l...

編譯原理 第八節

分為兩大類 自頂向下分析 和 自底向上分析 其中前者又細分為 遞迴下降分析法 包含回溯的遞迴下降分析法和不含回溯的遞迴下降分析法 和非遞迴的 分析法 ll分析法 後者分為算符優先分析法和lr分析法。思想 從語法的開始符號出發,試探使用不同產生式,尋找匹配於輸入符號串的推導。或者說,從對應文法開始符號...

python基礎第八節 函式(上)

五 作業 函式是帶名字的 塊,用於完成具體的工作。要執行函式定義的特定的任務,可呼叫該函式。需要在程式中多次的執行同一項任務時,無序反覆編寫完成該任務的 只需要呼叫執行該任務的函式,讓python執行其中的 即可。你將發現,通過使用函式,程式編寫 閱讀 測試和修復起來更加容易。定義乙個函式,可以使用...