gpt4 book ai didi

java - 在 Activity 中使用 Thread 计算整数并在 View 中更新 Canvas

转载 作者:行者123 更新时间:2023-12-02 03:42:07 24 4
gpt4 key购买 nike

我正在开发我的第一个 Android 游戏,没有用于 Eclipse 布局的 xml 文件。这是从 MyGameActivity.class(extends View Implements OnTouchListener) 调用 MyGameView.class(extends View)

 MyGameView myView;
myView = new MyGameView(this);
myView.setOnTouchListener(this);
setContentView(myView);

每次触摸 (MotionEvent.ACTION_DOWN) 时,我都会使用以下代码更新 MyGameView.class 中的 Canvas。这是我用来从 MyGameActivity.class 更新 MyGameView.class 的代码。

 myView.invalidate();

是的,它有效!但我现在遇到了一个严重的问题。我需要每 0.3 秒移动一次 MyGameView.class 中的 Canvas。我使用 Thread 进行更新,但它强制停止!!!!我尝试了一次又一次!我失败了!

 public void runtime() {
i = 0;
Thread timer = new Thread(new Runnable() {

@Override
public void run() {
while (i<1500) {
try {
Thread.sleep(300);
}
catch (InterruptedException e) {
e.printStackTrace();
}
finally {
if (right) {
i++;
//This is static int a from MyGameView.
MyGameView.a += 2;
myView.invalidate();
}
else {
i = 1500;
}
}
}
}
});
timer.start();

}

使用 myView.invaldate() 将静态 int 或 boolean 从 MyGameActivity.class 更新为 MyGameView.class;工作中。但我无法用Thread来控制它!我的线程运行代码有问题吗?

这可能取决于线程,因为每次按下 (MotionEvent.ACTION_DOWN) 时我都可以沿 X 轴向右移动 +2。

 //I can Move with this code but not with Thread!
case MotionEvent.ACTION_DOWN:
MyGameView.a += 2;
myView.invalidate();
break;

有了Thread,它就停止了!请给我一个解决方案!换句话说,我需要准确无误地计算时间,并在每次计数时更新 Canvas !

最佳答案

必须从 UI 线程调用 Invalidate。尝试调用

postInvalidate()

相反。

参见this供引用。

关于java - 在 Activity 中使用 Thread 计算整数并在 View 中更新 Canvas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36722254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com