Java keyPressed problem
Tjena!
Jag sitter och skriver ett spel i Java, jag försöker att göra så att man kan gå åt två riktningar samtidigt, t.ex. upp och vänster.
Men jag har stött på ett litet problem, det är när jag t.ex. går upp och till vänster, och sen släpper knapparna, men när jag trycker upp igen så går den åt samma riktning igen (upp + vänster).
Samma sak händer om jag går typ ner och till vänster eller ner och till höger etc.
Som jag förstår det så släpper inte en knapp.
package com.PlatformGame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
public class UserInput implements KeyListener, MouseListener, MouseMotionListener, MouseWheelListener{
public void mouseWheelMoved(MouseWheelEvent e) {
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_A:
Display.isMovingLeft = true;
Display.isMoving = true;
Display.dir = Display.left;
break;
case KeyEvent.VK_S:
Display.isMovingDown = true;
Display.isMoving = true;
Display.dir = Display.down;
break;
case KeyEvent.VK_D:
Display.isMovingRight = true;
Display.isMoving = true;
Display.dir = Display.right;
break;
case KeyEvent.VK_W:
Display.isMovingUp = true;
Display.isMoving = true;
Display.dir = Display.up;
break;
}
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
switch(key) {
case KeyEvent.VK_A:
if(Display.dir == Display.left){
Display.isMoving = false;
Display.isMovingLeft = false;
}
break;
case KeyEvent.VK_S:
if(Display.dir == Display.down){
Display.isMoving = false;
Display.isMovingDown = false;
}
break;
case KeyEvent.VK_D:
if(Display.dir == Display.right){
Display.isMoving = false;
Display.isMovingRight = false;
}
break;
case KeyEvent.VK_W:
if(Display.dir == Display.up){
Display.isMoving = false;
Display.isMovingUp = false;
}
break;
}
}
public void keyTyped(KeyEvent e) {
}
}
public void tick() {
if(Display.isMoving){
boolean canMove = false;
if(Display.isMoving && Display.isMovingUp){
y += -movementSpeed;
}
if(Display.isMoving && Display.isMovingDown){
y += movementSpeed;
}
if(Display.isMoving && Display.isMovingLeft){
x += -movementSpeed;
}
if(Display.isMoving && Display.isMovingRight){
x += movementSpeed;
}
}
}
Uppskattar all hjälp jag kan få, Tack!
SSD: OCZ-VERTEEX3 128gb | GPU: GeForce GTX 570 kfa2 | CPU: i5-3570K @ 3.4GHz | RAM:2x 4gb Corsair Dominator @ 1600MHz | PSU: Fractal Design Newton r2 650W | Mobo: Asus p8Z77-V LX | Skärm: Dell 2209WA 75Hz