關於applet最簡單的圖片移動效果的最佳化求解

roy2004發表於2008-06-28
先貼出程式碼,沒啥花頭的,有幅背景圖片,然後我讓另一個小圖片在背景圖片上自動移動,效果也出來了,也沒有閃爍,感覺是很不錯的了,但是,我抱著試試看的態度請教一下,能不能有更好的效果?比方說,象gba模擬器上的移動效果,完全平滑,沒有任何任何抖動,根本感覺不到圖片一幀一幀地移動,但是我這段程式碼出來的效果,就是能感覺到圖片是一幀一幀的移動,以目前我的能力,已經最佳化不了了。
謝謝。
public class flyDragon extends Applet implements Runnable{
Image bg,currentImg;
MediaTracker tracker;
Image []dragon=new Image[6];
int x,y=0;
int flydistance=20;
Thread thread;
int birdImage_width,bg_width,bg_height;
Image offScreenImage;
Graphics offScreenG;

Image offl;
public void init(){
tracker=new MediaTracker(this);
for(int i=0;i<dragon.length;i++){
dragon=getImage(this.getCodeBase(),"yidongtou2.png");
tracker.addImage(dragon, 0);
}
currentImg=dragon[0];
bg=getImage(this.getCodeBase(),"maxMap.PNG");
tracker.addImage(bg, 0);
try{
tracker.waitForAll();
}catch(Exception e){
e.printStackTrace();
}

bg_width=bg.getWidth(this);
bg_height=bg.getHeight(this);



this.setSize(720, 480);
}

public void start(){
if(thread==null){
thread=new Thread(this);
thread.start();
}
}
public void stop(){
if(thread!=null){
thread.stop();
thread=null;
}
}

public void run(){
birdImage_width=dragon[0].getWidth(this);
int i=0;int flag=0;
while(true){
i=(i+1)%dragon.length;
if(flag==0&&y<=700)y+=2;
if(y>700)flag=1;
if(flag==1&&y>0)y-=2;
if(y<0)flag=0;
repaint();
try {
Thread.sleep(66);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
public void paint(Graphics g){
g.drawImage(bg, 0, 0,720, 480,this);
g.drawImage(dragon[0], y, 0,this);

// g.drawImage(bg, 0, 0, 720, 480, 0, 0, 0, 0, this);
}

public void update(Graphics g){
Dimension d =this.size();
if(offl==null){
offl=this.createImage(720, 480);
offScreenG=offl.getGraphics();
}
offScreenG.clearRect(0,0,720, 480);
paint(offScreenG);
g.drawImage(offl, 0, 0,720, 480,null);


}
public static void main(String art[]){
flyDragon l = new flyDragon();
l.setSize(400,400);
l.setVisible(true);
}



}

相關文章