public class New01
{
public New01()//定义主类DrawFrame
{
Frame f=new Frame("my app");//建立框架
GamePanel mp=new GamePanel();//建立绘图容器
f.setLocation(300,200);
f.setSize(300,300);
f.add(mp);//将GamePanel对象添加到Frame对象中去
f.setVisible(true);
}
public static void main(String[] args)
{
new New01();//实例化
//GamePanel.gameLoop();
}
}
class GamePanel extends Panel
{
private int x;//该变量表示小球左上角的横坐标
private int y;//该变量表示小球左上角的纵坐标
private int diameter;//该变量表示小球的直径
public GamePanel()//构造函数,初始化各个变量
{
x=50;
y=50;
diameter=100;
}
public void paint(Graphics g)
{
g.setColor(Color.BLUE);//设置画笔颜色为蓝色
g.fillOval(x,y,diameter,diameter);//调用画圆的方法绘制小球
}
public void gameLoop()//该方法用来动态改变小球的坐标,并对小球进行重绘
{
while(true)
{
x++;
for(int i=1;i<10000000;i++)
{}
repaint();
}
}
}
那是因为你设置的坐标变化的方法gameLoop没有被调用啊
小球动的原理是:
设置一个初期坐标
然后改变小球的坐标(可以使用一些函数了)
然后通过调用repaint()方法来间接调用这个paint(Graphics g)方法
你的代码做如下改动:
gameLoop()方法内部:
GamePanel中增加如下代码:
在x++下面
` if (x > 600) {
x = 50;
}`
把那个`for(int i=1;i<10000000;i++)`循环去掉
改成
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
New01
中
要进行这个gameLoop方法的调用
在方法public New01()的最后一行添加如下代码:
try {
Thread.sleep(3000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
mp.gameLoop();
改动之后球就可以动了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。