当我尝试 setTranslationX 和 setTranslationY 时 SurfaceView 出现致命异常
Fatal Exception in SurfaceView when I try to setTranslationX and setTranslationY
我在我的游戏中使用 setTranslationX 和 setTranslationY 来移动我的 SurfaceView,以便我的玩家始终位于屏幕中央。我使用的确切方法是:
mySurfaceView.setTranslationX(-player.getX() + GameActivity.GAME_WIDTH/2);
mySurfaceView.setTranslationY(-player.getY() + GameActivity.GAME_HEIGHT/2);
不幸的是,当我尝试移动我的播放器时,出现了一个致命的异常:
07-18 23:27:58.628 3059-3085/com.packname.www.gamename E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-2018
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:854)
at android.view.ViewGroup.invalidateChildFast(ViewGroup.java:4193)
at android.view.View.invalidateViewProperty(View.java:10423)
at android.view.View.setTranslationX(View.java:9743)
at com.packname.www.gamename.game.PlayState.render(PlayState.java:77)
我将如何解决这个异常?我需要我的球员在他移动时保持在屏幕中央。我也不能使用 canvas.translate(x, y) 因为这不会改变我用来移动播放器的 TouchListeners 接收到的坐标。因此,如果我使用 canvas.translate(x, y),那么我的碰撞矩形最终会位于我的播放器所在的位置。因此我需要 mySurfaceView.setTranslateX() 和 mySurfaceView.setTranslateY() 方法。
编辑:我似乎没有从正确的线程调用 setTranslationX & Y。我将如何从正确的线程调用 setTranslationX & Y?我需要能够不断更新我的表面视图,或者至少在我的玩家移动时更新它。
尝试
mySurfaceView.post(new Runnable() {
public void run() {
mySurfaceView.setTranslationX(-player.getX() + GameActivity.GAME_WIDTH/2);
mySurfaceView.setTranslationY(-player.getY() + GameActivity.GAME_HEIGHT/2);
}
});
我在我的游戏中使用 setTranslationX 和 setTranslationY 来移动我的 SurfaceView,以便我的玩家始终位于屏幕中央。我使用的确切方法是:
mySurfaceView.setTranslationX(-player.getX() + GameActivity.GAME_WIDTH/2);
mySurfaceView.setTranslationY(-player.getY() + GameActivity.GAME_HEIGHT/2);
不幸的是,当我尝试移动我的播放器时,出现了一个致命的异常:
07-18 23:27:58.628 3059-3085/com.packname.www.gamename E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-2018
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:854)
at android.view.ViewGroup.invalidateChildFast(ViewGroup.java:4193)
at android.view.View.invalidateViewProperty(View.java:10423)
at android.view.View.setTranslationX(View.java:9743)
at com.packname.www.gamename.game.PlayState.render(PlayState.java:77)
我将如何解决这个异常?我需要我的球员在他移动时保持在屏幕中央。我也不能使用 canvas.translate(x, y) 因为这不会改变我用来移动播放器的 TouchListeners 接收到的坐标。因此,如果我使用 canvas.translate(x, y),那么我的碰撞矩形最终会位于我的播放器所在的位置。因此我需要 mySurfaceView.setTranslateX() 和 mySurfaceView.setTranslateY() 方法。
编辑:我似乎没有从正确的线程调用 setTranslationX & Y。我将如何从正确的线程调用 setTranslationX & Y?我需要能够不断更新我的表面视图,或者至少在我的玩家移动时更新它。
尝试
mySurfaceView.post(new Runnable() {
public void run() {
mySurfaceView.setTranslationX(-player.getX() + GameActivity.GAME_WIDTH/2);
mySurfaceView.setTranslationY(-player.getY() + GameActivity.GAME_HEIGHT/2);
}
});