2010-01-25 17 views
0

cela semble un peu au goût de noisette:AS3 - bug dans Rectangle.inflatePoint() - ne traite pas négatif coordonne bien

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) 

j'attendre que le résultat soit (x = -5, y = - 3, largeur = 5, hauteur = 3).

est ici une implémentation qui renvoie le résultat attendu:

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

Est-ce une question? – OcuS

Répondre

3

Vous êtes mal compris ce que inflatePoint fait.

C'est la même chose que inflate (sauf prendre un argument Point plutôt que deux coordonnées) - agrandit le rectangle en dans toutes les directions.

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

résultats dans un rectangle de -2, -2 à 4, 7. Mettre des nombres négatifs réduit le rectangle - jusqu'à ce qu'il soit plus petit que 0, à quel point il s'inverse, comme prévu.

+0

Alors ... les utilisateurs font attention. Faites votre propre vérification d'erreur. –

+0

aaah. mon erreur. Merci. –