ottenendo una superficie di un oggetto
-
18-09-2019 - |
Domanda
Sto cercando di ottenere i quattro angoli del mio oggetto. Per testare se il suo sufficientemente accurate. utilizzare un metodo per tracciare un messaggio quando il mouse passa basso oggetti, sinistra, destra, o in alto. quando l'oggetto viene posizionato in coord 0,0. funziona perfettamente. ma quando ho riposizionarla. Si diventa off e non ho idea del perché. Ecco il mio codice.
nella mia classe, c'è un ciclo che ha 2 methods.updateArea (). e checkball. Area aggiornamento costante aggiornamento dare a dove l'oggetto. il mio oggetto di visualizzazione forcus punto è in alto a sinistra sul mio stage di Flash. per cui uso la larghezza e l'altezza. ancora. funziona bene a coordinare 0,0 e quando mi muovo, esso pretende molto.
package com.objects {
import flash.display.Sprite;
import flash.events.*;
import flash.display.Stage;
import flash.geom.Rectangle;
public class Brick extends Sprite {
public var Points = 100;
public var bWidth:Number = 50;
public var bHeight:Number = 20;
private var left:Number;
private var right:Number;
private var top:Number;
private var bottom:Number;
public var ball:Ball;
private var lastDistance:Number;
public var hit:Boolean;
public function Brick():void
{
addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(e:Event):void
{
updateArea();
checkBall();
}
private function updateArea():void {
left = x;
right = x + bWidth;
top = y;
bottom = y + bHeight;
}
private function checkBall():void
{
if(mouseY < bottom)
{
trace("Works!");
}
}
public function getBall(ball:Ball):void
{
this.ball = ball;
}
public function xDir():Number
{
if ((ball.xDir * ball.xspeed) < 0)
{
return(-1);
}
else if ((ball.xDir * ball.xspeed) > 0)
{
return (1);
}
return 0;
}
public function yDir():Number
{
if (ball.yspeed < 0)
{
return(-1);
}
else if (ball.yspeed > 0)
{
return (-1);
}
return 0;
}
}
}
Soluzione
x / y / mouseX / mouseY sono sempre relativi al genitore. È possibile utilizzare localToGlobal e globalToLocal di tradurre da genitore a coordinate globali.
Anche se l'oggetto non è quadrata o ha buchi, è possibile utilizzare hitTest per verificare la collisione invece di calcolare sulla base di coordinate.