首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Java在屏幕上添加计数器

用Java在屏幕上添加计数器
EN

Stack Overflow用户
提问于 2014-03-22 18:23:36
回答 2查看 770关注 0票数 0

我刚刚开始上大学的Java课程,我的最后一次测试是用GOval创建一个简单的球,并使它从窗口边框弹出。我想在球上加一个简单的计数器,这样每次弹跳都会增加。

我知道如何反击点击率,我只是不知道如何让它在屏幕上显示,把它放在我的球和跟随它。

代码语言:javascript
复制
public class Ball extends GraphicsProgram{
    private static final double BALL_SIZE=50;
    private static final double SPEED=3;
    private static final double GRAVITY=0;
    private static final double ELASTICITY=1;
    private static final double PAUSE = 1000/48.0;
    private static boolean HIT = false;
    private static boolean MOVE_TOP = false;
    private static int COUNTER=0;

    public void run(){
        GOval ball = makeBall();
        add(ball);
        bounce(ball);
    }

    private GOval makeBall(){
        GOval result = new GOval (0,0,BALL_SIZE,BALL_SIZE);
    result.setFilled(true);
    result.setColor(Color.BLACK);
    return result;

}

private void bounce(GOval ball){
    double dx=SPEED;
    double dy=20;
    while(true){
        ball.move(dx,dy);
        if(MOVE_TOP==false){
            dy+=GRAVITY;
            }
        else{
            dy-=GRAVITY;
            }
        if(ballHitBottom(ball) && dy>=0){
            dy*=-ELASTICITY;
            COUNTER++;
            if(HIT==false)
            HIT=true;

        }
        if(ballHitTop(ball) && dy<=0){
            if(HIT){
            dy*=-ELASTICITY;
            COUNTER++;
            }
        }

        if(ballHitRight(ball) && dx>=0){
            if(HIT){
            dx*=-ELASTICITY;
            COUNTER++;
            }
        }

        if(ballHitLeft(ball) && dx<=0){
            if(HIT){
            dx*=-ELASTICITY;
            COUNTER++;
            }
        }
        pause(PAUSE);
    }
}
private boolean ballHitBottom(GOval ball){
    MOVE_TOP=true;
    double bottomY=ball.getY() + ball.getHeight();
    return bottomY >= getHeight();
}

private boolean ballHitTop(GOval ball){
    double topY=ball.getY();
    MOVE_TOP=false;
    return topY <= 0;
}

private boolean ballHitRight(GOval ball){
    double rightX=ball.getX() + ball.getWidth();
    return rightX >= getWidth();
}

private boolean ballHitLeft(GOval ball){
    double leftX=ball.getX();
    return leftX <= 0;
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-22 18:45:32

代码语言:javascript
复制
private GLabel label;

public void run(){
    GOval ball = makeBall();
    label = new GLabel(String.valueOf(COUNTER), BALL_SIZE/2, BALL_SIZE/2);
    add(ball);
    add(label);
    bounce(ball);
}

move内部,在ball.move(dx,dy)

代码语言:javascript
复制
label.move(dx,dy);

move内部,在pause(PAUSE)之上

代码语言:javascript
复制
label.setLabel(String.valueOf(COUNTER));
票数 2
EN

Stack Overflow用户

发布于 2014-03-23 01:32:39

要使计数器更新,每次击球时使用label.revalidate()

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22581691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档