Frage

Ich versuche, die vier Ecken meines Objekts zu erhalten. Um zu testen, ob seine präzise genug. verwenden, um eine Methode eine Nachricht zu verfolgen, wenn meine Maus, um die Objekte unten geht, links, rechts oder oben. wenn das Objekt bei Koord 0,0 positioniert. es funktioniert perfekt. aber wenn ich es neu zu positionieren. Es wird aus und ich habe keine Ahnung, warum. hier ist mein Code.

in meiner Klasse gibt es eine Schleife, die 2 methods.updateArea hat (). und checkball. Update-Bereich konstant geben Update auf, wo das Objekt ist. mein Anzeigeobjekt forcus Punkt ist oben links auf meiner Flash-Bühne. so dass ich die volle Breite und Höhe. nochmal. es funktioniert bei feinen Koordinate 0,0 und wenn ich es zu bewegen, tut es.

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

    }
}
War es hilfreich?

Lösung

x / y / mouseX / mouseY sind an die Mutter immer relativ. Sie können localToGlobal und globalToLocal verwenden von den Eltern auf globalen Koordinaten zu übersetzen.

Auch wenn das Objekt nicht quadratisch ist oder Löcher, können Sie hitTest verwenden für Kollision zu testen, anstatt basierend auf Koordinaten zu berechnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top