我必须像 Windows 中的滚动条一样将一个对象从 A 点拖到 B 点,这里的问题是 A 和 B 的 X 或 Y 都不相同,所以运动同时是水平和垂直的- 对角线。
我确实想出了一个简单的算法,它基于帧中的光标位置,更新要拖动的对象的位置。但为此我必须使 cursorX=objectX,然后计算 objectY,反之亦然。这使得运动分别对于水平运动或垂直运动“不那么令人沮丧”。因此,如果对角线靠近水平线,则 cursorX=objectX 的部分使其比 cursorY=objectY 的部分更好,而对于靠近垂直线的对角线“cursorY=objectY”使其成为另一个更好的选择一。这里的问题是我必须对两种类型的对角线都使用通用算法,因为我有星形多边形,并且对象必须能够从任何角落移动到任何角落。
这是我编写的代码,但它似乎并没有“正确”地移动,因为它是视觉上的正确并且对用户来说不那么令人沮丧,我希望它会对这个问题更有意义。我最后所做的,使用了垂直移动和水平移动两种方法并除以 2,所以每个人都很高兴,但是没有成功:
//calculating with x priority
D3DXVECTOR2 resultPosX;
resultPosX.x=nextMousePos.x;
//firstCornerPos and secondCornerPos are the edges of a segment
//on wich the object has to move
resultPosX.y=prevObjPos.y+(nextMousePos.x-prevObjPos.x)*(secondCornerPos.y-firstCornerPos.y)/(secondCornerPos.x-firstCornerPos.x);
//calculating with y priority
D3DXVECTOR2 resultPosY;
resultPosY.y=nextMousePos.y;
resultPosY.x=prevObjPos.x+(nextMousePos.y-prevObjPos.y)*(secondCornerPos.x-firstCornerPos.x)/(secondCornerPos.y-firstCornerPos.y);
//calculating the average result
resultPos.x=(resultPosX.x+resultPosY.x)/2;
resultPos.y=(resultPosX.y+resultPosY.y)/2;