Phaser官方教程學(xué)習(xí)

Phaser官方教程

game.gif

準(zhǔn)備資料

bomb.png
dude.png
platform.png
sky.png
star.png
phaser.min.js

代碼是根據(jù)Phaser官方教程來(lái)的承疲。歡迎大家一起學(xué)習(xí)俗慈、討論。

第一步 生成主要框架

加載需要的資源,定義場(chǎng)景的寬高

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <script src="../js/dist/phaser.min.js"></script>
</head>
<body>

    <script>
    var config = {
        type: Phaser.AUTO,      //Phaser.CANVAS  Phaser.WEBGL
        width: 800,
        height: 600,
        physics: {
            default: 'arcade',
            arcade: {
                gravity: { y: 300 },
                debug: false
            }
        },
        scene: {
            preload: preload,
            create: create,
            update: update
        }
    };

    var game = new Phaser.Game(config);

    /**
    * 加載需要的資源
    **/
    function preload ()
    {
        this.load.image('sky', '../assets/sky.png');
        this.load.image('ground', '../assets/platform.png');
        this.load.image('star', '../assets/star.png');
        this.load.image('bomb', '../assets/bomb.png');
        
        //精靈清單
        this.load.spritesheet('dude', '../assets/dude.png', {
            frameWidth: 32, frameHeight: 48
        })
    }
    
    /**
    * 創(chuàng)建場(chǎng)景中的對(duì)象
    **/
    function create (){}
    
    /**
    * update
    **/
    function update(){}
    </script>
</body>
</html>

第二步 繪制場(chǎng)景

在create方法中創(chuàng)建場(chǎng)景有需要的精靈等

var score = 0,scoreText,platforms,player,cursors,stars,bombs;
function create ()
{
    //背景
    this.add.image(400, 300, 'sky');
    //等分
    scoreText = this.add.text(16, 16, 'score: 0', { fontSize: '32px', fill: '#000' });
    
    //靜態(tài)物理組
    platforms = this.physics.add.staticGroup();
    platforms.create(400, 568, 'ground').setScale(2).refreshBody();
    
    platforms.create(600, 400, 'ground');
    platforms.create(50, 250, 'ground');
    platforms.create(750, 220, 'ground');
    
    player = this.physics.add.sprite(100, 450, 'dude');
    player.setBounce(0.2);
    player.setCollideWorldBounds(true);
    
    //創(chuàng)建星星
    stars = this.physics.add.group({
        key: 'star',
        repeat: 11,
        setXY: {x: 12, y: 0, stepX: 70}
    });
    
    stars.children.iterate(function(child){
        child.setBounceY(Phaser.Math.FloatBetween(0.4, 0.8))
    });
    
    //碰撞器
    this.physics.add.collider(stars, platforms);
    
    this.anims.create({
        key: 'left',
        frames: this.anims.generateFrameNumbers('dude', {start: 0, end: 3}),
        frameRate: 10,
        repeat: -1
    });
    
    this.anims.create({
        key: 'turn',
        frames: [ {key: 'dude', frame: 4} ],
        frameRate: 20
    });
    
    this.anims.create({
        key: 'right',
        frames: this.anims.generateFrameNumbers('dude', {start: 5, end: 8}),
        frameRate: 10,
        repeat: -1
    });
    
    player.body.setGravityY(300);
    
    //Collider  碰撞器
    this.physics.add.collider(player, platforms);
    
    //鍵盤管理器
    cursors = this.input.keyboard.createCursorKeys();
    
    /**
    * collectStar
    * hitBomb
    * 在第四步中實(shí)現(xiàn)
    **/
    //我們也將檢測(cè)玩家是否與星星重疊 
    this.physics.add.overlap(player, stars, collectStar, null, this);
    
    bombs = this.physics.add.group();
    this.physics.add.collider(bombs, platforms);

    this.physics.add.collider(player, bombs, hitBomb, null, this);
}

第三步 定義鍵盤事件

