2 yaqiukasi yaqiukasi 于 2016.04.16 13:33 提问

java问题,为什么画出的小球不能动

import java.awt.*;
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();
    }
}

}

3个回答

fk002008
fk002008   2016.04.18 11:21
已采纳

java问题,为什么画出的小球不能动

那是因为你设置的坐标变化的方法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();

改动之后球就可以动了
yaqiukasi
yaqiukasi 谢谢你的回答,对我帮助很大
大约 2 年之前 回复
CSDNXIAON
CSDNXIAON   2016.04.16 13:42

JAVA循环——小球下落问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Andreassss
Andreassss   2016.04.16 15:36

public class New01 {
Frame f;
GamePanel panel;
public New01()//定义主类DrawFrame
{
f=new Frame("my app");//建立框架
panel=new GamePanel();//建立绘图容器
f.setLocation(300,200);
f.setSize(300,300);
f.add(panel);//将GamePanel对象添加到Frame对象中去
f.setVisible(true);
}

public static void main(String[] args)
{
    new New01().panel.gameLoop();
}

}

yaqiukasi
yaqiukasi 谢谢你的回答,对我帮助很大
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【C++】小球下落
一个球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求小球在第10次落地时,共经过多少米?第10次反弹有多高? #include"iostream.h" #include"stdio.h" void main() { double m = 100;    double n=m; double sum = 100; int i; for(i=0;i { n = n/2; su
201803CCF第二题(碰撞的小球)Java
题目描述:数轴上有长度为L(L为偶数)的线段,左端点0,右端点L。n个小球开始都是向右,且都在偶数坐标上,速度大小为1单位长度每秒。当小球到达端点(0或L)时,立即反向,速度不变;当两个小球相撞(在同一位置),立即反向,速度不变。现在告诉你线段长度L,小球数量n,以及n个小球初始位置,请计算t秒之后各个小球的位置。提示:同一时刻同一位置最多只有两个小球相撞,由于速度始终不变,所以碰撞时间也是整数,...
五十道编程小题目 --- 10 反弹的小球 java
【程序10】  题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多 少米?第10次反弹多高?  public class BallFlip { public static void ballFlip(double m, double n){ StringBuilder sb = new StringBuilde
Java图形界面基础案例-飞行的小球
Java线程案例
【Java实践】十二小球天平三次称重问题
十二个小球用天平三次称重找出其中唯一一个质量不同(或轻或重)的小球,用java代码实现。 思路: 将十二个小球分别标记为A,B,C,D,E,F,G,H,I,J,K,L,将它们以四个为一组分为三组也就是:第一组:ABCD;第二组:EFGH;第三组:IJKL。 首先我们考虑将第一组和第二组放置在天平两端进行称重(第一次称重),根据称重的结果可分为两种情况:相等和不
Java-小球弹跳问题
目标效果: 源码: import java.util.Scanner; /** * 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下, 求它在第n次落地时,共经过多少米?第n次反弹多高? * @author Vivinia * */ public class bollHeight { public static void main(Str
多线程的实现--操作系统
采用vc++,利用小球的走动模拟线程的实现,目前只能动一个小球,要用的请自行修改
一些简单的java编程题(3) ————小球落地问题
版权声明:本文为博主原创文章,未经博主允许不得转载。 /* (程序头部注释开始) 版权声明:保留个人权利。 如程序有不当之处,敬请指正。 * 文件名称: 《一些简单的java编程题(3) ————小球落地问题》 * 作 者: 那就去巴黎 * 完成日期: 2018 年 01 月 30 日 * 版 本 号: J
java基础-小球下落问题
小球下落问题描述:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?问题的关键有:1.要求得第十次落地时,球走的总路程,即包括前九次的下落和弹起和第十次的下落                        2.一次落地包括:下落和弹起,先下落,再弹起。示意图如图所示:                               ...
java 物体运动过程中闪烁问题浅谈
Java的强大特性让其在游戏编程和多媒体动画处理方面也毫不逊色。在Java游戏编程和动画编程中最常见的就是对于屏幕闪烁的处理。本文从J2SE的一个再现了屏幕闪烁的Java Appilication简单动画实例展开,对屏幕闪烁的原因进行了分析,找出了闪烁成因的关键:update(Graphics g)函数对于前端屏幕的清屏。由此引出消除闪烁的方法——双缓冲。双缓冲是计算机动画处理中的传统技术,在用其