phaser學習總結之phaser入門教程

前言

最近公司作項目的時候正好使用到phaser,在這裏作一下本身整理出來的一些心得,方便你們參考,phaser這一個遊戲引擎一般是作2d遊戲的,入門也很是簡單,只需你會一點的javascript,可是你想作一個比較完美的遊戲的話,那麼光靠一點點的javascript是遠遠不夠的,本篇博客將快速帶你入門phaser。javascript

phaser簡介

phaser是一款快速,免費及開源HTML5遊戲框架,它支持WebGL和Canvas兩種渲染模式,能夠在任何web瀏覽器環境下運行,遊戲能夠經過第三方工具轉爲iOS、Android 支持的 Native APP,容許使用 JavaScript 和 TypeScript 進行開發。html

phaser核心

語法:new Game(width, height, renderer, parent, state, transparent, antialias, physicsConfig)

phaser中的一切都是從Game類開始,因此咱們暫時將Game類看成phaser的中心吧!當你new了一個Game以後,game中的不少屬性就有了,phaser的核心能夠用以下這張圖表示。java

這裏咱們常用的對象有load,time,world,input,camera。git

入門教程

建立phaser對象

(1):建立phaser對象方式一

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>快速入門phaser</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var game=new Phaser.Game(800,600,Phaser.AUTO,'',{preload:preload,create:create,update:update});
            function preload(){
                console.log('preload');
            }
            function create(){
                console.log('create');
            }
            function update(){
                console.log('update');
            }
        </script>
    </body>
</html>

(2):建立phaser對象方式二

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>快速入門phaser<</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var game=new Phaser.Game(800,600,Phaser.AUTO);
            var main=function(game){
                this.init=function(){
                    //遊戲場景初始化
                }
                this.preload=function(){
                    //遊戲資源預加載
                }
                this.create=function(){
                    //遊戲場景建立
                }
                this.update=function(){
                    //遊戲邏輯實現
                }
                this.render=function(){
                    //遊戲自定義渲染
                }
            }
        </script>
    </body>
</html>

(3):建立phaser對象方式三

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>快速入門phaser</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var game=new Phaser.Game(800,600,Phaser.AUTO);
            game.state.add('state',state);
            game.state.start('state');
            function state(){
                this.init=function(){}
                this.preload=function(){}
                this.create=function(){}
                this.update=function(){}
                this.render=function(){}
            }
        </script>
    </body>
</html>

(4):建立phaser對象方式四

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>快速入門phaser</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var game=new Phaser.Game(800,600,Phaser.AUTO,state);
            function state(){
                this.init=function(){
                    
                }
                this.preload=function(){
                    
                }
                this.create=function(){
                    
                }
                this.update=function(){
                    
                }
                this.render=function(){
                    
                }
            }
        </script>
    </body>
</html>

(5):建立phaser對象方式五

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>快速入門phasr</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var config={
                width:800,
                height:600,
                renderer:Phaser.AUTO,
                antialias:true,
                multiTexture:true,
                state:{
                    preload:preload,
                    create:create,
                    update:update
                }
            }
            var game=new Phaser.Game(config);
            function preload(){
                
            }
            function create(){
                
            }
            function update(){
                
            }
        </script>
    </body>
</html>

在開發中,咱們常用方式五建立phaser對象,固然你也能夠根據本身的喜愛選擇,就看你是喜歡函數建立仍是對象建立。github

參數詳解

Name Type Default
width:遊戲寬度 number|string 800
height:遊戲高度 number|string 600
renderer:遊戲渲染方式 number Phaser.AUTO
parent:遊戲容器 string|HTMLElement ''
state:遊戲默認場景 object null
transparent:畫布元素是否透明 boolean false
antialias:是否開啓抗鋸齒 boolean true
physicsConfig:物理引擎配置 object null

(1):width

畫布寬度,數字或字符串類型可選參數,默認爲800,若是以字符串的形式給出,該值必須在0到100之間,爲百分比,若是沒有指定父容器,則默認爲瀏覽器窗口web

(2):height

 畫布高度canvas

