如何将坐标保持在屏幕的范围内?
这是我的代码... curX和curY是我当前的X和Y坐标,而tmpX和tmpY是相对的X和Y值(鼠标移动了多少)。如何将坐标保持在屏幕的范围内?
curX:= curX+tmpX;
curY:= curY+tmpY;
我使用这些值来移动/控制我的光标形状。
如何将光标保持在屏幕内?
我试图限制的值,直到Screen.Height和Screen.Width ...这里的代码。
if(curX>Screen.Width) then
curX:=Screen.Width;
if(curY>Screen.Height) then
curY:=Screen.Height;
但它没有工作。
解决了!(排序):
curX:= max(0, min((curX+tmpX), Screen.Width));
curY:= max(0, min((curY+tmpY), Screen.Height));
我唯一的问题是,(0,0),显然不是左上角最(非常接近,虽然,只是一对夫妇像素关闭我认为),(画面。 Width,Screen.Height)不是最右上角的(也是最接近的,光标在最右边消失,尽管我认为其中一个应该是这样)。
您可以通过计算(curX + tmpX)mod(screenSizeX)或使用curX:= min(curX+tmpX, screenSizeX)
限制curX
值来创建周期边界条件。
感谢您的回答。当我使用mod解决方案并将鼠标移动到最右侧时,出现一些奇怪和有趣的原因,光标在右侧消失并从左侧出来,当我将它移动到底部时,它出现在顶部(尽管这不发生在我将它移动到最左边或最顶端时)。有什么办法可以让所有方面都保持一致? – Dian 2010-07-13 09:56:26
这是“周期性”边界条件。你应该用min()函数使用第二种解决方案。 – zoli2k 2010-07-13 09:57:48
是的,谢谢,我用min和max(因为min独自并没有阻止光标从顶部和左边消失)。奇怪的是我不知道边界的正确坐标。 :D – Dian 2010-07-14 01:47:24
如果你正确地限制它,它不会超出你的范围。发布你的代码,如果你想知道它为什么坏了。
var1 := Inc(var1,amt);
var2 := Inc(var1,amt);
if var1 > limit1 then
var1 := limit1;
if var2 > limit2 then
var2 := limit2;
您必须小心知道您的限制是否关闭系统中的所有屏幕,而不仅仅是当前屏幕。不是每个人都只有一个屏幕。有些人有多个屏幕。
这与我的解决方案非常相似,但我不知道它为什么不起作用。光标仍然消失。 感谢您的回答,但我会牢记多屏幕的事情。 – Dian 2010-07-14 01:52:49
尝试从你的限制中减去一点。请记住,当光标位于屏幕的远处时,您设置的位置是光标的可见尖端,可能是左上角。埃尔戈,你什么都看不到。或者是一个像素,它是光标的顶端。 – 2010-07-14 14:09:26
你是如何限制它,张贴你的代码。 – 2010-07-13 19:50:45