如何制作相对于画布的坐标

时间:2015-07-18 21:48:33

标签: android canvas

我有一个600x1000像素的屏幕,我的播放器从左下角开始。他的x和y坐标是(50,900)。我将这个播放器绘制到画布上并使用 canvas.translate(-player.getX()+GAMEWIDTH/2, 0) 确保播放器相对于x轴保持在屏幕中间。这导致我的玩家在(300,900)渲染,但是玩家的x和y坐标保持在(50,900)。这是一个问题,因为我需要玩家的坐标与他的渲染位置相同,因为我在玩家的碰撞矩形上使用触摸事件来移动他。有没有办法让我的屏幕坐标相对于我的画布坐标,以便我的播放器坐标对应于它们实际渲染的位置?或者是否有另一种方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

touchEvents总是基于x& y相对于canvas元素本身。由于视图通过翻译视图canvas.translate(-player.getX() + GAMEWIDTH/2 , 0);使角色居中,因此您还需要将该翻译应用于touchEvent。您可以在触摸处理程序本身中执行此操作,也可以存储游戏世界中项目的相对位置和绝对位置。如果项目彼此嵌套,这将变得更加重要。这通常通过存储精灵/对象的父元素来完成。

//example of how I usually handle object hierarchy
this._x = this.x + this.parent._x;
this._y = this.y + this.parent._y;

canvas / stage还将它的中心存储为._x和._y,这将是添加的对象的父级,这样当你生成全局位置来执行touchEvent而不是传入.x时或.y你会传入已经由GAMEWIDTH / 2翻译的._x和._y。