先不好意思的说下 我刚注册这个号码 第一次进这个论坛,所以……没有分哦……
要求是: 一定要有6个线程分别控制6个圆形的运动
java编了个多线程的 但好耗CPU资源啊 为什么呀 具体改怎么解决?
还有一个问题就是怎么给上面6个圆形分别上不同的颜色呀 不会是要创建6个gOffScreen来分别上色吧? 求各位高手大侠指点迷津了import java.awt.*;
import java.lang.Math;
import java.applet.*;
public class e3 extends Applet implements Runnable
{
int []x=new int[6];
int []y=new int[6];
double []degree=new double[10];
Thread []planet=new Thread[10];
Image offScreenImg=null; //存放备用屏幕的内容 /*************** init() ***************/
public void init()
{
for(int i=0;i<6;i++)
{
x[i]=-1000;
y[i]=-1000;
planet[i]= new Thread(this);
}
this.setSize(600, 600);
} public void start()
{
for(int i=0;i<6;i++)
planet[i].start();
}
public void stop()
{ }
public void paint(Graphics g)
{ } /*************** update ***************/
public void update(Graphics g)
{
if(offScreenImg==null )
offScreenImg=this.createImage(600,600);
Graphics gOffScreen = offScreenImg.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.white);
gOffScreen.fillRect(0, 0, 600, 600);
gOffScreen.setColor(c);
//paint(gOffScreen);
gOffScreen.drawOval(x[0],y[0], 10, 10);
gOffScreen.drawOval(x[1],y[1], 15, 15);
gOffScreen.drawOval(x[2],y[2], 20, 20);
gOffScreen.drawOval(x[3],y[3], 25, 25);
gOffScreen.drawOval(x[4],y[4], 30, 30);
gOffScreen.drawOval(x[5],y[5], 35, 35);
g.drawImage(offScreenImg,0,0,null); } /*************** run() 6个小球的运动算法 ***************/
public void run()
{
while(true)
{
repaint();
if(Thread.currentThread()==planet[0])
{
x[0]=(int)(100*Math.cos(degree[0])+200);
y[0]=(int)(60*Math.sin(degree[0])+200);
degree[0]=degree[0]+(Math.PI/100);
}
else if(Thread.currentThread()==planet[1])
{
x[1]=(int)(70*Math.cos(degree[1])+200);
y[1]=(int)(50*Math.sin(degree[1])+200);
degree[1]=degree[1]+(Math.PI/150);
}
else if(Thread.currentThread()==planet[2])
{
x[2]=(int)(70*Math.cos(degree[2])+200);
y[2]=(int)(50*Math.sin(degree[2])+200);
degree[2]=degree[2]+(Math.PI/200);
}
else if(Thread.currentThread()==planet[3])
{
x[3]=(int)(70*Math.cos(degree[3])+200);
y[3]=(int)(50*Math.sin(degree[3])+200);
degree[3]=degree[3]+(Math.PI/250);
}
else if(Thread.currentThread()==planet[4])
{
x[4]=(int)(70*Math.cos(degree[4])+200);
y[4]=(int)(50*Math.sin(degree[4])+200);
degree[4]=degree[4]+(Math.PI/300);
}
else if(Thread.currentThread()==planet[5])
{
x[5]=(int)(70*Math.cos(degree[5])+200);
y[5]=(int)(50*Math.sin(degree[5])+200);
degree[5]=degree[5]+(Math.PI/350);
}
try{Thread.sleep(10);}
catch(InterruptedException E){E.printStackTrace();}
}
}
}
要求是: 一定要有6个线程分别控制6个圆形的运动
java编了个多线程的 但好耗CPU资源啊 为什么呀 具体改怎么解决?
还有一个问题就是怎么给上面6个圆形分别上不同的颜色呀 不会是要创建6个gOffScreen来分别上色吧? 求各位高手大侠指点迷津了import java.awt.*;
import java.lang.Math;
import java.applet.*;
public class e3 extends Applet implements Runnable
{
int []x=new int[6];
int []y=new int[6];
double []degree=new double[10];
Thread []planet=new Thread[10];
Image offScreenImg=null; //存放备用屏幕的内容 /*************** init() ***************/
public void init()
{
for(int i=0;i<6;i++)
{
x[i]=-1000;
y[i]=-1000;
planet[i]= new Thread(this);
}
this.setSize(600, 600);
} public void start()
{
for(int i=0;i<6;i++)
planet[i].start();
}
public void stop()
{ }
public void paint(Graphics g)
{ } /*************** update ***************/
public void update(Graphics g)
{
if(offScreenImg==null )
offScreenImg=this.createImage(600,600);
Graphics gOffScreen = offScreenImg.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.white);
gOffScreen.fillRect(0, 0, 600, 600);
gOffScreen.setColor(c);
//paint(gOffScreen);
gOffScreen.drawOval(x[0],y[0], 10, 10);
gOffScreen.drawOval(x[1],y[1], 15, 15);
gOffScreen.drawOval(x[2],y[2], 20, 20);
gOffScreen.drawOval(x[3],y[3], 25, 25);
gOffScreen.drawOval(x[4],y[4], 30, 30);
gOffScreen.drawOval(x[5],y[5], 35, 35);
g.drawImage(offScreenImg,0,0,null); } /*************** run() 6个小球的运动算法 ***************/
public void run()
{
while(true)
{
repaint();
if(Thread.currentThread()==planet[0])
{
x[0]=(int)(100*Math.cos(degree[0])+200);
y[0]=(int)(60*Math.sin(degree[0])+200);
degree[0]=degree[0]+(Math.PI/100);
}
else if(Thread.currentThread()==planet[1])
{
x[1]=(int)(70*Math.cos(degree[1])+200);
y[1]=(int)(50*Math.sin(degree[1])+200);
degree[1]=degree[1]+(Math.PI/150);
}
else if(Thread.currentThread()==planet[2])
{
x[2]=(int)(70*Math.cos(degree[2])+200);
y[2]=(int)(50*Math.sin(degree[2])+200);
degree[2]=degree[2]+(Math.PI/200);
}
else if(Thread.currentThread()==planet[3])
{
x[3]=(int)(70*Math.cos(degree[3])+200);
y[3]=(int)(50*Math.sin(degree[3])+200);
degree[3]=degree[3]+(Math.PI/250);
}
else if(Thread.currentThread()==planet[4])
{
x[4]=(int)(70*Math.cos(degree[4])+200);
y[4]=(int)(50*Math.sin(degree[4])+200);
degree[4]=degree[4]+(Math.PI/300);
}
else if(Thread.currentThread()==planet[5])
{
x[5]=(int)(70*Math.cos(degree[5])+200);
y[5]=(int)(50*Math.sin(degree[5])+200);
degree[5]=degree[5]+(Math.PI/350);
}
try{Thread.sleep(10);}
catch(InterruptedException E){E.printStackTrace();}
}
}
}
解决方案 »
- CFont::GetLogFont(&logFont),字号应该是logFont中哪个成员?
- 神奇问题:应用程序在win2003比XP快100%?怎么回事?
- 串口控制MODEM通讯程序,运行一段时间不知为何就无法对串口操作,只能需关机,拔下插座才能使MODEN恢复
- 寻找MFC Windows程序设计(第2版)的电子版
- .Lib一定靜態鏈接庫文件嗎?能否把它轉成一個可以被其它語言調用的Dll文件?
- insert into 语法 !
- 请问谁有手机号码和地区对应的数据吗?高分!!!!
- 如何往开始菜单里加东西
- OpenFileName多选文件显示的问题!
- 如何使CDateTimeCtrl的值为空?--紧急十分
- 请教达人——在VC中导入一个文图实现Splash screen控件的功能,提示位图无效(不是格式的问题)
- 急问:根据圆上的顶点数如何设置每个面的颜色的问题
看起来就像是一团浆糊。