(3):renderer

 指定渲染機制,值能夠是Phaser.WebGL,Phaser.Canvas,Phaser.AUTO(自動嘗試使用WebGL,若是瀏覽器或設備不支持,使用canvas)或者Phaser.HEADLESS(不進行渲染)瀏覽器

(4):parent

 想插入遊戲畫布的DOM元素,畫布的父元素,可選值爲DOM自己或者是id,若是爲空字符串,畫布將被插入到body元素中框架

(5):state

 默認的狀態對象,對象類型,能夠是null,也能夠是Phaser.state函數(初始化,預加載,建立,更新,渲染)dom

(6):transparent

 畫布背景是否透明,布爾值,默認爲false

(7):antialias

 是否繪製爲平滑紋理,布爾值,默認爲true

(8):physicsConfig

 一個物理配置對象,在Physics world建立時傳遞,對象默認爲null

注:renderer可選Phaser.AUTO,Phaser.Canvas,Phaser.WebGL

參考文檔:https://photonstorm.github.io/phaser-ce/Phaser.Game.html

中文網:http://www.phaserengine.com/

phaser小站:https://www.phaser-china.com/example-detail-422.html

社區:http://club.phaser-china.com/

實例解析

接下來咱們經過phaser實現一個小遊戲以及快速入門,見識下phaser開發遊戲的功能有多麼的強大,須要說明的是,這個就是phaser官方入門的案例,廢話很少說,直接上源碼。

(1):建立遊戲和添加場景

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>phaser入門小遊戲</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var config={
                width:800,
                height:600,
                renderer:Phaser.AUTO,
                antialias:true,
                multiTexture:true,
                state:{
                    preload:preload,
                    create:create,
                    update:update,
                }
            }
            var game=new Phaser.Game(config);
            function preload(){
                //加載資源
            }
            function create(){
                //對象的建立及初始化
            }
            function update(){
                //遊戲主循環
            }
        </script>
    </body>
</html>

 在這裏,咱們已經建立了遊戲場景和加載了遊戲場景,可是咱們看到一片黑的,接下來咱們加點東西。

(2):資源加載

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>phaser入門小遊戲</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var config={
                width:800,
                height:600,
                renderer:Phaser.AUTO,
                antialias:true,
                multiTexture:true,
                state:{
                    preload:preload,
                    create:create,
                    update:update,
                }
            }
            var game=new Phaser.Game(config);
            function preload(){
                //加載資源
                game.load.image('sky','../../assets/sky.png');
                game.load.image('ground','../../assets/star.png');
                game.load.image('star','../../assets/star.png');
                game.load.spritesheet('dude','../../assets/dude.png',32,48);
            }
            function create(){
                //對象的建立及初始化
                game.add.sprite(0,0,'star');
            }
            function update(){
                //遊戲主循環
            }
        </script>
    </body>
</html>

 咱們看到屏幕的左上角出現了一顆星星,可是仍是缺點什麼,這種效果依然不是咱們想要的效果,接下來咱們讓它更具體化。

(3):加載場地

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>phaser入門小遊戲</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var config={
                width:800,
                height:600,
                renderer:Phaser.AUTO,
                antialias:true,
                multiTexture:true,
                state:{
                    preload:preload,
                    create:create,
                    update:update,
                }
            }
            var game=new Phaser.Game(config);
            var platforms;//場地
            function preload(){
                //加載資源
                game.load.image('sky','../../assets/sky.png');
                game.load.image('ground','../../assets/platform.png');
                game.load.image('star','../../assets/star.png');
                game.load.spritesheet('dude','../../assets/dude.png',32,48); 
            }
            function create(){
                //對象的建立及初始化
                game.physics.startSystem(Phaser.Physics.ARCADE);
                game.add.sprite(0,0,'sky');    //將圖片添加到遊戲場景中
                platforms=game.add.group();
                platforms.enableBody=true;
                var ground=platforms.create(0,game.world.height-64,'ground');
                ground.scale.setTo(2,2);
                ground.body.immovable=true;
                var ledge=platforms.create(400,400,'ground');
                ledge.body.immovable=true;
                ledge=platforms.create(-150,250,'ground');
                ledge.body.immovable=true;
            }
            function update(){
                //遊戲主循環
            }
        </script>
    </body>
