2016-08-08 30 views
0

gedrückt habe ich den folgenden Code meine Spieler Schritt zu machen:machen Geschwindigkeit 5, wenn Shift-Taste

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); 
    } 
} 

wenn ich die w-Taste der Spieler bewegt sich in Richtung der Maus drücken. aber ich möchte den Spieler schneller bewegen, wenn ich die Shift-Taste drücke. aber jetzt hört mein player auf sich zu bewegen, wenn ich die shift-taste drücke ... warum passiert das? Anregungen, mir zu helfen, dieses Problem zu beheben sind willkommen :)

+0

Was sind 'keyPressed' und' SHIFT' in Ihrem Code? Wie könnte deiner Meinung nach dieser 'key == 'w' && key == SHIFT' wahr sein? – jhamon

+0

[diese Frage] (http://stackoverflow.com/questions/14301775/get-key-combinations) könnte Ihnen helfen – jhamon

+0

versuchen, verschieben 'if (key == SHIFT) {...} 'vor' location.x = loca ... ' –

Antwort

0

Diese beiden if Aussagen nie beide wahr sein:

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

Die key Variable nur einen Wert während eines Aufrufs der draw() Funktion haben .

In der Tat wird die key Variable nie einen Wert von SHIFT halten. Stattdessen müssen Sie die Variable keyCode verwenden.

Und da Sie versuchen, mehrere Tastendrücke zu erfassen, müssen Sie tun, was ich Ihnen gesagt, in your other question zu tun: Sie haben eine Reihe von boolean Werte verwenden müssen, die Spur zu halten, von denen Tasten gedrückt werden, dann sie verwenden in Ihrer draw() Funktion.

Hier ist ein kleines Beispiel, das genau zeigt, was ich rede:

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; 
    } 
} 

Weitere Daten sind in the reference oder in this tutorial auf Benutzereingaben in Bearbeitung.

+0

ok. ich probiere es aus – FutureCake

+0

@FutureCake Ich habe meine Antwort bearbeitet, um ein kleines Beispiel zu geben, das genau zeigt, worüber ich rede. –

+0

Ich habe das gleiche wie in Ihrem Beispiel, aber ich habe immer den gleichen Fehler ... wie ich in meiner ursprünglichen Frage hatte :( – FutureCake