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();
}
} 展开
我想用 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();
}
} 展开
1个回答
展开全部
你的分好少哦!!!
我写过一个打字游戏。 你线程里面的方法
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出来的实例。然后线程去改变它的属性值。
我写过一个打字游戏。 你线程里面的方法
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出来的实例。然后线程去改变它的属性值。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询