</html>

 在這裏咱們已經將場景加入進來了以及開啓了物理引擎,固然這只是爲後面作準備,而後咱們建立了天空,大地和兩個平板。大地和平板的位置定位,咱們是經過座標來進行的,

其中,大地和兩個平板都被加到了platforms這個組中,這個組咱們爲它啓動了物理屬性,而後咱們設置了大地和兩個平板是不能動的,這樣他們就不會因爲撞擊被改變位置。接下來,咱們來加入一個小人,這個小人也是咱們遊戲的主角。

(4):加載主角

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>phaser入門小遊戲</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var config={
                width:800,
                height:600,
                renderer:Phaser.AUTO,
                antialias:true,
                multiTexture:true,
                state:{
                    preload:preload,
                    create:create,
                    update:update,
                }
            }
            var game=new Phaser.Game(config);
            var platforms;//場地
            var player;//遊戲主角
            function preload(){
                //加載資源
                game.load.image('sky','../../assets/sky.png');
                game.load.image('ground','../../assets/platform.png');
                game.load.image('star','../../assets/star.png');
                game.load.spritesheet('dude','../../assets/dude.png',32,48);
            }
            function create(){
                //對象的建立及初始化
                game.physics.startSystem(Phaser.Physics.ARCADE);
                game.add.sprite(0,0,'sky');    //夾圖片添加到遊戲場景中
                platforms=game.add.group();
                platforms.enableBody=true;
                var ground=platforms.create(0,game.world.height-64,'ground');
                ground.scale.setTo(2,2);
                ground.body.immovable=true;
                var ledge=platforms.create(400,400,'ground');
                ledge.body.immovable=true;
                ledge=platforms.create(-150,250,'ground');
                ledge.body.immovable=true;
                //加載主角
                player=game.add.sprite(32,game.world.height-150,'dude');
                game.physics.arcade.enable(player);
                player.body.bounce.y=0.2;    //設置主角的彈性
                player.body.gravity.y=300;    //設置主角的重力
                player.body.collideWorldBounds=true;
                player.animations.add('left',[0,1,2,3],10,true);    //設置主角向左方向的序列幀
                player.animations.add('right',[5,6,7,8],10,true);    //設置主角向右方向的序列幀
            }
            function update(){
                //遊戲主循環
            }
        </script>
    </body>
</html>

 dude.png圖片

一樣是經過game.add.sprite將精靈加入進來,可是你們仔細看看dude.png這張資源圖片,這是一個幀動畫序列,裏面包含了主角左移和右移的動畫幀。咱們一樣給它開啓了物理屬性,而後設置了它的彈性和重力。player.body.collideWorldBounds = true;這句話設置了它會與邊界進行碰撞,這就是爲何主角落下的時候,到遊戲區域邊界就不會掉下去,你們能夠把這句話註釋掉再運行,看看會是什麼狀況。在這裏,咱們還爲小人添加了兩個動畫,一個是向左移動,一個是向右移動,分別指定了響應的動畫幀,這也是爲後續的動畫作準備。

(5):使主角站立平臺上

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>phaser入門小遊戲</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var config={
                width:800,
                height:600,
                renderer:Phaser.AUTO,
                antialias:true,
                multiTexture:true,
                state:{
                    preload:preload,
                    create:create,
                    update:update,
                }
            }
            var game=new Phaser.Game(config);
            var platforms;//場地
            var player;//遊戲主角
            function preload(){
                //加載資源
                game.load.image('sky','../../assets/sky.png');
                game.load.image('ground','../../assets/platform.png');
                game.load.image('star','../../assets/star.png');
                game.load.spritesheet('dude','../../assets/dude.png',32,48);
            }
            function create(){
                //對象的建立及初始化
                game.physics.startSystem(Phaser.Physics.ARCADE);
                game.add.sprite(0,0,'sky');    //夾圖片添加到遊戲場景中
                platforms=game.add.group();
                platforms.enableBody=true;
                var ground=platforms.create(0,game.world.height-64,'ground');
                ground.scale.setTo(2,2);
                ground.body.immovable=true;
                var ledge=platforms.create(400,400,'ground');
                ledge.body.immovable=true;
                ledge=platforms.create(-150,250,'ground');
                ledge.body.immovable=true;
                //加載主角
                player=game.add.sprite(32,game.world.height-150,'dude');
                game.physics.arcade.enable(player);
                player.body.bounce.y=0.2;    //設置主角的彈性
                player.body.gravity.y=300;    //設置主角的重力
                player.body.collideWorldBounds=true;
                player.animations.add('left',[0,1,2,3],10,true);    //設置主角向左方向的序列幀
                player.animations.add('right',[5,6,7,8],10,true);    //設置主角向右方向的序列幀
            }
            function update(){
                //遊戲主循環
                game.physics.arcade.collide(player,platforms);
            }
        </script>
    </body>
