java上移动,Java在屏幕上移动对象

我正试图在我的

java窗口上移动一列火车并遇到严重问题.我有一个火车课,我在那里制作了火车,还有一个驾驶课,它应该可以移动火车.我需要让整列火车从右向左移动,直到它“通过”屏幕的左边缘.然后添加一个if语句来更改dx,以便列车在右侧重新启动.以下是我尝试过的但是没有用.有人可以帮我吗?

public class Driver extends GraphicsProgram

{

//~ Instance/static variables .............................................

private static final int N_STEPS = 1000;

private static final int PAUSE_TIME = 20;

private static final double TRAIN_LENGTH = 320;

//~ Constructor ...........................................................

// ----------------------------------------------------------

/**

* The run() method of the Driver Class.

* Creates an instance of the Train Class.

* Responsible for animating the train across the screen.

*/

public void run()

{

Train train = new Train(getGCanvas());

for (int i = 0; i < N_STEPS; i++) {

train.move(-100, 0);

pause(PAUSE_TIME);

}

最佳答案 这是一个用摇摆做的小演示.只需用火车图像替换黑色矩形就可以了.

诀窍是使用单独的线程(或计时器)来进行动画循环(通常称为游戏循环).循环仅告诉窗口重绘自己,并且在每次重绘时,首先计算动画对象的新位置,然后绘制它们.

import javax.swing.*;

import java.awt.*;

public class TrainDemo {

public static void main(String[] args) {

JFrame frame = new JFrame("Train Demo");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(800, 400);

frame.setLocationRelativeTo(null);

frame.add(new TrainCanvas());

frame.setVisible(true);

}

}

class TrainCanvas extends JComponent {

private int lastX = 0;

public TrainCanvas() {

Thread animationThread = new Thread(new Runnable() {

public void run() {

while (true) {

repaint();

try {Thread.sleep(10);} catch (Exception ex) {}

}

}

});

animationThread.start();

}

public void paintComponent(Graphics g) {

Graphics2D gg = (Graphics2D) g;

int w = getWidth();

int h = getHeight();

int trainW = 100;

int trainH = 10;

int trainSpeed = 3;

int x = lastX + trainSpeed;

if (x > w + trainW) {

x = -trainW;

}

gg.setColor(Color.BLACK);

gg.fillRect(x, h/2 + trainH, trainW, trainH);

lastX = x;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值