Das Problem, das ich habe, ist, dass mein Objekt nicht bewegt und ich kann nicht herausfinden, warum das ist. Ich habe das KeyEvent und den Listener, aber wenn ich versuchte, die Schlüsselwerte zu drucken, würde es nichts drucken oder nichts sehen. Ich habe das Tutorial verwendet, um ein Spiel auf Youtube zu erstellen, damit dies funktioniert, aber der Code sollte funktionieren, aber ich habe gesagt, dass nichts passiert.Java KeyEvent keine Tasten gedrückt
package com.tutorial.main;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.util.Random;
public class Game extends Canvas implements Runnable{
private static final long serialVersionUID = 1550691097823471818L;
private Thread thread;
private boolean running = false;
private Handler handler;
private Random r;
public static final int WIDTH = 640, HEIGHT = WIDTH/12*9;
public Game(){
handler = new Handler();
this.addKeyListener(new KeyInput(handler));
new Window(WIDTH, HEIGHT, "The Runner", this);
r = new Random();
handler.addObject(new Player(WIDTH/2 - 32,HEIGHT/2 -32, ID.player));
}
public synchronized void start(){
thread = new Thread(this);
thread.start();
running = true;
}
public synchronized void stop(){
try{
thread.join();
running = false;
}catch(Exception e){
e.printStackTrace();
}
}
public void run(){
long lastTime = System.nanoTime();
double ammountOfTicks = 60.0;
double ns = 1000000000/ammountOfTicks;
double delta = 0;
long timer = System.currentTimeMillis();
int frames = 0;
while(running){
long now = System.nanoTime();
delta += (now - lastTime)/ns;
lastTime = now;
while(delta >= 1){
ticks();
delta --;
}
if(running)
render();
frames ++;
if(System.currentTimeMillis() - timer > 1000){
timer += 1000;
//System.out.println("FPS: " + frames);
frames = 0;
}
}
stop();
}
private void ticks(){
handler.tick();
}
private void render(){
BufferStrategy bs = this.getBufferStrategy();
if(bs == null){
this.createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, WIDTH, HEIGHT);
handler.render(g);
g.dispose();
bs.show();
}
public static void main(String args[]){
new Game();
}
}
und KeyInput:
package com.tutorial.main;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class KeyInput extends KeyAdapter {
private Handler handler;
public KeyInput(Handler handler){
this.handler = handler;
}
public void KeyPressed(KeyEvent e){
int key = e.getKeyCode();
for(int i = 0;(i< handler.object.size()); i ++){
GameObject tempObject = handler.object.get(i);
if(tempObject.getId() == ID.player){
if(key == KeyEvent.VK_W){
tempObject.setvelY(-5);
}
}
}
}
public void KeyReleased(KeyEvent e){
int key = e.getKeyCode();
}
}
package com.tutorial.main;
und Handler:
import java.awt.Graphics;
import java.util.LinkedList;
public class Handler {
LinkedList<GameObject> object = new LinkedList<GameObject>();
public void tick(){
for(int i = 0; i < object.size(); i ++){
GameObject tempObject = object.get(i);
tempObject.tick();
}
}
public void render(Graphics g){
for(int i = 0; i < object.size(); i ++){
GameObject tempObject = object.get(i);
tempObject.render(g);
}
}
public void addObject(GameObject object){
this.object.add(object);
}
public void removeObject(GameObject object){
this.object.remove(object);
}
}
Was ist das 'Handler'? Wie in TheOnlyMrCat's Antwort angegeben, verwenden Sie override, aber stellen Sie sicher, Methodennamen mit Kleinbuchstaben zu starten, sonst wird es – XtremeBaumer
Sie rufen nie 'start()' – devpuh