成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

[phaser3學習]使用phaser3做一款飛刀小游戲

BothEyes1993 / 3334人閱讀

摘要:前言作為一款流行的游戲動畫框架受到很多開發(fā)者的青睞最近筆者在逛意大利開發(fā)者論壇的時候發(fā)現(xiàn)了這款小游戲所以就照著說明做了一下在這里記錄下來開發(fā)準備插件腳本飛刀和靶子的圖像或者這個項目里面有的腳本和需要的圖像文件開始制作搭建基本的項目創(chuàng)建一個

前言

phaser作為一款流行的游戲/動畫框架,受到很多web開發(fā)者的青睞,最近筆者在逛意大利開發(fā)者:emanueleferonato論壇的時候發(fā)現(xiàn)了這款小游戲,所以就照著說明做了一下,在這里記錄下來.

開發(fā)準備

nodejs+npm
http-server插件
phaser腳本
飛刀和靶子的圖像

或者

git clone https://github.com/YexChen/canvas_game.git

這個項目里面有phaser的腳本和需要的圖像文件

開始制作 搭建基本的phaser項目

創(chuàng)建一個基本的html文件,引入phaser文件




  
  
  
  Document
  


  



別忘了在當前目錄下啟動http-server,啟動服務器.打開localhost:8080(或其他端口)來查看項目

那么現(xiàn)在,我們需要干什么呢?
我們現(xiàn)在需要在頁面加載時加載一個游戲實例,代碼如下:

let game,knifeGroup
let gameConfig = {
  rotateSpeed : 5,
  throwSpeed : 150,
  minAngle : 10
}
window.onload = function(){
    game = new Phaser.Game({
        type: Phaser.CANVAS,
        width: 600,
        height: 700,
        backgroundColor: 0xffffdffffd,
        scene: [playGame]
    })
}

Phaser.Game 是phaser游戲的構建函數(shù),定義了實例的類型,寬高,背景顏色,場景等信息,大家可以console.log(Phaser)看一下定義.
playGame是接下來的場景.
gameConfig 是游戲的參數(shù),方便修改

接下來我們定義一下我們的場景:

class playGame extends Phaser.Scene{
      constructor(){
        super("playGame")
      }

      preload(){

      }

      create(){

      }

      update(){

      }
    }

場景在游戲中相當于戲曲中的每一幕,通過Phaser.Scene.start來進行調用.

在Phaser游戲中,場景創(chuàng)建時會先運行preload函數(shù),用來預加載圖片模型.然后運行create函數(shù),執(zhí)行初始化代碼,最后在每一步中調用update函數(shù)更新

預加載圖片
preload(){
        this.load.image("target","image/target.png")
        this.load.image("knife","image/knife.png")
}

在preload中加入以上代碼,把圖片注冊進來.

加載物體
create(){
    this.target = this.add.image(game.config.width/2,game.config.height/5 *2,"target").setScale(0.5,0.5)
    this.target.depth = 1
    this.knife = this.add.image(game.config.width/2,game.config.height/5*4,"knife").setScale(0.5,0.5)
    this.knifeGroup = this.add.group()
    console.log(this)
}

this.add.image通過提供的寬高和上一步中提供的url來生成Image類型的對象(和原生的不一樣!),
對象的原型鏈上的setScale(x,y)函數(shù)可以調整圖像的縮放.
knifeGroup 是空的group對象,用來存放之后的飛刀集合

讓我們的圖像動起來

修改update函數(shù):

update(){
        this.target.angle += gameOptions.rotateSpeed
}

好的,至此我們的項目基礎就結束了,接下來來做飛刀的邏輯吧

扔飛刀邏輯

我們首先需要監(jiān)聽用戶的鼠標事件,可以使用Phaser內(nèi)置的函數(shù)來實現(xiàn),在created中加入:

    this.canThrow = true
    this.input.on("pointerdown",this.throwKnife,this)

throwKnife 是我們?nèi)语w刀的處理函數(shù),我們寫在update后面:

throwKnife(){
    if(!this.canThrow){
      return
    }
    this.canThrow = false
    this.tweens.add({
      targets: [this.knife],
      y: this.target.y+this.knife.height/8 * 3,
      duration: gameOptions.throwSpeed,
      callbackScope: this,
      onComplete: function(tween){
        
      },
    })
  }

