我有一個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. 規模鼠標座標上相對於HTML5畫布
- 3. 如何使MotionEvent的座標與縮放畫布的座標相匹配?
- 4. 畫布座標
- 5. 畫布 - 你可以設置一個座標作爲一個新的零點來定位元素相對於?
- 6. 畫布絕對和相對座標,delta像素檢索
- 7. 子集xarray.Dataset相對於多個座標
- 8. 將OpenGL畫布座標轉換爲HTML5畫布座標
- 9. HTML5畫布鼠標座標
- 10. 相對於框架的鼠標座標
- 11. 如何找到一組相對於旋轉的座標?
- 12. Raphaël將相對於畫布的拖動回調座標轉換爲
- 13. WebGL:畫布座標到三維座標
- 14. 相對佈局更改imageview的座標
- 15. 在畫布內部獲取相對觸摸座標
- 16. 畫布座標如何轉換爲瓷磚座標?
- 17. 如何獲取tkinter畫布中對象的座標?
- 18. 獲取視圖的相對於根佈局的座標
- 19. 如何獲得座標相對於鼠標位置的位置?
- 20. CGPathContainsPoint相對於絕對座標iOS
- 21. Android:相對佈局,chage X座標
- 22. Android畫布座標系
- 23. 畫布x座標檢測
- 24. 座標在WPF畫布
- 25. 如何找出相對佈局的圖像座標
- 26. Python:計算座標相對於周圍座標的百分比
- 27. 使用jquery更改了畫布座標
- 28. HTML5畫布中的鼠標座標
- 29. 如何獲得鼠標座標相對於父div? Javascript
- 30. 如何使用畫布上的屏幕座標進行繪製?
當你做觸摸事件點擊檢測時,你不應該總是把它傳遞給player.getX()+ GAMEWIDTH/2。您可以使座標相對的唯一方法是如果您自己應用該變換。我通常爲這樣的事情保留一個relative.x和global.x。親戚會在你的情況下是50,而全球將是50 + GAMEWIDTH/2。 – ericjbasti
感謝這讓我走上正軌。我在我的「Input」類中爲我的「recentTouchX」添加了「player.getX() - GAMEWIDTH/2」。我認爲這個問題與我的碰撞矩形的位置有關,但實際上它與我的TouchListener一起聽視圖而不是畫布。在進行任何翻譯之前,我的視圖和畫布都是一樣的,但是在翻譯之後他們沒有,這些額外的代碼行可以彌補翻譯的不足。把你的評論作爲答案和dat upvote和檢查是你的:) –