</html>

是否是很驚訝?要讓主角站在地上,只要在update中加上一句,game.physics.arcade.collide(player, platforms);就能夠了,這句話表示,檢測主角與platforms組的碰撞,而大地正是在platforms組中,這樣,主角就不會穿過大地了。一樣地,當主角與兩個平板碰撞時,也不會穿過了。接下來咱們讓主角運動。

(6):主角運動

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>phaser入門小遊戲</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var config={
                width:800,
                height:600,
                renderer:Phaser.AUTO,
                antialias:true,
                multiTexture:true,
                state:{
                    preload:preload,
                    create:create,
                    update:update,
                }
            }
            var game=new Phaser.Game(config);
            var platforms;//場地
            var player;//遊戲主角
            var cursors;//控制鍵
            function preload(){
                //加載資源
                game.load.image('sky','../../assets/sky.png');
                game.load.image('ground','../../assets/platform.png');
                game.load.image('star','../../assets/star.png');
                game.load.spritesheet('dude','../../assets/dude.png',32,48);
            }
            function create(){
                //對象的建立及初始化
                game.physics.startSystem(Phaser.Physics.ARCADE);
                game.add.sprite(0,0,'sky');    //夾圖片添加到遊戲場景中
                platforms=game.add.group();
                platforms.enableBody=true;
                var ground=platforms.create(0,game.world.height-64,'ground');
                ground.scale.setTo(2,2);
                ground.body.immovable=true;
                var ledge=platforms.create(400,400,'ground');
                ledge.body.immovable=true;
                ledge=platforms.create(-150,250,'ground');
                ledge.body.immovable=true;
                //加載主角
                player=game.add.sprite(32,game.world.height-150,'dude');
                game.physics.arcade.enable(player);
                player.body.bounce.y=0.2;    //設置主角的彈性
                player.body.gravity.y=300;    //設置主角的重力
                player.body.collideWorldBounds=true;
                player.animations.add('left',[0,1,2,3],10,true);    //設置主角向左方向的序列幀
                player.animations.add('right',[5,6,7,8],10,true);    //設置主角向右方向的序列幀
                
                //建立控制鍵對象
                cursors=game.input.keyboard.createCursorKeys();
            }
            function update(){
                //遊戲主循環
                game.physics.arcade.collide(player,platforms);
                //控制主角開始
                player.body.velocity.x=0;
                if(cursors.left.isDown){
                    player.body.velocity.x=-150;
                    player.animations.play('left');//播放主角向左運動的序列幀動畫
                }else if(cursors.right.isDown){
                    player.body.velocity.x=150;
                    player.animations.play('right');//播放主角向右的序列幀動畫
                }else{
                    player.animations.stop();//中止動畫
                    player.frame=4;    //小球靜止時顯示第四幀動畫
                }
                if(cursors.up.isDown&&player.body.touching.down){
                    player.body.velocity.y=-350;
                }
            }
        </script>
    </body>
</html>

