Javascript/html5 2d Canvas Context -获取相对于Canvas的X, Y(相对于转换对象
Javascript/html5 2d Canvas Context - Getting X, Y relative to canvas (opposed to transformed object)
我有一个场景,在一个上下文堆栈上有几个项目,我需要得到一个相对于画布本身的x, y坐标。
情况是,我正在用HTML5编写一款2D游戏,我希望由用户控制的"角色"能够瞄准鼠标。字符嵌套在转换中。有一个相机对象,转换画布跟随角色和执行缩放/旋转,当然,角色本身是向下转换,有时旋转远离它的中心。
如果我可以获得角色相对于画布的位置,我就可以做一个atan2来瞄准鼠标。或者,如果我可以获得相对于角色中心的鼠标坐标,那么我也可以这样做。
是否有任何方法可以做到这一点,而不是逆转我所有的变换计算?
我不确定这是否是最好的方法,但是当我在你的位置上时,我做了以下事情;我从问题对象中取变换矩阵,遍历场景图从对象到它的所有父元素,应用所有父元素变换矩阵的逆。现在你已经得到了对象世界矩阵。
一个可选步骤是缓存所有节点的世界矩阵,直到它们再次改变,以避免不必要的计算。如果您的场景图形没有深度嵌套,这可能并不总是一个好主意。
不幸的是,我最终手动逆转了转换。下面的代码是我放入相机对象的代码:
/**
Transforms mousex and mousey to the positions within the game.
*/
this.transformMouse = function(mousex, mousey){
var xScale = screenWidth / (currentMaxX - currentMinX);
var yScale = screenHeight / (currentMaxY - currentMinY);
this.tmousex = (mousex - screenWidth / 2) / xScale + (currentMaxX + currentMinX) / 2;
this.tmousey = (mousey - screenHeight / 2) / yScale + (currentMaxY + currentMinY) / 2;
}
tmousex和tmousey是鼠标的x和y位置的变换。这并没有考虑到旋转—转换的反转将不得不进入角色代码(相机和角色的旋转将在atan2代码之后添加)。
希望这对有同样问题的人有所帮助。
相关文章:
- 如何获取相对于 HTML 页面的标记位置
- 使用return相对于this的优势
- positon元素相对于JS中的parent.part容器?没有绝对/固定的定位
- 获取一个元素相对于Javascript中一个祖先的位置
- Facebook PHP SDK相对于PhoneGap上的JS SDK的优势
- 相对于GoogleMaps/geoxml3解析器延迟Javascript函数的执行
- 文本相对于 SVG 中的父项 G 右对齐
- 检测 iOS 相对于 JavaScript 中主页按钮的方向
- 服务器端JavaScript相对于Java的优势
- node.js获取文件相对于project/src的路径
- jquery 相对于 href=“#” 删除显示块
- 如何使用选择器获取相对于element实例的元素
- 在JSON for REST中,snake_case相对于camelCase的优势
- bind()相对于call()有什么用?我们可以用bind()做什么额外的事情,而用call()做不到
- 设置相对于“window.innerHeight”的高度无效
- 如何定义相对于kraken.js中的url的区域设置
- Javascript/html5 2d Canvas Context -获取相对于Canvas的X, Y(相对于转换对象
- 将文本相对于html画布对齐
- 格式化时间(秒)相对于JavaScript中的金额
- HTML5 Canvas -计算对象相对于'磁铁'的速度