簡體   English   中英

按下換檔鍵時使速度為5

[英]make speed 5 when shift key is pressed

我有以下代碼來使播放器移動:

class Player {

  PVector direction;
  PVector location;
  float rotation;
  int speed;


  Player() {
    location = new PVector(width/2, height/2);
    speed =2;
  }

  void visualPlayer() {
    direction = new PVector(mouseX, mouseY);
    rotation = atan2(direction.y - location.y, direction.x - location.x)/ PI * 180;
    if (keyPressed) {
      if ((key == 'w' && dist(location.x, location.y, direction.x, direction.y)>5) || (key == 'w' && key == SHIFT && dist(location.x, location.y, direction.x, direction.y)>5)) {
        speed = 2;
        location.x = location.x + cos(rotation/180*PI)*speed;
        location.y = location.y + sin(rotation/180*PI)*speed;

        if (key == SHIFT) {
          speed = 5;
        }
      }
    } else {
      location.x = location.x;
      location.y = location.y;
    }

    println(speed);
    ellipse(location.x, location.y, 10, 10);
  }
}

當我按下w鍵時,播放器會朝着鼠標的方向移動。 但是如果要按Shift鍵,我想讓播放器移動得更快。 但是現在當我按下Shift鍵時,我的播放器停止移動了...為什么會發生這種情況? 歡迎任何幫助我解決此問題的建議:)

這兩個if語句永遠不會都是真的:

if ((key == 'w' ) {
    if (key == SHIFT) {

在調用draw()函數期間, key變量將只有一個值。

實際上, key變量永遠不會包含SHIFT的值。 相反,您需要使用keyCode變量。

而且,由於您要檢測多個按鍵,因此您需要執行我在另一個問題中告訴您的操作:您需要使用一組boolean值來跟蹤按下的鍵,然后在您的鍵盤中使用它們。 draw()函數。

這是一個小例子,可以准確顯示我在說什么:

boolean wPressed = false;
boolean shiftPressed = false;

void draw() {
  background(0);

  if (wPressed && shiftPressed) {
    background(255);
  }
}

void keyPressed(){
  if(key == 'w' || key == 'W'){
    wPressed = true;
  }
  if(keyCode == SHIFT){
    shiftPressed = true;
  }
}

void keyReleased(){
  if(key == 'w' || key == 'W'){
    wPressed = false;
  }
  if(keyCode == SHIFT){
    shiftPressed = false;
  }
}

有關更多信息, 請參見參考資料本教程中有關處理中用戶輸入的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM