Javascript 在HTML5画布上定位数学问题
我有一个正方形的画布,在我的代码中设置了一个摄像头位置,允许我滚动和放大 但我的逻辑似乎有点不正确,当我试图检测鼠标何时在该位置的正方形上方时 正方形的位置为0,0。正方形中的白点表示其位置 如果比例或相机位置不变,则鼠标检测工作正常,但一旦其中任何一个发生改变,我的功能(将元素上的鼠标位置转换为世界位置)就会导致问题 我的函数如下所示:Javascript 在HTML5画布上定位数学问题,javascript,html,math,Javascript,Html,Math,我有一个正方形的画布,在我的代码中设置了一个摄像头位置,允许我滚动和放大 但我的逻辑似乎有点不正确,当我试图检测鼠标何时在该位置的正方形上方时 正方形的位置为0,0。正方形中的白点表示其位置 如果比例或相机位置不变,则鼠标检测工作正常,但一旦其中任何一个发生改变,我的功能(将元素上的鼠标位置转换为世界位置)就会导致问题 我的函数如下所示: function check(evt,el){ var x = evt.offsetX; var y = evt.offsetY; o
function check(evt,el){
var x = evt.offsetX;
var y = evt.offsetY;
output.innerHTML = 'Scale: '+scale;
output.innerHTML += '<br/>Screen Space x: '+x+', y: '+y;
x += camera.x;
x -= element.width/2
y += camera.y;
y -= element.height/2;
output.innerHTML += '<br/>Camera Position: '+camera.x+', y: '+camera.y;
output.innerHTML += '<br/>World Space x: '+x+', y: '+y;
var radius = 20 * scale;
for(var i = 0; i < obj.length;i++){
if(x > obj[i].x-radius
&& x < obj[i].x+radius
&& y > obj[i].y-radius
&& y < obj[i].y+radius){
output.innerHTML += '<br/>In';
return false;
}
}
output.innerHTML += '<br/>out';
}
功能检查(evt、el){
var x=evt.offsetX;
变量y=evt.offsetY;
output.innerHTML='Scale:'+Scale;
output.innerHTML+='
屏幕空间x:'+x+',y:'+y;
x+=摄像机x;
x-=元素宽度/2
y+=摄像机y;
y-=元素高度/2;
output.innerHTML+='
摄像机位置:'+Camera.x+',y:'+Camera.y;
output.innerHTML+='
世界空间x:'+x+',y:'+y;
var半径=20*刻度;
对于(变量i=0;iobj[i].x-半径
&&xobj[i].y半径
&&y In';
返回false;
}
}
output.innerHTML+='
out';
}
我还设法在jsFiddle中重现了这个问题
重现问题:
使用鼠标滚轮放大或缩小,单击并将正方形拖动到偏离中心的位置。然后将鼠标移到红方块上,当鼠标移到方块上时,它应该说in
,否则它会说out
但目前该检查的准确性不正确,我无法找出我的check
函数(第17行)的数学错误在哪里
您也可以在此处看到问题,请注意图像底部的输入/输出:
我希望有人能帮我发现我的错误,这样我才能最终使这项工作成功
谢谢 您要检查的进出状况是小问题。它与原始的方形平移和半径大小不匹配。所以更改
radius=10*比例
,因为您的正方形大小是20*20,所以半径将是10,在检查if条件的前两行中,更改为这个x>obj[i]。x-10&&x
这将解决问题
让我解释一下
out
到in
out
输入
和输出
李>
if逻辑创建的不可见的正方形
最后一个变化是关于您第一次创建红场时所做的翻译
x>obj[i].x-10
这将想象中的正方形向右平移,并将50添加到obj[i].x+radius+50
以保持正方形的原始大小,我用-10代替了比例来改变正方形。在mac上的Chrome 48中对我来说似乎工作正常…使用轨迹板来改变比例,给周围的正方形下药,在适当的时候仍然会说“输入”和“输出”。你是在用javascript制作游戏吗?@JaredSmith nope-在最新的Chrome上不为我工作。怀疑浏览器是否会对javascript数学相关问题产生影响。或者操作系统。是的,我显然不够彻底,我现在得到了错误。@JaredSmith很公平。谢谢你的解释:)