Java “我如何设计?”;“手动动画”;没有代码延迟的Android游戏

Java “我如何设计?”;“手动动画”;没有代码延迟的Android游戏,java,android,eclipse,animation,Java,Android,Eclipse,Animation,我正在为Android编写一个游戏,我认为我的架构和/或代码中有一个致命的缺陷 该架构基本上是两个线程,一个线程只是连续绘制屏幕,另一个线程根据用户的触摸屏输入控制屏幕上可绘制内容的移动 在后一个线程中,我基本上是在做手动动画(在这里插入正确的术语),这意味着我通过在游戏进行时更改可绘制矩形的方法在屏幕上移动可绘制图形。我认为我所做的“不不不”是在这些方法中插入延迟,使其“看起来像一个真实的动画” 这一切都很好,因为我没有理由在这些动画过程中处理任何用户输入,但我在我的游戏中设计了一个缺陷,这真

我正在为Android编写一个游戏,我认为我的架构和/或代码中有一个致命的缺陷

该架构基本上是两个线程,一个线程只是连续绘制屏幕,另一个线程根据用户的触摸屏输入控制屏幕上可绘制内容的移动

在后一个线程中,我基本上是在做手动动画(在这里插入正确的术语),这意味着我通过在游戏进行时更改可绘制矩形的方法在屏幕上移动可绘制图形。我认为我所做的“不不不”是在这些方法中插入延迟,使其“看起来像一个真实的动画”

这一切都很好,因为我没有理由在这些动画过程中处理任何用户输入,但我在我的游戏中设计了一个缺陷,这真的让我很烦恼。我相信你们中的许多人都能从代码设计的角度理解这一点

设计这种“手动动画”的正确方法是什么,这样我的代码在动画发生时仍然可以处理用户事件(如触摸屏幕)

以下是我的一种方法的参考示例:

public void BadAnimation() {    
    for (int k = 0; k < mAnimationHeight; k++) {
        for (int i = 0; i < mRows; i++) {
            for (int j = 0; j < mCols; j++) {
                if (myObject.mFlag[i][j]) {
                    myObject[i][j].mRect.top++
                }
            }
        }
        try {
              Thread.sleep(3);
        } 
        catch (InterruptedException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
        }
    }
}
public void BadAnimation(){
对于(int k=0;k
最好的方法是在游戏循环中进行。您有一个正在运行的计时器。如果已经过了,请执行绘图,重置计时器。否则什么也不做。

这是一个优秀的教程,将向您展示如何正确实施延迟:


本书还介绍了如何接受用户输入,同时更改游戏状态并在屏幕上绘图。

哇,这真是太好了。这个周末我会通读一遍,谢谢!