2016-08-08 2 views
0

у меня есть следующий код, чтобы сделать свой ход: игроксделать скорость 5, когда клавиша переключения нажата

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. но теперь мой плеер перестает двигаться, когда я нажимаю клавишу смены ... почему это происходит? любые предложения, чтобы помочь мне решить эту проблему, не приветствуются :)

+0

Что такое 'keyPressed' и' SHIFT' в вашем коде? На ваш взгляд, как этот ключ 'key == 'w' && key == SHIFT' будет истинным? – jhamon

+0

[этот вопрос] (http://stackoverflow.com/questions/14301775/get-key-combinations) может помочь вам – jhamon

+0

попробуйте переместить 'if (key == SHIFT) {...}' перед 'location.x = loca ... ' –

ответ

0

Эти два if заявления будут никогда как быть правдой:

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

Переменная key будет иметь только одно значение при вызове функции draw() ,

На самом деле переменная key никогда не будет содержать значение SHIFT. Вместо этого вам нужно использовать переменную keyCode.

И так как вы пытаетесь обнаружить несколько нажатий клавиш, вы должны делать то, что я сказал вам, чтобы сделать в your other question: вам нужно использовать набор 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; 
    } 
} 

Более подробную информацию в the reference или this tutorial на входе пользователя в обработке.

+0

ok. плохо дать ему попробовать – FutureCake

+0

@FutureCake Я отредактировал свой ответ, чтобы включить небольшой пример, показывающий, что именно я говорю. –

+0

Я сделал то же самое, что и в вашем примере, но я продолжал получать ту же ошибку ... как у меня в моем исходном вопросе :( – FutureCake

Смежные вопросы