2012-07-25 44 views
0

嗨朋友,我正在嘗試編寫一個簡單的程序,它可以順利地向右,向左,向上和向下移動一個小方塊。在java小應用程序中使對象運動平滑

正因爲如此,廣場確實會在四個方向上移動,但當試圖改變廣場方向時存在明顯的延遲。我計劃最終編寫一個類似於「磚頭」遊戲的小遊戲,但爲了這樣做,我的對象必須順利移動。有人可以給我一些關於如何實現這一目標的建議嗎?

import java.applet.Applet; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.event.MouseListener; 

public class FutureGame extends Applet implements KeyListener{ 

int deltax; 
int deltay; 

public void init(){ 

    deltax = 0; 
    deltay = 0; 
    this.addKeyListener(this); 
} 

@Override 
public void keyPressed(KeyEvent ke) { 

    if(ke.getKeyCode() == ke.VK_RIGHT){ 
     deltax = deltax +10; 
    } 

    if(ke.getKeyCode() == ke.VK_LEFT){ 
     deltax = deltax - 10; 
    } 

    if(ke.getKeyCode() == ke.VK_UP){ 
     deltay = deltay - 10; 
    } 

    if(ke.getKeyCode() == ke.VK_DOWN){ 
     deltay = deltay +10; 
    } 
    this.repaint(); 
} 
@Override 
public void keyReleased(KeyEvent arg0) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void keyTyped(KeyEvent arg0) { 
    // TODO Auto-generated method stub 

} 

public void paint(Graphics g){ 

    g.drawRect(deltax, deltay, 10, 10); 
} 

} 

回答

1

如果你的線程(遊戲的主要計算)的睡眠/等待時間是很小的,你的關鍵聽衆不能說小的時間內趕上你的擊鍵。讓這些線程等待時間更長,然後重試。我的意思是在try-catch塊中的東西。

您正在直接繪製。使用緩衝/雙緩衝。

Changing the buffer is much more faster than changing the contents of screen. 
+0

好吧,我會嘗試雙緩衝 – rage 2012-07-25 11:50:16

+0

是你的線程等待15毫秒以下的時間? – 2012-07-25 11:51:41

+0

我試過雙緩衝,它並沒有真正的幫助。我不確定你的意思是我的線程等待時間,我沒有任何明確的線程在程序中..你是否想在我的keypressed方法中添加一些Thread.sleep()? – rage 2012-07-25 11:54:16

0

首先使用的paintComponent()的繪製方法,然後抹上圖形克至Graphics2D的 - 使之更加「輕快」,和最後但並非最不重要跟隨代碼作爲java2s.com網站java2s.com - Advanced Graphics - Smooth Moves