咱們但願讓主角在按下方向左鍵的時候,向左移動,按下方向右鍵的時候,向右移動,爲了實現這一功能,咱們又定義了一個cursors,咱們經過cursors = game.input.keyboard.createCursorKeys();來獲取系統的鍵盤輸入對象。而後,咱們在update中,經過cursors.left.isDown來判斷用戶是否按下了鍵盤左鍵,若是按下了,咱們給主角設置一個速度,而後播放左移的動畫,方向右鍵的邏輯是同樣的。若是方向左鍵和右鍵都沒有按下,那麼咱們就經過player.frame來設置小人停在第4幀。小人的跳躍是經過方向上鍵來實現的,可是這裏有一個條件,就是小人在空中的時候,不容許跳躍,因此,加上了一個player.body.touching.down的判斷條件。

(7):加載大量星星

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>phaser入門小遊戲</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var config={
                width:800,
                height:600,
                renderer:Phaser.AUTO,
                antialias:true,
                multiTexture:true,
                state:{
                    preload:preload,
                    create:create,
                    update:update,
                }
            }
            var game=new Phaser.Game(config);
            var platforms;//場地
            var player;//遊戲主角
            var cursors;//控制鍵
            var stars;//星星
            function preload(){
                //加載資源
                game.load.image('sky','../../assets/sky.png');
                game.load.image('ground','../../assets/platform.png');
                game.load.image('star','../../assets/star.png');
                game.load.spritesheet('dude','../../assets/dude.png',32,48);
            }
            function create(){
                //對象的建立及初始化
                game.physics.startSystem(Phaser.Physics.ARCADE);
                game.add.sprite(0,0,'sky');    //夾圖片添加到遊戲場景中
                platforms=game.add.group();
                platforms.enableBody=true;
                var ground=platforms.create(0,game.world.height-64,'ground');
                ground.scale.setTo(2,2);
                ground.body.immovable=true;
                var ledge=platforms.create(400,400,'ground');
                ledge.body.immovable=true;
                ledge=platforms.create(-150,250,'ground');
                ledge.body.immovable=true;
                //加載主角
                player=game.add.sprite(32,game.world.height-150,'dude');
                game.physics.arcade.enable(player);
                player.body.bounce.y=0.2;    //設置主角的彈性
                player.body.gravity.y=300;    //設置主角的重力
                player.body.collideWorldBounds=true;
                player.animations.add('left',[0,1,2,3],10,true);    //設置主角向左方向的序列幀
                player.animations.add('right',[5,6,7,8],10,true);    //設置主角向右方向的序列幀
                //建立控制鍵對象
                cursors=game.input.keyboard.createCursorKeys();
                //加載星星
                stars=game.add.group();    //把星星先添加到組中
                stars.enableBody = true;
                for(var i=0;i<20;i++){
                    var star=stars.create(i*70,0,'star');
                    star.body.gravity.y=300;    //設置星星的重力
                    star.body.bounce.y=0.7+Math.random()*0.2;    //設置星星的彈性
                }
            }
            function update(){
                //遊戲主循環
                game.physics.arcade.collide(player,platforms);
                //星星加載相關
                game.physics.arcade.collide(stars,platforms);
                game.physics.arcade.overlap(player,stars,collectStar,null,this);
                //控制主角開始
                player.body.velocity.x=0;
                if(cursors.left.isDown){
                    player.body.velocity.x=-150;
                    player.animations.play('left');//播放主角向左運動的序列幀動畫
                }else if(cursors.right.isDown){
                    player.body.velocity.x=150;
                    player.animations.play('right');//播放主角向右的序列幀動畫
                }else{
                    player.animations.stop();//中止動畫
                    player.frame=4;    //小球靜止時顯示第四幀動畫
                }
                if(cursors.up.isDown&&player.body.touching.down){
                    player.body.velocity.y=-350;
                }
            }
            function collectStar(player,stars){
                stars.kill();//銷燬星星
            }
        </script>
    </body>
</html>

 

在create中,咱們又建立了一個stars的組,在這個組中,添加了星星,而後設置了它們的重力,隨機設置了彈性,因此它們掉落的時候,碰到平板或者地面,會彈起不一樣的高度。一樣,星星也不能穿過地面,因此在update中,添加了碰撞檢測。

