поэтому я использую netbeans, и я начинаю входить в игры для кодирования ... и я сделал это до сих пор без ошибок, однако, когда я запускаю его только в серой коробке с моим названием " игра zachs появляется и то это .... пожалуйста, помогите, если вы знаете, проблема 1 -СпасибоСерый экран в Netbeans
package swing9;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class JavaApplication2 extends JFrame implements Runnable {
int x, y, xDirection, yDirection;
Font font = new Font("Arial", Font.BOLD | Font.ITALIC, 30);
public void run() {
try {
while (true) {
move();
Thread.sleep(5);
}
} catch (Exception e) {
System.out.println("Error");
}
}
public void move() {
x += xDirection;
y += yDirection;
if (x <= 0)
x = 0;
if (x >= 300)
x = 300;
if (y <= 50)
y = 50;
if (y <= 300)
y = 300;
}
public void seyXDir(int xdir) {
xDirection = xdir;
}
public void setYDirection(int ydir) {
yDirection = ydir;
}
public class AL extends KeyAdapter {
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == e.VK_LEFT) {
int setXDirection = -1;
}
if (keyCode == e.VK_RIGHT) {
int setXDirection = +1;
}
if (keyCode == e.VK_UP) {
int setYDirection = -1;
}
if (keyCode == e.VK_DOWN) {
int setYDirection = +1;
}
}
}
public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == e.VK_LEFT) {
int setXDirection = 0;
}
if (keyCode == e.VK_RIGHT) {
int setXDirecetion = 0;
}
if (keyCode == e.VK_UP) {
int setYDirectiom = 0;
}
if (keyCode == e.VK_DOWN) {
int setYDirecction = 0;
}
}
public JavaApplication2() {
addKeyListener((KeyListener) new JavaApplication2.AL());
setTitle("Zachs Game");
setSize(300, 300);
setResizable(false);
setVisible(true);
setBackground(Color.blue);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x = 150;
y = 150;
}
public void paintComponent(Graphics g) {
g.setColor(Color.red);
g.drawString("Play", 40, 40);
g.setFont(font);
g.setColor(Color.red);
g.fillOval(x, y, 15, 15);
repaint();
}
public static void main(String[] args) {
new JavaApplication2();
// threads
Thread t1 = new Thread();
t1.start();
}
}
Был ли 'keyReleased()' должен быть частью класса 'AL'? Я часто обнаруживаю, что маркер '@ Override' очень удобен для поиска небольших ошибок. –
'Thread.sleep (5)' достаточно близко к 'Thread.sleep (0)', так как не имеет значения. 60fps - это примерно 'Thread.sleep (15)', 25fps - примерно 'Thread.sleep (40)'. Большинство людей не будут видеть большую разницу более 30 кадров в секунду на большинстве мониторов ... – MadProgrammer
Ваш «KeyListener» вряд ли когда-либо срабатывает, поскольку сам JFrame не может получить фокус, так как на нем есть другие компоненты, подумайте об использовании [привязки клавиш] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) вместо – MadProgrammer