Ориентация всплывающей подсказки As3 изменяется, когда я помещаю содержимое в видеоклип - PullRequest
1 голос
/ 07 апреля 2011

У меня около 20 кнопок, которые вместе составляют карту США. Я использую подсказку AS3, которая отображает название региона при наведении курсора. Я хочу создать мувиклип, в котором будут размещены все эти 20 кнопок и их действия (в основном все помещено в один мувиклип).

Но когда я это делаю, все работает нормально, но подсказка смещается.
Он появляется почти на краю сцены. Есть ли способ заставить его появляться рядом с курсором мыши?

Заранее спасибо.

Код, который я использую для подсказки:

Button1.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler1);

function mouseOverHandler1(e:MouseEvent):void
{
    //creating a new tooltip instance
    var tooltip:Tooltip = new Tooltip();

    //we tell the holder to hold our tooltip
    holder = tooltip;

    //adding text to the tooltip
    holder.descr.text = "1 - Button";

    //positioning the tooltip on the stage
    holder.x = stage.mouseX  - 10;
    holder.y = stage.mouseY - 15;

    //adding the tooltip to the stage
    addChild(tooltip);
}

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Ниже приведено простое приложение (несмотря на его размер) объекта 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

Я надеюсь, что это поможет вам решить вашу проблему.

0 голосов
/ 07 апреля 2011

Попробуйте использовать globalToLocal

Создайте объект Point и используйте его для перевода позиции всплывающей подсказки из глобальной (рабочей области) в локальную (DisplayObject) область.

var Offset:Point = globalToLocal(new Point(stage.mouseX, stage.mouseY));

holder.x = Offset.x;
holder.y = Offset.y;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...