Ниже приведено простое приложение (несмотря на его размер) объекта Sprite
(Circles
объект) с дочерними элементами, которые также являются Sprite
объектами (Circle
объектами), каждое из которых имеет 2 дочерних объекта (_circleShape
и _toolTip
). При наведении на объект Circle
появляется _toolTip
, а его свойства 'x' и 'y' соответственно устанавливаются на текущие свойства mouseX
и mouseY
объекта Circle
. Я поместил весь код в один и тот же файл, чтобы вы могли просто скопировать и вставить весь пример кода в класс документа и запустить его. В идеале вы должны разделить пример кода на файлы класса appriopriate:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var circles:Circles = new Circles();
addChild(circles);
}// end function
}// end class
}// end package
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
internal class Circles extends Sprite
{
public function Circles()
{
var horizontalSpace:int = 50;
var verticalSpace:int = 50;
var i:uint = 1;
for (var y:uint = 0; y < 3; y++)
{
for (var x:uint = 0; x < 5; x++)
{
var circle:Circle = new Circle();
circle.x = (x * circle.width) + (x * horizontalSpace);
circle.y = (y * circle.height) + (y * verticalSpace);
circle.toolTip.text = "This is Circle " + String(i);
addChild(circle);
circle.addEventListener(MouseEvent.MOUSE_OVER, onCircleMouseOver);
i++;
}// end for
}// end for
}// end function
private function onCircleMouseOver(e:MouseEvent):void
{
var circle:Circle = Circle(e.currentTarget);
setChildIndex(circle, numChildren - 1);
}// end function
}// end class
internal class Circle extends Sprite
{
private var _toolTip:ToolTip;
private var _circleSprite:Sprite;
public function get toolTip():IText
{
return _toolTip;
}// end function
public function Circle()
{
_circleSprite = new Sprite();
_circleSprite.graphics.beginFill(0xFF0000);
_circleSprite.graphics.drawCircle(50, 50, 50);
_circleSprite.graphics.endFill();
addChild(_circleSprite);
_toolTip = new ToolTip();
_toolTip.visible = false;
_toolTip.mouseEnabled = false;
_toolTip.mouseChildren = false;
addChild(_toolTip);
_circleSprite.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
_circleSprite.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
_circleSprite.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
}// end function
private function onMouseOver(e:MouseEvent):void
{
_toolTip.visible = true;
}// end function
private function onMouseMove(e:MouseEvent):void
{
if (contains(_toolTip))
{
_toolTip.x = mouseX;
_toolTip.y = mouseY - _toolTip.height;
}// end if
}// end function
private function onMouseOut(e:MouseEvent):void
{
_toolTip.visible = false
}// end function
}// end class
internal class ToolTip extends Sprite implements IText
{
private var _textField:TextField;
public function get text():String
{
return _textField.text;
}// end function
public function set text(text:String):void
{
_textField.text = text;
}// end function
public function ToolTip()
{
graphics.beginFill(0xFFFF00, 0.8);
graphics.lineStyle(1, 0, 0.8);
graphics.drawRect(0, 0, 100, 20);
_textField = new TextField();
_textField.maxChars = 20;
_textField.autoSize = TextFieldAutoSize.LEFT;
_textField.x = 5;
addChild(_textField);
}// end function
}// end interface
internal interface IText
{
function get text():String
function set text(text:String):void
}// end interface
Я надеюсь, что это поможет вам решить вашу проблему.