當我使用這段代碼時,圖像(從我定義的spritesheet的部分)繪製,但它在前面的實例上重繪它。我需要「圖像」來「移動」。 Im使用paint方法,用Graphics重繪在init()方法中定義的sprite。我只是試圖創建一個「小人物」,一旦它被添加到程序中,開始從屏幕的左下方「行走」到右邊,本身(沒有用戶動作移動它)。目前,我可以得到它只是把圖像和「污跡」,它在屏幕的底部(它不斷地繪製它在本身)雪碧繪圖問題
(除去進口爲簡單起見)
public class Main extends JFrame {
BufferedImage sprite;
int War_x = 10, War_y = 640, War_dx = 1;
public Main()
{
//(X,Y) ---- (LEFT,UP)
//Window theGUI = new Window();
//JFrame theGUI = new JFrame();
setSize(870,720);
setTitle("Game");
setBackground(Color.red);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
init();
}
public void init()
{
BufferedImageLoader loader = new BufferedImageLoader();
BufferedImage spriteSheet = null;
System.out.println("bruh");
try {
spriteSheet = loader.loadImage("warrior.png");
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
SpriteSheet ss = new SpriteSheet(spriteSheet);
sprite = ss.grabSprite(0,130,32,36);
}
@Override
public void paint(Graphics g){
g.drawImage(sprite, War_x, War_y,64, 64, null);
warrior start = new warrior();
start.start();
repaint();
}
public static void main(String[] args){
Main main = new Main();
}
public class warrior implements ActionListener{
public Timer T = new Timer(100, this);
public void start(){
T.start();
}
@Override
public void actionPerformed(ActionEvent e) {
War_x += War_dx;
}
}
}
即時通訊仍然是這個新的,所以虐待你的建議使用畫布。但是,循環的問題是,我需要延遲或FPS速率,以便用戶實際看到精靈正在移動。我試着用這個定時器,但即時通訊並不是那麼棒。 – user2826539
如果將繪圖放入線程中,可以使其非常簡單,並且只需沿着add.sleep()的一行就可以了。我不確定你想要如何複雜,但它可能是你最好的選擇。 – Sh4d0wsPlyr
我如何設置線程?目前,我相信使用thread.sleep()會導致整個幀睡眠。我計劃在屏幕上移動多個獨立的小精靈,這種方法對於這種情況仍然是最好的嗎? – user2826539