在 Activity 中使用 Thread 计算整数并在 View 中更新 Canvas
Count integer with Thread in Activity and update Canvas in View
我正在开发我的第一个 android 游戏,没有 xml 文件用于 eclipse 中的布局。这是从 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();
是的,它有效!但我有一个严重的问题now.I需要每 0.3 次移动 MyGameView.class 中的 Canvas second.I 使用线程更新但它强制停止!!!!我一次又一次地尝试!我失败了!
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 或布尔值从 MyGameActivity.class 更新为 MyGameView.class;正在工作中。但是我不能用Thread来控制它!我的 Thread 运行 代码有问题吗?
这可能取决于 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;
有了线程,它就停止了!请给我一个解决方案!换句话说,我需要无误地计算时间并在每次计数时更新 canvas!
Invalidate 必须从 UI 线程调用。尝试调用
postInvalidate()
相反。
参考this。
我正在开发我的第一个 android 游戏,没有 xml 文件用于 eclipse 中的布局。这是从 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();
是的,它有效!但我有一个严重的问题now.I需要每 0.3 次移动 MyGameView.class 中的 Canvas second.I 使用线程更新但它强制停止!!!!我一次又一次地尝试!我失败了!
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 或布尔值从 MyGameActivity.class 更新为 MyGameView.class;正在工作中。但是我不能用Thread来控制它!我的 Thread 运行 代码有问题吗?
这可能取决于 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;
有了线程,它就停止了!请给我一个解决方案!换句话说,我需要无误地计算时间并在每次计数时更新 canvas!
Invalidate 必须从 UI 线程调用。尝试调用
postInvalidate()
相反。
参考this。