发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 SOA

关于applet最简单的图片移动效果的优化求解

2008-06-28 19:55
赞助商链接

先贴出代码,没啥花头的,有幅背景图片,然后我让另一个小图片在背景图片上自动移动,效果也出来了,也没有闪烁,感觉是很不错的了,但是,我抱着试试看的态度请教一下,能不能有更好的效果?比方说,象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);
}



}

2008-06-28 20:04

补充一下,原因我也知道,因为我图片的移动每次偏移量是2,所以原理等于擦掉原来的,在新的地方重画,这样如果把偏移量设置为20,把睡眠时间设为1000,那么很明显的,图片的移动是呆滞机械的,而我看了下gba模拟器,把它调到最慢最慢,发现图片的移动是完全平滑,而不是擦除从前再画现在的这种机制,是非常非常连续的,所以我想请教java图片移动能否到如此完美的境界?谢谢

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com