2016-05-06 14 views
2

Ich versuche, Tastatureingabe zu verwenden, um eine Beschriftung um den Bildschirm zu übersetzen. Momentan funktionieren nur noch down und left. Mein Code ist unten.Love2d bewegt ein Objekt auf dem Bildschirm

debug = true 
down = 0 
up = 0 
left = 0 
right = 0 
text = 'non' 

x = 100 
y = 100 

dx = 0 
dy = 0 
function love.load(arg) 

end 

function love.update(dt) 
    if love.keyboard.isDown('escape') then 
     love.event.push('quit') 
    end 

    if up == 1 then 
     dy = -1 
    end 
    if up == 0 then 
     dy = 0 
    end 

    if down == 1 then 
     dy = 1 
    end 
    if down == 0 then 
     dy = 0 
    end 

    if right == 1 then 
     dx = 1 
    end 
    if right == 0 then 
     dx = 0 
    end 

    if left == 1 then 
     dx = -1 
    end 
    if left == 0 then 
     dx = 0 
    end 
end 

function love.keypressed(key) 
    if key == 'up' or key == 'w' then 
     text = 'up' 
      up = 1 
    end 
    if key == 'down' or key == 's' then 
     text = 'down' 
      down = 1 
    end 
    if key == 'right' or key == 'd' then 
     text = 'right' 
      right = 1 
    end 
    if key == 'left' or key == 'a' then 
     text = 'left' 
      left = 1 
    end 
end 

function love.keyreleased(key) 
    text = 'non' 

    if key == 'up' or key == 'w' then 
     up = 0 
    end 
    if key == 'down' or key == 's' then 
     down = 0 
    end 
    if key == 'right' or key == 'd' then 
     right = 0 
    end 
    if key == 'left' or key == 'a' then 
     left = 0 
    end 
end 

function love.draw(dt) 
    x = x + dx 
    y = y + dy 
    love.graphics.print(text, x, y) 
end 

Experimentation hat, dass die in den love.update (dt) Abschnitt Effekte Reihenfolge der if-Anweisungen gezeigt, die Richtungen arbeiten, aber ich kann nicht zur gleichen Zeit alle vier zu arbeiten.

+0

Sie überprüfen jeden Wert für beide Möglichkeiten und legen dann einen gemeinsamen Wert für jeden Wert fest. Folgen Sie der Logik in 'love.update' in Ihrem Kopf und verfolgen Sie' dy' und 'dx' für einen beliebigen Tastendruck. (Denken Sie daran, dass Sie * nur einen Wert * ändern können, aber alle Variablen Werte haben.) –

Antwort

1

Änderung love.update und love.draw etwas wie folgt aus:

function love.update(dt) 
    if love.keyboard.isDown('escape') then 
     love.event.push('quit') 
    end 

    dx, dy = 0 

    if up == 1 then 
     dy = -1 
    end 

    if down == 1 then 
     dy = 1 
    end 

    if right == 1 then 
     dx = 1 
    end 

    if left == 1 then 
     dx = -1 
    end 

    x = x + dx 
    y = y + dy 
end 

function love.draw(dt) 
    love.graphics.print(text, x, y) 
end 

, wenn Sie für die Eingabe überprüfen, Sie ordnet sie richtig die Werte, wenn es wahr ist, dass die Taste gedrückt wird, aber Sie auch überprüfen, wenn die Schaltfläche NICHT gedrückt wird, heben Sie die Zuweisung auf. Wenn also die Taste up gedrückt wurde, überschreibt die Überprüfung, ob die Taste down gedrückt wird, sofort den zugewiesenen Wert. Sie können auch dx und dy um den dt-Wert skalieren, abhängig von Ihren Ziel-fps (wenn Sie keinen festen Zeitschritt verwenden, um die Bewegungsgeschwindigkeit unabhängig vom FPS der Maschine zu ändern).

+0

Erklärung, warum ** sehr hilfreich wäre, um dies zu einer besseren Antwort zu machen. –

+0

Wenn er nach Eingaben sucht, ordnet er ihnen richtig die Werte zu, wenn es wahr ist, dass die Taste gedrückt wird, aber er prüft auch, ob die Taste NICHT gedrückt ist und hebt dann den Wert auf. Wenn also die Taste up gedrückt wurde, überschreibt die Überprüfung, ob die Taste down gedrückt wird, sofort den zugewiesenen Wert. – rogueyoshi

+0

Ja, ich verstand das Problem, aber OP offenbar nicht. Also einfach den Code zu reparieren, ohne ihn zu erklären, würde ihnen nicht helfen, ihren logischen Fehler zu verstehen. Das Update hilft. –