2010-01-25 43 views
0

这似乎有点嚼头:AS3 - 臭虫Rectangle.inflatePoint() - 不消极处理协调好

var r:Rectangle = new Rectangle(); 
trace("initial rect: " + r);  // (x=0, y=0, w=0, h=0) 

var p:Point = new Point(-5, -3); // (x=-5, y=-3) 
trace("point: " + p); 

r.inflatePoint(p); 
trace("inflated rect: " + r);  // (x=5, y=3, w=-10, h=-6) 

我希望的结果是(X = -5,Y = - 3,宽度= 5,高度= 3)。

这里返回预期结果的实现:

public static function inflateRectByPoint(r:Rectangle,p:Point):void 
{ 
var d:Number; 

d = p.x - r.x; 
if (d < 0) 
{ 
    r.x  += d; 
    r.width -= d; 
} 
else if (d > r.width) 
{ 
    r.width = d; 
} 

d = p.y - r.y; 
if (d < 0) 
{ 
    r.y  += d; 
    r.height -= d; 
} 
else if (d > r.height) 
{ 
    r.height = d; 
} 
} 
+0

这是一个问题吗? – OcuS 2010-01-25 22:08:50

回答

3

你误会什么inflatePoint一样。

inflate(除了采用点参数而不是两个坐标)相同 - 在每个方向的范围内放大的矩形。

new Rectangle(0, 0, 2, 5).inflatePoint(new Point(2, 2)) 

结果以Rectangle从-2, -24, 7

放入负数缩小矩形 - 直到它变得小于0,此时它会按预期反转。

+0

所以...用户要小心。做你自己的错误检查。 – 2010-01-25 22:16:28

+0

aaah。我的错。谢谢。 – 2010-01-26 00:04:02