我們在用戶按下鼠標左鍵時,檢測是否可扔,如果可扔的話就讓我們的飛刀做一個tweens動畫,this.tweens是一個tweens管理器,官方文檔比較殘廢,部分參數(shù)如下:

target : tweens動畫目標
y : 目標的y坐標,
duration: 動畫時間
callbackScope: 回調函數(shù)的this值
onComplete: 完成時的回調函數(shù)

飛刀插上去以后,我們要判斷這個飛刀是不是和其它飛刀的重合,筆者這里的判斷方式是在每一個飛刀插到盤面上時把當前輪盤的角度保存下來,當下一次投擲的時候判斷當前盤面旋轉度和以往的旋轉度距離是否小于最小值,如果小于最小值就游戲結束,否則就插一次飛刀.

我們在上面的onComplete函數(shù)里面寫下代碼:

let isLegal = true
let children = this.knifeGroup.getChildren()
for(var i=0;i

我們判斷之前所有飛刀的impactAngle值,如果沒有和當前角度相差10度的,我們就插入新的飛刀,否則播放動畫以后重啟游戲.

更新每一把飛刀的位置

好的,我們?nèi)语w刀的邏輯已經(jīng)完成了,接下來我們只需要遍歷每一個knifeGroup里面的子飛刀的位置,并在update更新函數(shù)里面更新他們的位置,游戲就算做完了.
在update函數(shù)里面添加:

update(){
    this.target.angle += gameOptions.rotateSpeed
    let children = this.knifeGroup.getChildren()
    for(var i=0;i< children.length;i++){
      let child = children[i]
      child.angle += gameOptions.rotateSpeed
      let ang = Phaser.Math.DegToRad(child.angle)
      child.x = this.target.x - Math.sin(ang) * this.target.width/4
      child.y = this.target.y + Math.cos(ang) * this.target.width/4
    }
  }

我們在飛刀移動時計算每一步偏移的角度,從而判斷出子飛刀child的x,y位移.

我們的小游戲就做完了,完整代碼如下,順便做了下記分牌:




  
  
  
  Document
  


  


文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/95975.html

相關文章

  • [phaser3入門探坑]使用phaser3制作山寨馬里奧

    摘要:前言是一個優(yōu)秀的前端庫,封裝了很多底層的實現(xiàn),可以用來制作游戲,場景等。今年月新發(fā)布了,到今天為止已經(jīng)更新到了。聲明本游戲來自于小站的官方教程,加入了一些個人的注釋,本文旨在幫助各位觀眾老爺快速上手。 前言 phaser是一個優(yōu)秀的前端canvas庫,封裝了很多底層的實現(xiàn),可以用來制作游戲,h5場景等。今年1月新發(fā)布了phaser3,到今天為止已經(jīng)更新到了3.30。 聲明 本游戲來自于...

    szysky 評論0 收藏0
  • Phaser3游戲三角學應用--一只跟隨屏幕點擊位置游動的魚

    摘要:資源圖代碼中為初始化代碼三角函數(shù)得出魚要旋轉的角度判斷魚是否需要反轉點擊的位置和魚頭相同不反轉點擊的位置和魚頭相同不反轉判斷魚是否需要反轉點擊的位置和魚頭相反反轉點擊的位置和魚頭相反反轉讓魚移動到點擊的位置更多游戲教學為游戲開發(fā) showImg(https://segmentfault.com/img/remote/1460000017023462); showImg(https://...

    wangbinke 評論0 收藏0
  • Phaser3游戲三角學應用--一只跟隨屏幕點擊位置游動的魚

    摘要:資源圖代碼中為初始化代碼三角函數(shù)得出魚要旋轉的角度判斷魚是否需要反轉點擊的位置和魚頭相同不反轉點擊的位置和魚頭相同不反轉判斷魚是否需要反轉點擊的位置和魚頭相反反轉點擊的位置和魚頭相反反轉讓魚移動到點擊的位置更多游戲教學為游戲開發(fā) showImg(https://segmentfault.com/img/remote/1460000017023462); showImg(https://...

    CoderDock 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<