我有一个600x1000像素的屏幕,我的播放器开始左下角附近。他的x和y坐标是(50,900)。我正在将此播放器绘制到画布上,并使用 canvas.translate(-player.getX()+GAMEWIDTH/2, 0)
确保播放器相对于x轴保持在屏幕中间。这导致我的玩家被渲染为(300,900),但玩家的x和y坐标保持在(50,900)。这提出了一个问题,因为我需要玩家的坐标与他的渲染位置相同,因为我在玩家的碰撞矩形上使用触摸事件来移动他。有什么办法可以使我的屏幕坐标相对于我的画布坐标,以便我的玩家的坐标对应于他们实际渲染的位置?或者有另一种方法可以做到这一点?如何使相对于一个画布的坐标
1
A
回答
1
touchEvents始终基于相对于画布元素本身的x & y。由于视图是通过翻译视图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;
画布/阶段也将存储它的中心作为._x和._y这将是该对象的父补充说,这样一来,当您生成全局位置做你touchEvents对强似在.x或.y中,您将传入已由GAMEWIDTH/2转换的._x和._y。
相关问题
- 1. 一个点相对于一个参考坐标系的坐标
- 2. 画布坐标
- 3. 画布绝对和相对坐标,delta像素检索
- 4. 子集xarray.Dataset相对于多个坐标
- 5. 相对于框架的鼠标坐标
- 6. 如何找到一组相对于旋转的坐标?
- 7. 相对布局更改imageview的坐标
- 8. 如何获取tkinter画布中对象的坐标?
- 9. 获取视图的相对于根布局的坐标
- 10. 如何获得坐标相对于鼠标位置的位置?
- 11. Android画布坐标系
- 12. HTML5画布中的鼠标坐标
- 13. 如何获得鼠标坐标相对于父div? Javascript
- 14. 获取当前点击坐标相对于一个元素
- 15. 将光标悬停在画布上时如何显示画布坐标?
- 16. PictureBox绘图坐标相对于表格
- 17. 获取画布上下文的最后一个坐标
- 18. 如何转换相对于特定视图的窗口坐标?
- 19. 如何获取相对于画布左上角的绘制圆弧的第一个和最后一个点的x/y坐标?
- 20. 完善画布鼠标坐标
- 21. 如何转换屏幕坐标以形成相对坐标(winforms)?
- 22. 如何得到一组放大后的绝对坐标(相对于帆布)织物JS
- 23. xaml形状 - 相对于画布大小
- 24. 如何获得画布光标点击坐标
- 25. 从基于坐标的tkinter画布中删除图像
- 26. 如何从一个坐标拖放到另一个坐标C#
- 27. WPF - 将相对于MainWindow的点转换为相对于子控件的坐标
- 28. 如何使对象在html5画布中对齐一个位置?
- 29. Android屏幕坐标到画布视图坐标
- 30. 将相对坐标转换为绝对坐标的算法
当你做触摸事件点击检测时,你不应该总是把它传递给player.getX()+ GAMEWIDTH/2。您可以使坐标相对的唯一方法是如果您自己应用该变换。我通常为这样的事情保留一个relative.x和global.x。亲戚会在你的情况下是50,而全球将是50 + GAMEWIDTH/2。 – ericjbasti
感谢这让我走上正轨。我在我的“Input”类中为我的“recentTouchX”添加了“player.getX() - GAMEWIDTH/2”。我认为这个问题与我的碰撞矩形的位置有关,但实际上它与我的TouchListener一起听视图而不是画布。在进行任何翻译之前,我的视图和画布都是一样的,但是在翻译之后他们没有,这些额外的代码行可以弥补翻译的不足。把你的评论作为答案和dat upvote和检查是你的:) –