开发者

AS3 - bug in Rectangle.inflatePoint() - doesn't deal with negative coordinates well

this seems a bit nutty:

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)

i would expect the result to be (x=-5, y=-3, width=5, height=3).

here's an implementation that retu开发者_如何学Pythonrns the expected result:

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;
 }
}


You're misunderstanding what inflatePoint does.

It's the same as inflate (except taking a Point argument rather than two coordinates) - enlarges the rectangle in every direction.

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

Results in a Rectangle from -2, -2 to 4, 7.

Putting in negative numbers shrinks the rectangle - until it gets smaller than 0, at which point it inverts, as expected.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