如何将坐标保持在屏幕的范围内?

问题描述:

这是我的代码... 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)不是最右上角的(也是最接近的,光标在最右边消失,尽管我认为其中一个应该是这样)。

+0

你是如何限制它,张贴你的代码。 – 2010-07-13 19:50:45

您可以通过计算(curX + tmpX)mod(screenSizeX)或使用curX:= min(curX+tmpX, screenSizeX)限制curX值来创建周期边界条件。

+0

感谢您的回答。当我使用mod解决方案并将鼠标移动到最右侧时,出现一些奇怪和有趣的原因,光标在右侧消失并从左侧出来,当我将它移动到底部时,它出现在顶部(尽管这不发生在我将它移动到最左边或最顶端时)。有什么办法可以让所有方面都保持一致? – Dian 2010-07-13 09:56:26

+0

这是“周期性”边界条件。你应该用min()函数使用第二种解决方案。 – zoli2k 2010-07-13 09:57:48

+0

是的,谢谢,我用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; 

您必须小心知道您的限制是否关闭系统中的所有屏幕,而不仅仅是当前屏幕。不是每个人都只有一个屏幕。有些人有多个屏幕。

+0

这与我的解决方案非常相似,但我不知道它为什么不起作用。光标仍然消失。 感谢您的回答,但我会牢记多屏幕的事情。 – Dian 2010-07-14 01:52:49

+0

尝试从你的限制中减去一点。请记住,当光标位于屏幕的远处时,您设置的位置是光标的可见尖端,可能是左上角。埃尔戈,你什么都看不到。或者是一个像素,它是光标的顶端。 – 2010-07-14 14:09:26