TextArea прокручивает паузы timerEvent - PullRequest
0 голосов
/ 02 октября 2018

У меня есть TimerEvent, который каждую секунду меняет альфа форму:

private function changeLightStatus(e:TimerEvent):void{
    if (boolFlashOn == false){
        light.alpha = 1;
        boolFlashOn = true;
    }else{
        light.alpha = 0.5;          
        boolFlashOn = false;
    }

Нет проблем, он работает нормально, но у меня есть <s:TextArea/> внизу, и когда пользователь прокручивает его, таймер останавливается иформа перестает мигать.

Я посмотрел на другие вопросы и в ответах говорится, чтобы создать новую временную нить, чтобы они не были связаны, но, очевидно, я не могу сделать это во Flash Builder (Поправь меня, если я ошибаюсь).

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

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

В качестве альтернативы использованию текстовой области я сделал это:

<s:Group width="{this.width*0.8}" height="{this.height*0.175}" top="{this.height*0.475}" horizontalCenter="0">
    <s:Rect left="0" right="0" top="0" bottom="0">
        <s:fill>
            <s:SolidColor color="0xFFFFFF"/>
        </s:fill>
    </s:Rect>
    <s:Scroller>
        <s:Group width="{this.width*0.8}" height="{this.height*0.175}" top="{this.height*0.475}" horizontalCenter="0">  
            <s:Label id="lblInfo" color="0x000000" width="{this.width*0.8}"/>
        </s:Group>
    </s:Scroller>
</s:Group>

Это очень простое поле, в котором пользователь может прокручивать текст и не повлияет на мое timerEvent.

Я все еще хотел бы знать причину, почему textArea приостанавливает временную шкалу.Я сделал очень простой пример:

<?xml version="1.0" encoding="utf-8"?>

<fx:Script>
    <![CDATA[

        private var tmrTest : Timer = new Timer(100);
        private var boolTest : Boolean = false;

        private function init():void{

            tmrTest.addEventListener(TimerEvent.TIMER, testChange)
            tmrTest.start();
        }

        private function testChange(e:TimerEvent):void{
            if (boolTest == false){
                btnTest.label = "Bye";
                boolTest = true;
            }else{
                btnTest.label = "Hi";
                boolTest = false;
            }
        }

    ]]> 
</fx:Script>

<s:Button id="btnTest" label="Hi" width="{this.width*0.5}" height="{this.height*0.1}"/>

<s:Group width="{this.width*0.8}" height="{this.height*0.175}" top="{this.height*0.475}" horizontalCenter="0">
    <s:Rect left="0" right="0" top="0" bottom="0">
        <s:fill>
            <s:SolidColor color="0xFFFFFF"/>
        </s:fill>
    </s:Rect>
    <s:Scroller>
        <s:Group width="{this.width*0.8}" height="{this.height*0.175}" top="{this.height*0.475}" horizontalCenter="0">  
            <s:Label color="0x000000" width="{this.width*0.8}"
                     text="{'a\nb\nc\nd\ne\nf\ng'}"/>
        </s:Group>
    </s:Scroller>
</s:Group>

<s:TextArea width="{this.width*0.8}" height="{this.height*0.175}" top="{this.height*0.725}" horizontalCenter="0" editable="false"
            text="{'a\nb\nc\nd\ne\nf\ng'}"/>

Я, наверное, должен был упомянуть, что он запускался на iPhone, а не на симуляторе.Симулятор не доставил мне никаких проблем, и я не пробовал Android.

0 голосов
/ 03 октября 2018

Я обновил ваши теги, чтобы включить Flex, но, к сожалению, я всегда использую только чистый AS3 (без тегов Flex).

Поэтому, пока вы ждете лучшего ответа, вы можете попробовать ...

(1)
Когда вы addChild(light), также установите: light.mouseChildren = light.mouseEnabled = false;.

(2)
В противном случае рассмотрите EnterFrame вместо Timer:

//# add to initial setup of vars...
var counter:int = 0;
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);

Затем добавьте вспомогательную функцию

private function onEnterFrame (e:Event) : void
{
    if ( count >= 50)
    {
        if (boolFlashOn == false)
        { light.alpha = 1; boolFlashOn = true; }

        else
        { light.alpha = 0.5; boolFlashOn = false; }

        count = 0; //reset for next loop
    }

    count++
}

Дайте мне знать, как это происходит ...

...