采用多线程制作动画

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

import Java.awt.*;

import java.applet.*;

//注重到这个程序和Hello程序有什么不一样吗?在这个程序中多了implements Runnable。

public class carton extends Applet implements Runnable

{

Image img;

Thread thd = null;

int i;

int imgWidth = 150;

int imgHeight = 150;

int ncyc=1 ;

String namestr[] = new String[5] ;

//当线程被激活时开始运行run()函数。

public void run()

{

for (int j=0; j<5; j++)

{

namestr[j] = Integer.toString(j,8)+".jpg" ;

}

ncyc = -1 ;

while (true)

{

if (ncyc<=3) ncyc= ncyc+1 ; //初始化循环控制参数

else ncyc = 0 ;

img = getImage(getCodeBase(), namestr[ncyc]) ;

if (img != null)

{

i=imgHeight;

//repaint();

}

try {Thread.sleep(1000);} catch (InterruptedException e){}

i=0;

while (i<imgHeight)

{

repaint();

try {Thread.sleep(50);} catch (InterruptedException e){}

i+=4;

}

}

}

//每次代码在新位置处重画位图,它都要调用repaint。该函数调用可重载的update方法。update方法与paint方法是相同的,这里为啥不用怕paint(Graphics g)呢?除了paint方法在绘图前要清除窗口,而update方法不清除(假如你把update方法改名为paint,你会看到有什么不同)。

public void update(Graphics g)

{

if (img != null)

{

g.clipRect(0, 0, imgWidth, i);

g.drawImage(img, 0, i - imgHeight, null);

}

}

public void start()

{

if (thd == null)

{

thd = new Thread(this);

thd.start();

}

}

public void stop()

{

thd = null;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航