在Android Studio中,我正在开发一款游戏,我使用SurfaceView对象以60fps的速度绘制动画。我使用半透明图像作为顶层来隐藏比赛场地的边缘 - 有点像“战争迷雾”效果,这样玩家就不知道在阴影之外会发生什么。
我的问题是我需要为每一帧绘制这个阴影图像,即使即使游戏场向右/向左/向上/向下滚动,阴影也不会改变或移动。它是一个全屏图像,所以它会让游戏变慢。
有没有办法在动画自定义画布上创建一次性叠加ONCE?我还想与它下面的画布进行交互,好像叠加层甚至不存在。
答案 0 :(得分:1)
根据Thomas Stevens的回复,我研究了使用ImageView覆盖SurfaceView的选项。我的解决方案是添加一个包含所需ImageView的FrameLayout。 (这样,我只需通过更新布局XML就可以向叠加层添加其他视图。)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//temporarily set the view to the overlay layout to gain access to the frame
setContentView(R.layout.overlay_game);
FrameLayout overlayLayout = (FrameLayout)findViewById(R.id.gameOverlayFrame);
//set the final view to the active game surface (a Java-coded SurfaceView object)
setContentView(new GameSurface(this));
//add the overlay view on top of the game surface view
addContentView(overlayLayout, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
}
我并不认为这是解决方案......只是对我有用的解决方案。
答案 1 :(得分:0)
您是否尝试将全屏幕ImageView放在表面视图上并设置战争迷雾"图像到此,应该画一次(这假设你的背景是"战争的雾是透明的")。
如果你需要更高级的东西,那么ViewOverlay应该覆盖你,但我的理解是当个人观点希望超出其动画界限时使用,因为你使用全屏幕表面视图这应该是不必要的
https://developer.android.com/reference/android/view/ViewOverlay.html
也没有理由不在表面视图上粘贴表面视图。一个用于战争迷雾/屏幕效果,一个用于游戏界面。