2017-03-11 82 views
0

我正在編寫一個正在進行的遊戲,並遇到一個小問題。我正在使用keyPressed函數,當我移動左邊時,我突然快速地開始移動到右側,矩形停止(反之亦然)。在我的比賽中會有閃避,所以能夠儘可能快地切換方向很重要。我該怎麼辦?當在p5.js中來回移動矩形時停止延遲

//main file, sketch.js: 

var person; 

function setup() { 
    createCanvas(380, 720); 

    person = new Person(); 
} 

function draw() { 
    background(64, 64, 64); 
    person.show(); 
    person.move(); 
} 

function keyReleased() { 
    if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) { 
     person.setDirX(0); 
    } 
} 

function keyPressed() { 
    if (keyCode === RIGHT_ARROW) { 
     person.setDirX(1) 
    } 

    else if (keyCode === LEFT_ARROW) { 
     person.setDirX(-1); 
    } 
} 

//person(rectangle) file, person.js: 

function Person() { 
    this.x = width/2; 
    this.y = height - 20; 
    this.xdir = 0; 
    this.ydir = -0.25; 

    this.show = function() { 
     noStroke(); 
     fill(250); 
     rectMode(CENTER); 
     rect(this.x, this.y, 25, 25); 
    } 

    this.setDirX = function(dir) { 
     this.xdir = dir; 
    } 

    this.move = function(dir) { 
     this.x += this.xdir * 5; 
     this.y += this.ydir; 
    } 
} 

回答

2

試着想想當你快速從左轉到右轉的時候你按下和釋放的鍵。這是你在做什麼:

  • 首先你按住左邊。
  • 然後你按住右邊。所以,一秒鐘之內你就會按住兩個鍵。
  • 然後你放開左邊,但繼續按住右邊。

您的代碼檢測到您釋放了左鍵並將移動速度設置爲0,這就是您停止移動的原因。

要解決這個問題,您需要跟蹤當前按下哪些按鍵。您可以通過跟蹤您關心的每個鍵的布爾變量,在keyPressed()keyReleased()函數中設置這些布爾值,並檢查draw()函數中的布爾值。

無恥自我推銷:我寫了一個使用這種方法的教程here。請參閱標題爲「處理多個鍵」的部分。本教程適用於Processing,但同樣的想法適用於P5.js。

+0

ty!這完全解決了我的問題。 @Kevin Workman – jholsch29