在Phaser中新增遊戲動畫很容易。動畫使電子遊戲角色栩栩如生。將動畫融入遊戲的一種方法是為角色的移動設定動畫。你甚至可以給他們一個空閒狀態的動畫,將執行時,球員沒有任何移動。這會讓你的角色更有個性。
你需要對Phaser有一個基本的瞭解才能使用動畫。如果您不熟悉Phaser,請先從基本的遊戲教程開始,然後再繼續。本教程將建立在這些基礎之上。
首先,建立一個具有可移動角色的遊戲。在我們的示例中,我們將從用箭頭鍵移動的塊開始。以下是起始程式碼:
var config = { type: Phaser.AUTO, backgroundColor: 0xCCFFFF , width: 600, height: 600, physics: { default: 'arcade' }, scene: { preload: preload, create: create, update: update }}; var gamePiece;var keyInputs;var game = new Phaser.Game(config); function preload(){ this.load.image('gamePiece', 'img/gamePiece.png');} function create(){ gamePiece = this.physics.add.sprite(270, 450, 'gamePiece'); keyInputs = this.input.keyboard.createCursorKeys();} function update(){ if(keyInputs.left.isDown){ gamePiece.x = gamePiece.x - 2; } if(keyInputs.right.isDown){ gamePiece.x = gamePiece.x + 2; } if(keyInputs.up.isDown){ gamePiece.y = gamePiece.y - 2; } if(keyInputs.down.isDown){ gamePiece.y = gamePiece.y + 2; }}此程式碼將建立一個可以在藍色背景周圍移動的遊戲塊。為簡單起見,該示例僅使用橙色塊作為遊戲角色。看起來是這樣的:
第一步是建立動畫。有許多方法來建立動畫,但這是超出了我們在這裡可以涵蓋。出於我們的目的,將動畫儲存為精靈表非常重要。
相關:最好的畫素藝術工具,創造畫素完美的藝術品
精靈圖紙是包含一組動畫幀的單個影象檔案。動畫中的每一幀都放在它後面的一幀旁邊。每個框架的大小必須相同。動畫程式將根據單個幀的尺寸將影象分割成單個幀。
影象儲存在一個數組中。與所有陣列一樣,這意味著第一個影象位於零位置。因此,在上面的示例中,向下動畫從0開始,到3結束。左邊的動畫從四點開始,到七點結束。
載入sprite表類似於在Phaser中載入影象。但是,您的程式將需要有關影象檔案的更多資訊。之前,我們在影象中載入了以下文字:
this.load.image('gamePiece', 'img/gamePiece.png');不過,Sprite表還需要一些引數。我們還必須指定框架的尺寸。因此,要載入sprite表,我們需要按如下方式調整程式碼:
this.load.spritesheet('gamePiece', 'img/spriteSheet.png', { frameWidth: 60, frameHeight: 60});程式碼非常相似。最大的區別是我們添加了第三個引數,用於指定動畫幀的寬度和高度。在這種情況下,幀是60畫素乘60畫素。
本例將使用一個簡單的sprite表。我們已經添加了一個箭頭和閃爍的指示燈的遊戲精靈。箭頭將指向我們的精靈移動的方向,指示燈將朝這個方向閃爍。如果角色沒有移動,動畫將在所有幀中迴圈。
在為角色設定動畫之前,我們必須先建立動畫。我們已經上傳了精靈表,現在我們要說哪些幀在動畫中。要建立動畫,請將以下程式碼新增到create函式:
this.anims.create({ key: "up", frameRate: 2, frames: this.anims.generateFrameNumbers("gamePiece", {start: 0, end:2}), repeat: -1});上面是向上方向的動畫。
您需要為每個方向和空閒狀態建立動畫。
相關:PowToon使建立動畫影片和幻燈片變得很容易
向角色新增動畫非常容易。棘手的部分是動畫之間的轉換。可以在“建立”函式中設定開始動畫。
gamePiece = this.add.sprite(270, 450, 'gamePiece');gamePiece.anims.play("spin");第一行建立播放器。這和我們以前用一個影象建立一個精靈是一樣的。第二行將動畫設定為旋轉。自旋是一個空閒的動畫,它將在0到11幀的所有幀之間迴圈。
現在,重新載入遊戲時,空閒動畫將開始播放。但是,你會注意到,即使你移動了你的角色,它仍然會繼續播放。基於運動設定動畫有點棘手。
誘惑是改變動畫時,球員按下按鈕,就像我們做了設定運動。這種方法的問題是,我們檢查播放器是否在更新函式中按下了一個鍵。update函式每幀執行一次。如果我們把一個動畫放在那裡,動畫會在播放器按下鍵的每一幀重新開始。
要解決這個問題,我們需要使用不同的方法。我們不想檢查一把鑰匙是否壞了,而是想知道一把鑰匙是否壞了。JustDown只有在第一次按下時才是真的。如果拿著鑰匙,那就不是真的。如果我們用JustDown設定動畫,動畫將不會重置每一幀。
您需要為要在create函式中監視的鍵輸入建立一個變數:
leftKey = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.LEFT);rightKey = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.RIGHT);upKey = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.UP);downKey = this.input.keyboard.addKey(Phaser.Input.Keyboard.KeyCodes.DOWN);然後,您需要檢查是否在更新功能中按下了該鍵:
if(Phaser.Input.Keyboard.JustDown(upKey)){ gamePiece.anims.play("up");}現在,遊戲將更改為向上動畫一旦向上鍵是第一次按下。您需要為每個方向鍵編寫一個類似的if語句。
我們還有最後一個修改要做。現在,當播放器停止按鍵時,最後一個動畫繼續播放。我們希望它回到我們的閒置動畫。為此,我們使用JustUp方法。與JustDown類似,它會在玩家釋放一個鍵時觸發。
if(Phaser.Input.Keyboard.JustUp(upKey)){ gamePiece.anims.play("spin");}一旦播放器停止按向上鍵,它會將動畫設定回我們的空閒旋轉動畫。您需要為每個方向鍵編寫一個類似的語句。
要檢視最終程式碼,請轉到pastebin。
在Phaser中建立動畫與使用靜態影象沒有太大區別。但它會把你的遊戲發展到一個新的水平!Phaser使新增動畫變得簡單,因此您可以集中精力在困難的部分:**動畫!
建立自己的sprite表時,不要忘記以下指標:
...據***,耶穌並沒有被釘在十字架上。***說耶穌不是從死亡中復活的。根據***,耶穌不是上帝的兒子。***說,透過真誠的工作,拯救是可能的。根據***,魔鬼不是墮落的天使,而是墮落的精靈。***說人不是罪人,但他基本上是好人...
... 愛奧尼亞還附帶了一個名為Creator的工具,它可以讓你使用拖放方式為你的移動應用程式建立和設計介面。這比用HTML或類似HTML的標記語言拼湊UI要容易得多。因此,離子是偉大的新手。 ...
...是《成長家園》的續集,這是育碧的一款實驗遊戲,可以讓你控制角色的精確動作。《成長》比它的前任更開放。第二款XboxOne遊戲是Runbow,一款專注於多人聚會活動的賽車平臺遊戲。 ...
...但仍然是強大的,並收到更新。物理有點不尋常,可能會讓你發笑。但是有什麼比當一隻山羊,用頭撞一個人去尋找金盃或美味的糖更有趣呢? ...
...之一,現在已經上市。這個來自育碧的第三人稱鬥士可以讓你從三個派系中選擇一個——騎士、維京人或武士——加入線上戰鬥,為你的團隊贏得地盤。 ...
...組。這個很棒的火車模擬器在房間裡放了一個虛擬玩具,讓你和你的孩子以任何你認為合適的方式建立虛擬火車軌道。 ...
是時候讓你每週一次的科技新聞變得簡單了,這是一個非常有用的播客,一個針對科技恐懼症的科技播客。這一次,迪士尼+內容公司宣佈,如何在黑色星期五之前恢復你的Mac電腦、頂級陰謀網站和亞馬遜價格追蹤系統。 ...
... 2019年愚人節,谷歌讓你在谷歌地圖上玩蛇。然後,同一個月晚些時候,谷歌在谷歌搜尋中隱藏了一個復仇者終場復活節彩蛋。現在,谷歌已經在搜尋中隱藏了另一個復活節彩蛋,這一個很可...
...流.io在主頁的圖表上提供各種洪流的搜尋趨勢。這些資料讓你對世界上任何時刻最流行的洪流有了一些新的認識。 ...
...害怕經常使用你的能力。例如,生命線的治療無人機可以讓你的盟友保持健康,而不需要使用貴重的注射器。探路者的終極創造了一條拉鍊線,整個團隊可以使用它快速地遍歷地圖。 ...