在Processing(2)中,我目前正在以UML-ish风格创建Java类图。类,接口等表示为矩形,使用处理的rect()
方法创建。为每个要显示的矩形创建一个类,用于存储有关它的信息,并使用display()
方法绘制矩形。
为了实现这个图的放大和缩小(为了方便非常大或非常小的项目),我添加了代码,每次滚动鼠标滚轮时都会更改scale
变量。然后,每次绘制类矩形等时,代码都使用Processing的scale()
方法。
我也试图检测其中一个矩形是否被碾过。目前,这是使用表示矩形的类中的以下代码完成的:
//Checks to see if a mouse X and Y (posX and posY) position is inside the rectangle.
public boolean positionCollides(int posX, int posY) {
boolean xCollides = false, yCollides = false;
if((centreX + (width/2) >= posX) && (centreX - (width/2) <= posX)){
xCollides = true;
}
if((centreY + (height/2) >= posY) && (centreY - (height/2) <= posY)){
yCollides = true;
}
if(xCollides && yCollides){
return true;
}
else{
return false;
}
}
将mouseX
和mouseY
输入该方法的位置。请注意,此代码中centreX
和centreY
是包含(ed)矩形中心首次创建时坐标的变量。
然而,当我放大并将缩放应用于矩形的display()
方法时,鼠标悬停在断裂处 - 可能是因为事物以略微不同的X和Y坐标显示,并且它仍在检查旧的的。
有没有办法可以更改上面的positionCollides
方法来帮助它处理缩放的结果?我怎样才能对它进行排序?
我试图通过在显示方法中调用positionCollides
之后调用scale()
的代码来尝试对此进行排序(同时尝试获取mouseX和mouseY值),并通过将mouseX和mouseY乘以标度(即0.9,1.1)来尝试使它们达到正确的值。
也许有一种方法可以动态改变对象的centreX和centreY?
感谢您阅读我的文字墙。
tl; dr - 如何检测鼠标指针是否位于已在处理中缩放的形状/矩形内?
答案 0 :(得分:1)
在这里,试试这个:
(在处理1.5中测试)
int x, y, sz;
float factor = 0.87;//any value here
float transx = 50;//any value here
float transy = 25;//any value here
void setup()
{
size(400, 400);
x=100;
y=100;
sz=50;
}
void draw()
{
noFill();
//draw at original positon, no fill
rect(x, y, sz, sz);
scale(factor);
translate(transx, transy);
fill(255);
//draw after scalling and positioning filled this is tested for insidness
rect(x, y, sz, sz);
if ( mouseX / factor - transx > x &&
mouseX / factor - transx < x+sz &&
mouseY / factor - transy > y &&
mouseY / factor - transy < y+sz)
{
println("i'm inside!!!");
}
else
{
println("i'm outside");
}
}