2 차원 사이드 스크롤러를 만들고 싶었 기 때문에 튜토리얼을 온라인으로하고있었습니다. 이 정확한 오류가 있습니다. 나는 그것을 봤지만 아무 것도 생각 나지 않았다. 나는 오타를 찾으려고 노력했다. 그리고 그것은 깨끗해 보인다, 그 does not는 나에게 오류를 코드에서 anywere하지 않고있다. 어디서부터 시작해야할지 모르겠다. 만약 당신이 내게 explaing 수있는 오류가 무엇이며 어떻게 그때 그것을 해결할 놀라운 것입니다.Main.GamePanel은 추상 클래스가 아니며 java.awt.event.KeyListener의 추상 메소드 keyReleased (java.awt.event.KeyEvent)를 오버라이드하지 않습니다.
package Main;
import GameState.GameStateManager;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
public class GamePanel extends JPanel implements Runnable, KeyListener{
public static final int WIDTH = 320;
public static final int HIGHT = 240;
public static final int SCALE = 2;
//game thread
private Thread thread;
private boolean running;
private int FPS = 60;
private long targetTime = 1000/FPS;
//image
private BufferedImage image;
private Graphics2D g;
//game state manager
private GameStateManager gsm;
public GamePanel(){
super();
setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
setFocusable(true);
requestFocus();
}
public void addNotify(){
super.addNotify();
if (thread == null) {
thread = new Thread(this);
addKeyListener(this);
thread.start();
}
}
private void init() {
image = new BufferedImage(WIDTH, HIGHT, BufferedImage.TYPE_INT_RGB);
g = (Graphics2D) image.getGraphics();
running = true;
gsm = new GameStateManager();
}
public void run(){
init();
long start, elapsed, wait;
//game loop
while(running) {
start = System.nanoTime();
update();
draw();
drawToScreen();
elapsed = System.nanoTime() - start;
wait = targetTime - elapsed/1000000;
try
{
Thread.sleep(wait);
}
catch(Exception e)
{
e.printStackTrace();
}//end of try catch
}
}
private void update()
{
gsm.update();
}
private void draw()
{
gsm.draw(g);
}
private void drawToScreen()
{
Graphics g2 = getGraphics();
g2.drawImage(image, 0, 0, null);
g2.dispose();
}
public void KeyPressed(KeyEvent key)
{
gsm.keyPressed(key.getKeyCode());
}
public void KeyReleased(KeyEvent key)
{
gsm.keyReleased(key.getKeyCode());
}
}
[주요 수신기를 작성하는 방법] (http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html), [인터페이스 및 상속] (http : // docs. oracle.com/javase/tutorial/java/IandI/index.html) 및 [키 바인딩] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)을 참조하십시오. 다음 번 문제에 직면하게됩니다. – MadProgrammer
또한 객체 디자인 원칙, [Single Responsability Principle] (http://www.oodesign.com/single-responsibility-principle.html)에 대해 배우게 될 것이며, GamePanel 클래스는 한 가지, keyListener 또는 Runnable이 아니라 JPanel이 될 수 있습니다. – nachokk