Вопрос

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

в моем классе есть цикл с двумя методами.updateArea().и чекбол.Константа области обновления дает обновленную информацию о том, где находится объект.Точка силы моего отображаемого объекта находится в левом верхнем углу Flash Stage.поэтому я использую полную ширину и высоту.снова.он отлично работает с координатой 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;
        }

    }
}
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top