我只是做了一個教程,如何使一個2D背景上的人物基本上像一個非常有限的平臺遊戲,沒有重力或任何東西,我已經遇到了一些滯後,我假設因爲它的方式按鍵/釋放的作品,但我想知道是否有任何方法來優化它,可能是因爲我沒有動畫它只是一個塊,但林不知道,就像如果我舉起,離開,然後我放手左邊,並按下權利,而所有的時間仍然舉起它只是上升,直到我放手,它滯後於左右等我將粘貼下面的代碼。謝謝!:Java代碼優化
//@@@MAIN CLASS, NAMED CHECKERS ARBITRARILY
import javax.swing.*;
public class Checkers {
public static void main(String[] args) {
JFrame frame = new JFrame("2D Game");
frame.add(new Board());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1200,326);
frame.setVisible(true);
}
}
//@@@@@@@@@@@@@@@@@
//class called Dude this is my character(circle)
import javax.swing.ImageIcon;
import java.awt.Image;
import java.awt.event.KeyEvent;
public class Dude {
int x, dx, y, dy;
Image still;
public Dude(){
ImageIcon i = new ImageIcon("C:/still.png");
still = i.getImage();
x = 10;
y = 150;
}
public void move(){
x = x + dx;
y = y + dy;
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public Image getImage(){
return still;
}
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT)
dx = -2;
if (key == KeyEvent.VK_RIGHT)
dx = 2;
if (key == KeyEvent.VK_UP)
dy = -2;
if (key == KeyEvent.VK_DOWN)
dy = 2;
}
public void keyReleased(KeyEvent e){
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT);
dx = 0;
if (key == KeyEvent.VK_RIGHT);
dx = 0;
if (key == KeyEvent.VK_UP)
dy = 0;
if (key == KeyEvent.VK_DOWN)
dy = 0;
}
}
//@@@@@@@@@@@@@@@@@@@
//this is my board class (background)
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class Board extends JPanel implements ActionListener{
Dude p;
Image img;
Timer time;
public Board(){
p = new Dude();
addKeyListener(new AL());
setFocusable(true);
ImageIcon i = new ImageIcon("C:/test.png");
img = i.getImage();
time = new Timer(5, this);
time.start();
}
public void actionPerformed(ActionEvent e){
p.move();
repaint();
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(img, 0, 0, null);
g2d.drawImage(p.getImage(), p.getX(), p.getY(), null);
}
private class AL extends KeyAdapter{
public void keyReleased(KeyEvent e){
p.keyReleased(e);
}
public void keyPressed (KeyEvent e){
p.keyPressed(e);
}
}
}
你有關鍵重複嗎?即你是否收到bazillion'keyPressed'事件? – Bringer128
您可以通過開關使keyPressed和keyReleased方法更優化。現在所有4個檢查都必須執行。這可能不會對您的整體表現造成太大的影響,這就是爲什麼這是一個評論,而不是一個答案。 –