2017-12-13 4 views
0

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

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

+2

Sie rufen nie 'start()' – devpuh

Antwort

0

Ich denke, die Methoden wie diese erklären müssen:

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

     } 
    } 

} 

@Override 
public void keyReleased(KeyEvent e){ 

    int key = e.getKeyCode(); 

} 
  1. Die @Override Anmerkungen werfen einen Fehler, wenn die übergeordnete Klasse nicht über die angegebene Methode
  2. Vereinbarungs alle Java-Methoden mit einem Kleinbuchstaben beginnen, im Gegensatz zu Typen, die mit einem Groß beginnen
+0

Das hat mein Problem nicht behoben danke für die Hilfe zäh. – Cory

+0

@Cory, aber die Verwendung von '@ Override' sollte den Fehler anzeigen - * vorausgesetzt, * der' Handler' ist korrekt. Verwenden Sie einen Debugger oder fügen Sie 'System.out.println (" gedrückt "+ e);' am Anfang jeder Listener-Methode hinzu, um zu bestätigen, dass es zumindest aufgerufen wird ... Ich bin mir auch nicht sehr sicher, ob youtube und Videos sind die besten Alternativen zum Erlernen der Programmierung ... –

+0

@Cory gut hier ist der Klartext aus der KeyAdapter-Klasse: 'öffentliche void keyPressed (KeyEvent e) {}, öffentliche void keyReleased (KeyEvent e) {}' – TheOnlyMrCat

Verwandte Themen