亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JS/canvas游戲中如何讓角色追隨玩家角色?

JS/canvas游戲中如何讓角色追隨玩家角色?

一只名叫tom的貓 2022-10-08 10:09:39
我剛剛開始使用畫布編寫一個簡單的 JS 游戲,但我不知道主要機制是如何工作的:這是一個無休止的游戲,玩家必須逃離怪物并在怪物之前進入一扇門到達他。所以,我有畫布和玩家移動,但我仍然沒有啟動怪物機制。我認為那是用 x/y 玩家的位置更新每個怪物的幀,對嗎?到目前為止我寫的代碼:const canvas = document.createElement("canvas");const ctx = canvas.getContext("2d");canvas.width = 600;canvas.height = 600;document.body.appendChild(canvas);const survivor = {    x: 25,    y: 25,    moveUp:    function() { this.y -= 25 },    moveDown:  function() { this.y += 25 },    moveLeft:  function() { this.x -= 25 },    moveRight: function() { this.x += 25 },  }  function draw(survivor) {    const img = new Image();    img.onload = () => {        ctx.drawImage(img, survivor.x, survivor.y, 50, 50);     }    img.src = "/images/survivor-move_knife_0.png";  }  document.addEventListener('keydown', e => {    switch (e.keyCode) {      case 38:         survivor.moveUp();            console.log('up: ', survivor);         break;      case 40:         survivor.moveDown();          console.log('down: ',  survivor);         break;      case 37:         survivor.moveLeft();          console.log('left: ',  survivor);         break;      case 39:         survivor.moveRight();         console.log('right: ', survivor);         break;    }    updateCanvas();  })  function updateCanvas() {    ctx.clearRect(0,0,1500,1700);    draw(survivor);  }  updateCanvas()}javascript帆布
查看完整描述

1 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

有幾種方法可以做到這一點。


鑒于您發布的代碼,一種簡單(但不是非常有效)的方法是使用 setInterval() 來運行怪物的邏輯。


一個非常簡單的邏輯可以像這樣工作(偽代碼):


if ( monster.canMoveLeft() && player.x < monster.x ) {

    monster.moveLeft()

} else if ( monster.canMoveRight() && player.x > monster.x ) {

    monster.moveRight()

} else if ( monster.canMoveUp() && player.y < monster.y ) {

    monster.moveUp()

} else if ( monster.canMoveDown() && player.y > monster.y ) {

    monster.moveDown()

} else {

    // no good choice

    // either continue moving in the same direction, or choose a random

    // direction if that's not possible

    //

    // This means you need to keep track of the monster's last direction

}


您還可以檢查水平軸和垂直軸上的距離以確定先行的方向。


項目清單


查看完整回答
反對 回復 2022-10-08
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號