Flash 获取对象的面积

Flash 获取对象的面积,flash,actionscript-3,actionscript,flashdevelop,Flash,Actionscript 3,Actionscript,Flashdevelop,我正试图得到我物体的四个角。来检验它是否足够准确。当我的鼠标通过对象底部、左侧、右侧或顶部时,使用方法跟踪消息。当对象位于坐标0,0时。它工作得很好。但当我重新定位它时。它关闭了,我不知道为什么。这是我的密码 在我的类中,有一个循环有2个方法。updateArea()。还有棋子。更新区域常数更新对象所在的位置。我的显示对象forcus point位于Flash Stage的左上角。所以我使用全宽和全高。再一次。它在坐标0,0处运行良好,当我移动它时,它不会运行 package com.objec

我正试图得到我物体的四个角。来检验它是否足够准确。当我的鼠标通过对象底部、左侧、右侧或顶部时,使用方法跟踪消息。当对象位于坐标0,0时。它工作得很好。但当我重新定位它时。它关闭了,我不知道为什么。这是我的密码

在我的类中,有一个循环有2个方法。updateArea()。还有棋子。更新区域常数更新对象所在的位置。我的显示对象forcus point位于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;
        }

    }
}
包com.objects{
导入flash.display.Sprite;
导入flash.events.*;
导入flash.display.Stage;
导入flash.geom.Rectangle;
公共类砖块扩展雪碧{
公共var点=100;
公共变量b宽度:数字=50;
公共变量BHHEIGHT:数字=20;
私有变量左:数字;
私权:数字;
私人var top:数字;
私有变量底部:数字;
公共足球:足球;
私人距离:数字;
公共变量hit:Boolean;
公共函数Brick():void
{
addEventListener(Event.ENTER_FRAME,循环);
}
私有函数循环(e:事件):无效
{
updateArea();
方格球();
}
私有函数updateArea():void{
左=x;
右=x+B宽度;
top=y;
底部=y+B八度;
}
私有函数checkBall():void
{
如果(鼠标<底部)
{
跟踪(“工作!”);
}
}
公共函数getBall(ball:ball):无效
{
这个球=球;
}
公共函数xDir():编号
{
如果((ball.xDir*ball.xspeed)<0)
{
返回(-1);
}
如果((ball.xDir*ball.xspeed)>0,则为else
{
申报表(1);
}           
返回0;
}
公共函数yDir():编号
{
如果(球速度<0)
{
返回(-1);
}
否则如果(ball.yspeed>0)
{
返回(-1);
}           
返回0;
}
}
}

x/y/mouseX/mouseY始终相对于父对象。可以使用localToGlobal和globalToLocal将父坐标转换为全局坐标


此外,如果您的对象不是正方形或有孔,您可以使用hitTest来测试碰撞,而不是根据坐标进行计算。

Hmmm,我的电影剪辑的x和y坐标与我的舞台坐标不同。我意识到它是相对于我的显示对象阶段,而不是主阶段。但我一直认为显示对象的x和y坐标,总是相对于主舞台。为什么会有不同?在我的情况下,似乎不是这样。我跟踪了这两种情况,得到了不同的值。不知道那是怎么回事。但我试图解决的问题现在已经解决了。所以我是g2g。