java awt 添加 图

求助高手:我想用java写一个桌面弹球的动画程序,建类ball,和窗口DrawBall希望在ball类里建立线程并在DrawBall中画出自己并不断更新位置,达到动画目的... 求助高手:
我想用 java写一个桌面弹球的动画程序, 建类ball, 和窗口 DrawBall
希望在ball类里建立线程并在 DrawBall中画出自己 并不断更新位置,达到动画目的, 但是在ball类中怎能够有平paint方法在DrawBall中画呢?

我是希望在main中用ball的构造函数实例几个ball,然后在DrawBall中就可以看到几个球在动
注: setXY() 用来刷新球的位置 1、2、3.gif是图片
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
class ball extends Component implements Runnable
{ Thread thread;
static int boundX=1300-128; // 所有球的运行区域, 所以用static
static int boundY=780-115;
int xChange=0; // xChange 的值 0和1分别表示当前水平方向的运动是与x轴同向还是反向
int yChange=0;
int X=10; //球的坐标 先初始化为(10,20)
int Y=20;
Image image;
Toolkit tool;
ball(String pic) //*******************构造函数
{ this.setBallImage(pic);
this.thread=new Thread(this);
}
void setBallImage(String s) // s为gif 或 jpeg 图像的文件名 如: pictureName.gif
{this.tool=getToolkit();
this.image=tool.getImage(s);
}

void setXY(int bX,int bY) //设置下一时刻的坐标 ( 下一步: 可用直线方程的迭代式)
{
if(xChange==0)
{if(X==bX)
{xChange=1;}
X++;
}
else if(xChange==1)
{if(X==0)
{xChange=0;}
X--;
}

if(yChange==0)
{if(Y==bY)
{yChange=1;}
Y++;
}
else if(yChange==1)
{if(Y==0)
{yChange=0;}
Y--;
}
}

public void run()
{

try { DrawBall.myGraphics.drawImage(image,X,Y,128,128,this);
setXY(boundX,boundY);
this.thread.sleep(5);
}
catch(InterruptedException e)
{System.out.println(e);}

}
} //******************************************************ball类定义结束

class DrawBall extends Frame
{
static Graphics myGraphics;

DrawBall()
{ myGraphics=getGraphics();

setBounds(0,0,1300,780);
addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);} });
setVisible(true);
validate();

while(true)
{ myGraphics.drawImage(B[0].image,B[0].X,B[0].Y,128,128,this);
myGraphics.drawImage(B[1].image,B[1].X,B[1].Y,128,128,this);
myGraphics.drawImage(B[2].image,B[2].X,B[2].Y,128,128,this);
}

}
}
public class Runball
{public static void main(String args[])
{
DrawBall win=new DrawBall();
ball B[]=new ball[3];
B[0]=new ball("1.gif");
B[1]=new ball("2.gif");
B[2]=new ball("3.gif");
B[0].thread.start();
B[1].thread.start();
B[2].thread.start();

}
}
展开
 我来答
NiHaoWMX
2009-06-24 · TA获得超过116个赞
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
你的分好少哦!!!
我写过一个打字游戏。 你线程里面的方法
public void run()
{

try { DrawBall.myGraphics.drawImage(image,X,Y,128,128,this);
//应该操作DrawBall对象的实例。ball=new DrawBall() 然后设置它的坐标。
setXY(boundX,boundY);
this.thread.sleep(5);
}
catch(InterruptedException e)
{System.out.println(e);}

}

诶 你线程里面操作的一定要是new出来的实例。然后线程去改变它的属性值。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式