2010-09-25 83 views
1

我目前正试图用自上而下的视角写一个简单的射击游戏。我使用SurfaceView和Canvas在屏幕上绘制图形,但我无法找到如何使“相机”滚动。 玩家角色总是在屏幕的中心,相机(SurfaceView的画布基本上)应该一直跟着他(例如,像在外星人群中一样)。但是,我无法弄清楚如何以一种常规的方式来实现这一点。我现在的做法是根据玩家的输入移动游戏世界中的所有其他物体,并在坐标恰好在屏幕上时进行绘制。玩家始终保持在同一坐标上。 有什么方法可以实际移动(滚动)SurfaceView本身?我看到了Scroll小部件和SurfaceView.scrollBy(int x,int y)方法,但是我尝试实现其中的任何一个都会导致Force Close。 任何帮助表示赞赏,在此先感谢!如何在android中编程滚动游戏摄像头?

P.S.请注意 - 我对此项目使用公开GL没有兴趣。

回答

1

您可以在绘制完成后使用翻译来滑动屏幕内容。如果字符是留在中间,你会写代码,看起来像这样:

draw_the_screen(); 
canvas.translate(x,y); 
draw_the_avatar(); 

当翻译,一切直到这一点将被翻译。绘制头像时,平移(滑动)已经发生,并且在绘制它的任何地方(即:屏幕的中心)都会结束。

希望这会有所帮助。

+0

谢谢,这是有益的,但我不得不动用玩家冷杉,翻译,然后绘制画面,以使其发挥作用。我觉得很奇怪。这里是我的代码: px = px + accelerometer_x; py = py + accelerometer_y; canvas.drawBitmap(mObj4,50,350,null); ((float)px,(float)py); canvas.drawCircle(218,368,10,p); 这不起作用,因为风景(mObj)保持静止,但角色(圆圈)在屏幕中移动。它应该是相反的,当我切换drawObj和drawCircle的地方它的作品。奇怪的。 – Kiril 2010-09-26 21:55:29

2

正如Kiril在他的评论中指出的那样,上面的答案是不正确的。 实现了简单的滚动摄像头,你需要

  1. 翻译画布的球员位置
  2. 的反转坐标绘制背景
  3. 转换回(0,0)
  4. 绘制玩家

所以,把在代码

//Translate to -playerX, -playerY and draw the background 
canvas.translate(-playerX, -playerY); 
background.draw(); 

//Translate back to 0,0 and draw the player 
canvas.translate(playerX, playerY); 
player.draw(); 

这样,玩家总是停留在屏幕上的相同位置,您会看到背后的背景。

有一点需要注意的是,canvas.translate(x,y)不会将画布转换为坐标(x,y)。它按照指定的距离进行翻译。起初这可能会让人困惑。

例子:

  1. 你在(0,0)
  2. 你叫canvas.translate(2,3)
  3. 你叫canvas.translate(-1,-1)
  4. 你现在是在(1,2)