在update方法定義鍵盤事件

function update(){
    if (cursors.left.isDown)
    {
        //設(shè)置水平速度
        player.setVelocityX(-160);
    
        player.anims.play('left', true);
    }
    else if (cursors.right.isDown)
    {
        player.setVelocityX(160);
    
        player.anims.play('right', true);
    }
    else
    {
        player.setVelocityX(0);
    
        player.anims.play('turn');
    }
    
    if (cursors.up.isDown && player.body.touching.down)
    {
        //設(shè)置垂直速度
        player.setVelocityY(-530);
    }
}

第四部,完善等分,碰撞等事件

function hitBomb(player, bomb){
    this.physics.pause();
    player.setTint(0xff0000);
    player.anims.play('turn');
    gameOver = true;
}

//收集星星
function collectStar (player, star)
{
    star.disableBody(true, true);
    
    score += 10;
    scoreText.setText('Score: ' + score);
    
    //計(jì)算存活的星星
    if (stars.countActive(true) === 0)
    {
        stars.children.iterate(function (child) {   
            child.enableBody(true, child.x, 0, true, true);

        });

        var x = (player.x < 400) ? Phaser.Math.Between(400, 800) : Phaser.Math.Between(0, 400);
        var bomb = bombs.create(x, 16, 'bomb');
        bomb.setBounce(1);
        bomb.setCollideWorldBounds(true);
        bomb.setVelocity(Phaser.Math.Between(-200, 200), 20);

    }
}
```GIS
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子氛驮,更是在濱河造成了極大的恐慌,老刑警劉巖济似,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矫废,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡砰蠢,警方通過(guò)查閱死者的電腦和手機(jī)蓖扑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)台舱,“玉大人律杠,你說(shuō)我怎么就攤上這事【和铮” “怎么了柜去?”我有些...
    開(kāi)封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)拆宛。 經(jīng)常有香客問(wèn)我嗓奢,道長(zhǎng),這世上最難降的妖魔是什么浑厚? 我笑而不...
    開(kāi)封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任股耽,我火速辦了婚禮,結(jié)果婚禮上钳幅,老公的妹妹穿的比我還像新娘豺谈。我一直安慰自己,他們只是感情好贡这,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著厂榛,像睡著了一般盖矫。 火紅的嫁衣襯著肌膚如雪丽惭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天辈双,我揣著相機(jī)與錄音责掏,去河邊找鬼。 笑死湃望,一個(gè)胖子當(dāng)著我的面吹牛换衬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播证芭,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瞳浦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了废士?” 一聲冷哼從身側(cè)響起叫潦,我...
    開(kāi)封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎官硝,沒(méi)想到半個(gè)月后矗蕊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氢架,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年傻咖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岖研。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卿操,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缎玫,到底是詐尸還是另有隱情硬纤,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布赃磨,位于F島的核電站筝家,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏邻辉。R本人自食惡果不足惜溪王,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望值骇。 院中可真熱鬧莹菱,春花似錦、人聲如沸吱瘩。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蜜徽,卻和暖如春祝懂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拘鞋。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工砚蓬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盆色。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓灰蛙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親隔躲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摩梧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,092評(píng)論 1 32
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,926評(píng)論 6 13
  • ORACLE自學(xué)教程 --create tabletestone ( id number, --序號(hào)usernam...
    落葉寂聊閱讀 1,072評(píng)論 0 0
  • 小小的果子還挺有脾氣 秋天大把大把地撕去自己的偽裝 偏偏它不干 不肯接受命運(yùn)對(duì)自己的安排 它紅的那么招搖 紅的那么...
    簡(jiǎn)村小吹閱讀 319評(píng)論 18 28
  • (爸爸說(shuō))吃飯的時(shí)候不要說(shuō)話(塞了一勺飯到嘴里)媽媽,不要說(shuō)那么多句蹭越,像我只說(shuō)了一句是可以的
    孫追光閱讀 163評(píng)論 0 1