получение области объекта - PullRequest
0 голосов
/ 06 января 2010

Я пытаюсь получить четыре угла моего объекта. Чтобы проверить, достаточно ли это точно. используйте метод для отслеживания сообщения, когда моя мышь проходит объекты снизу, слева, справа или сверху. когда объект расположен в точке с координатами 0,0. это работает отлично. но когда я переставлю это. Это выключается, и я понятия не имею, почему. вот мой код.

в моем классе есть цикл, который имеет 2 метода .updateArea (). и чекбол. константа области обновления дает обновление, где находится объект. моя точка отображения объекта находится в левом верхнем углу моей сцены Flash. поэтому я использую всю ширину и высоту. снова. он работает нормально с координатой 0,0, а когда я его перемещаю - нет.

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

    }
}

1 Ответ

1 голос
/ 06 января 2010

x / y / mouseX / mouseY всегда относительно родителя. Вы можете использовать localToGlobal и globalToLocal для перевода из родительских в глобальные координаты.

Также, если ваш объект не квадратный или не имеет отверстий, вы можете использовать hitTest для проверки на столкновение вместо расчета по координатам.

...