iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 10
0

》Camera
Phaser 有提供一些 camera 上的特效,如 fade shake flash,今日我們會提到如何使用這些特效、偵聽動畫結束後以及防止多次呼叫。

》Javascript 內容
我們調整一下生命週期 update 的區塊

scene.update = function() {
    .....
    if (Phaser.Geom.Intersects.RectangleToRectangle(playerRect, houseRect)) {
        console.log('到家了')
        this.scene.pause()
    }
    if (Phaser.Geom.Intersects.RectangleToRectangle(playerRect, tankRect)) {
        console.log('撞到了紅色坦克')
        this.gameOver()
    }
    if (Phaser.Geom.Intersects.RectangleToRectangle(playerRect, tankRect2)) {
        console.log('撞到了沙色坦克')
        this.gameOver()
    }
    .....
}

// 增加 gameOver

scene.gameOver = function() {
    // 500 ms 相機 shake 效果
    this.cameras.main.shake(500)					
    
    // 偵聽 shake 動畫結束
    this.cameras.main.on('camerashakecomplete', () => {
        // 500 ms 相機 fade 效果
        this.cameras.main.fade(500)				
    })
    
    // 偵聽 fade out 動畫結束
    this.cameras.main.on('camerafadeoutcomplete', () => {	
        // 遊戲重新
        this.scene.restart()						
    })
}

// 假如撞到坦克,會一直呼叫 gameOver,這時候我們還要特別處理不要呼叫多次的 gameOver

scene.init = function() {
    .....
    this.isGameOver = false
}

scene.update = function() {
    if (this.isGameOver) return
    .....
}

scene.gameOver = function() {
    this.isGameOver = true
}

》結論
今天我們練習到 camera 的特效,偵聽特效結束後的偵聽的後續處理;且為了能讓程式更好,所以我們當碰撞到 tank 的時候,希望不要多次呼叫 gameOver ,只希望呼叫一次就好,所以我們多記 gameOver 的狀態。


今天就先到這裡,我們明天見。


上一篇
Day 9:Resize
下一篇
Day 11:Sprite sheet
系列文
Phaser 幫我撐個 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言