小编e-b*_*ett的帖子

多个摆动计时器

我有(应该是)一个简单的问题需要解决,我对其他解决方法持开放态度.我对其他解决方案持开放态度.

问题:我们正在使用java swing来显示基于回合的,基于图块的游戏的图形.我正在使用带有图标的jlabels,绝对定位.

为了动画运动,我使用一个摆动计时器,一次更新4个像素的位置,慢慢地向右,向左移动精灵等.

为了实现这一目标,我正在运行一个计时器,它工作得非常好.当我试图向下移动然后向右移动时,问题出现了.

精灵向下移动,从不向右移动,如果我通过某些控制台打印观察执行,很明显两个计时器同时运行.我已经在互联网上做了相当多的挖掘工作,直到第一个计时器停止,我才能找到一种告诉摆动计时器不执行的方法,如果我尝试忙,等到一个计时器完成(根本没有显示UI(显然是错误方向的一步).

现在我可以完全转离计时器,或者将精灵传送到新的位置,或使用一些可怕的忙等待运动方案,但我希望某种善良的灵魂有解决方案.

简而言之:我需要一种方法来运行一段时间的摇摆计时器,停止它,然后启动一个新的计时器,这样它们就不会重叠.优选地,该方法将允许每个计时器处于其自己的方法中,然后我可以一个接一个地调用这些方法.

提前感谢您提出的任何建议.

编辑:扩展示例代码.如果完整的scsse是你的建议的要求,那么我很抱歉浪费你的时间,因为完整的代码是一个野兽.这个示例代码根本不起作用,抱歉,但它应该说明这一点.

所以.我们有两个功能,每个功能都有一个运行动画循环的计时器,一个用于向下和向右对角移动,一个用于直接向下移动.

public class TestClass {
    static int counter = 0;
    static int counter2 = 0;
    static Timer timerC;
    static Timer timerX;

    public static void main(String[] args) {
        moveC();
        moveX();
    }

    public static void moveC() {
        int delay = 200; // milliseconds

        timerC = new Timer(delay, null);
        timerC.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                if (counter < 32) {
                    counter = counter + 4;
                    System.out.println("*C*");
                } else { …
Run Code Online (Sandbox Code Playgroud)

java swing timer

3
推荐指数
3
解决办法
7624
查看次数

标签 统计

java ×1

swing ×1

timer ×1