還有一層碰撞檢測就是小人和星星的碰撞,當主角和星星發生碰撞的時候,須要讓星星消失,這時候,再添加碰撞檢測的時候,咱們還添加了一個回調函數collectStar,在這裏面,咱們的player和star都會做爲參數傳遞進來,經過調用star.kill();將星星銷燬。

(8):顯示分數

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>phaser入門小遊戲</title>
    </head>
    <body>
        <script src="../../js/phaser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            var config={
                width:800,
                height:600,
                renderer:Phaser.AUTO,
                antialias:true,
                multiTexture:true,
                state:{
                    preload:preload,
                    create:create,
                    update:update,
                }
            }
            var game=new Phaser.Game(config);
            var platforms;//場地
            var player;//遊戲主角
            var cursors;//控制鍵
            var stars;//星星
            var score=0;//初始分數爲0
            var scoreText;//展現分數的文本
            function preload(){
                //加載資源
                game.load.image('sky','../../assets/sky.png');
                game.load.image('ground','../../assets/platform.png');
                game.load.image('star','../../assets/star.png');
                game.load.spritesheet('dude','../../assets/dude.png',32,48);
            }
            function create(){
                //對象的建立及初始化
                game.physics.startSystem(Phaser.Physics.ARCADE);
                game.add.sprite(0,0,'sky');    //夾圖片添加到遊戲場景中
                platforms=game.add.group();
                platforms.enableBody=true;
                var ground=platforms.create(0,game.world.height-64,'ground');
                ground.scale.setTo(2,2);
                ground.body.immovable=true;
                var ledge=platforms.create(400,400,'ground');
                ledge.body.immovable=true;
                ledge=platforms.create(-150,250,'ground');
                ledge.body.immovable=true;
                //加載主角
                player=game.add.sprite(32,game.world.height-150,'dude');
                game.physics.arcade.enable(player);
                player.body.bounce.y=0.2;    //設置主角的彈性
                player.body.gravity.y=300;    //設置主角的重力
                player.body.collideWorldBounds=true;
                player.animations.add('left',[0,1,2,3],10,true);    //設置主角向左方向的序列幀
                player.animations.add('right',[5,6,7,8],10,true);    //設置主角向右方向的序列幀
                //建立控制鍵對象
                cursors=game.input.keyboard.createCursorKeys();
                //加載星星
                stars=game.add.group();    //把星星先添加到組中
                stars.enableBody = true;
                for(var i=0;i<20;i++){
                    var star=stars.create(i*70,0,'star');
                    star.body.gravity.y=300;    //設置星星的重力
                    star.body.bounce.y=0.7+Math.random()*0.2;    //設置星星的彈性
                }
                //分數相關
                scoreText=game.add.text(16,16,'分數:0',{fontSize:'32px',fill:'#000'});
            }
            function update(){
                //遊戲主循環
                game.physics.arcade.collide(player,platforms);
                //星星加載相關
                game.physics.arcade.collide(stars,platforms);
                game.physics.arcade.overlap(player,stars,collectStar,null,this);
                //控制主角開始
                player.body.velocity.x=0;
                if(cursors.left.isDown){
                    player.body.velocity.x=-150;
                    player.animations.play('left');//播放主角向左運動的序列幀動畫
                }else if(cursors.right.isDown){
                    player.body.velocity.x=150;
                    player.animations.play('right');//播放主角向右的序列幀動畫
                }else{
                    player.animations.stop();//中止動畫
                    player.frame=4;    //小球靜止時顯示第四幀動畫
                }
                if(cursors.up.isDown&&player.body.touching.down){
                    player.body.velocity.y=-350;
                }
            }
            function collectStar(player,stars){
                stars.kill();//銷燬星星
                score+=10;
                scoreText.text='分數:'+score;
            }
        </script>
    </body>
</html>

 咱們經過game.add.text爲場景加上一個文本,顯示在左上角,在collectStar的時候,將分數進行累加,而後更新顯示,這樣就結束啦。到這裏,一個簡單的小遊戲就實現了,是否是比想象中的簡單呢?

資源下載:https://coding.net/u/kk_1/p/phaser_group/git

相關文章
相關標籤/搜索