如何在Android中编程滚动游戏相机?

时间:2010-09-25 01:41:55

标签: android camera scroll surfaceview

我目前正试图用自上而下的视角写一个简单的射击游戏。我使用SurfaceView和Canvas在屏幕上绘制图形,但我无法找到如何使“相机”可滚动。 玩家角色总是在屏幕的中心,而摄像机(SurfaceView的画布本质上)应该始终跟随他(例如,像Alien Swarm一样)。但是,我无法弄清楚如何以规律的方式实现这一目标。我现在这样做的方法是根据玩家的输入移动游戏世界中的其他所有对象 - 如果他们的坐标恰好在屏幕上,则绘制它们。玩家始终保持相同的坐标。 有没有办法实际移动(滚动)SurfaceView本身?我看到了Scroll小部件和方法SurfaceView.scrollBy(int x,int y),但我试图实现其中任何一个导致强制关闭。 感谢任何帮助,提前谢谢!

P.S。请注意 - 我对使用open GL进行此项目不感兴趣。

2 个答案:

答案 0 :(得分:2)

正如基里尔在评论中指出的那样,上面的答案是不正确的。 要实现简单的滚动相机,您需要

  1. 将画布翻译为玩家位置的反转坐标
  2. 绘制背景
  3. 翻译回(0,0)
  4. 绘制播放器
  5. 所以,把它放在代码中

    //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)

答案 1 :(得分:1)

您可以使用翻译在绘制完背景后滑动屏幕内容。如果角色要保留在中间,你将编写如下代码:

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

翻译时,所有内容都将被翻译。当您绘制头像时,翻译(滑动)已经发生,并且无论您在何处绘制它都会结束(即:屏幕的中心)。

希望这有帮助。