Отображение черно-красных всплывающих подсказок в виде речевых шаров - PullRequest
2 голосов
/ 07 сентября 2011

Я портирую карточную игру с чистого Flash / AS3 на Flex 4.5:

game

Я почти закончил, но "речевые шары" отмечены синимцвета на скриншоте выше отсутствуют.

Эти "речевые шары" исчезают, отображают красный (если они содержат буквы "сердца" или "бриллианты") или черный текст и, наконец, исчезают.

I'mпытаясь реализовать их как mx.controls.ToolTip s и подготовив простой тестовый пример, в котором 3 пользователя представлены смайликами, и вы можете нажать кнопку «Talk», чтобы сделать их talk :

test

<?xml version="1.0"?>
<s:Application
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    xmlns:s="library://ns.adobe.com/flex/spark"
    width="400" height="300"
    initialize="init();">

    <fx:Declarations>
        <s:Fade id="fadeIn" alphaFrom="0" alphaTo="1" duration="2000"/>
    </fx:Declarations>

    <fx:Script>
        <![CDATA[
            import mx.managers.ToolTipManager;

            private var i:uint = 0;

            private function init():void {
                ToolTipManager.enabled = false;
                ToolTipManager.showEffect = fadeIn;
            }

            private function talk():void {
                var str:String = 'Me plays 10' + (i % 2 ? '♥' : '♠');
                // this does not make the ToolTip appear?
                this['user' + (++i % 3)].toolTip = str;
                // how to set color according to isRed(str)?
            }

            private function isRed(str:String):Boolean {
                return (str.indexOf('♦') > 0 || str.indexOf('♥') > 0);
            }
        ]]>
    </fx:Script>

    <s:Button id="user0" horizontalCenter="0" bottom="0" label=":-)" />
    <s:Button id="user1" left="0" top="0" label=":-)" />
    <s:Button id="user2" right="0" top="0" label=":-)" />
    <s:Button right="0" bottom="0" label="Talk!" click="talk()" />
</s:Application>

Кто-нибудь может дать мне подсказку?

  1. Как заставить всплывающие подсказки появляться по желанию?(и не только при наведении курсора мыши)
  2. Как изменить их цвет (я только нашел, как установить его один раз с помощью CSS)

ОБНОВЛЕНИЕ:

Я попробовал следующее

        private var tip0:ToolTip;
        private var tip1:ToolTip;
        private var tip2:ToolTip;

        private function talk():void {
            var str:String = 'Me plays 10' + (++i % 2 ? '♥' : '♠');
            var btn:Button = this['user' + (i % 3)];
            var tip:ToolTip = this['tip' + (i % 3)];
            tip = ToolTipManager.createToolTip(str, btn.x + 10, btn.y + 10, "errorTipBelow", IUIComponent(btn)) as ToolTip;
        }

, но это работает не слишком хорошо - никаких эффектов, никаких исчезновений (наверное, мне придется самому вызывать destroyToolTip).Интересно, можно ли вообще использовать всплывающую подсказку (ab), чтобы изящно представлять "речевые шары" ...

1 Ответ

1 голос
/ 08 сентября 2011

Лично я обнаружил, что система подсказок довольно ограничена, и каждый раз, когда я хочу сделать что-то немного более простое, кажется, проще реализовать это вручную.Обычно в этом случае я бы добавил элемент управления PopUpAnchor к компонентам, которым нужны эти наложения.Тогда у вас есть полное ручное управление тем, что показано, и как именно это показано.

http://blog.flexexamples.com/category/spark/popupanchor-spark/

Существует довольно много способов сделать это, а также просто создать подсказкукомпонент в качестве подкласса группы, добавив его как дочерний и отслеживая его.

...