ActionScript:如何重置SetInterval每次功能工作?

时间:2012-03-19 07:07:42

标签: actionscript-3 flash animation actionscript

我有一个在屏幕上绘制矩形的函数(参见createInfoPanel())
在绘制矩形时,我在其上添加了2个文本字段 但正如你可能猜到的那样,它会立即加入 我想延迟添加这些文本字段,然后我想在一段时间后删除这些面板 问题是,当我设置一个间隔或计时器时,它们在我使用一次之后将无法工作(我必须通过清除/移除它们来停止它们,它没有再次设置它们。)
由于每次图像更改时都会创建我的面板,因此每次图像更改时我都需要它们才能工作。

所以,我有两个问题:
1-每次我的createInfoPanel()函数有效时,如何重新设置间隔?设置和澄清一次后它将不再起作用。

2-你可以看到infoPanel.addChild(titleField); addInfoPanel()函数中的行。我怎样才能在这里制作流畅的动画?我的意思是,文字看起来很慢?

提前致谢。

public class ImageRotator extends Sprite
{
private var ... ; //Some variables

public function ImageRotator(xmlPath:String = "images.xml", interval:int = 8301):void
{
    timer = new Timer(interval);
    loadXML(xmlPath);
}

private function loadXML(file:String):void
{
    urlLoader = new URLLoader(new URLRequest(file));
    urlLoader.addEventListener(Event.COMPLETE, parseXML);
}

private function parseXML(e:Event):void
{
    xml = new XML(e.target.data);
    loadImages();
}

private function loadImages():void
{
    for (var i:int = 0; i < xml.children().length(); i++)
    {
        var loader:Loader = new Loader();
        loader.load(new URLRequest(xml.children()[i].@src));
        imagesVector.push(loader);
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, sortImages);
    }
}

private function sortImages(e:Event):void
{
    imagesCounter++;

    for (var i:int = 0; i < imagesVector.length; i++)
    {
        imagesVector.reverse();
        addChild(imagesVector[i]);
    }

    //I have only 3 images, I needed to set indexes because
    //they were covering each other
    this.setChildIndex(imagesVector[2], 0);
    this.setChildIndex(imagesVector[1], 0);
    this.setChildIndex(imagesVector[0], 0);

    if (imagesCounter == imagesVector.length)
    {
        createInfoPanel();
        timer.addEventListener(TimerEvent.TIMER, autoChange);
        timer.start();
    }

}

private function createInfoPanel():void
{
    infoPanel.graphics.beginFill(0x000000, 0.0);
    infoPanel.graphics.drawRect(0, 0, 967, 138);
    infoPanel.graphics.endFill();

////Here I want to run addInfoPanel() function with 2 seconds delay,
////After it starts, I want to run removeInfoPanel() function with 2 more seconds delay

    addChild(infoPanel);

}

private function addInfoPanel():void {
    titleField.text = xml.children()[infoCounter]. @ title;
    titleField.x = 425;
    titleField.y = 0;

    description.text = xml.children()[infoCounter]. @ description;
    description.x = 427;
    description.y = 26;

    infoPanel.y = 300;
    infoPanel.addChild(titleField);
    infoPanel.addChild(description);
}

private function removeInfoPanel():void {

    infoPanel.removeChild(titleField);
    infoPanel.removeChild(description);
}

private function addActions():void
{
    //Some function
}

private function changeImage(e:MouseEvent):void
{
    //Image changing function
}

private function changeDepth(e:TweenEvent):void
{
    //Some function
}

private function autoChange(e:TimerEvent):void
{
    //Some function
}
}

编辑:我以前如何处理间隔:

private function createInfoPanel():void
{
    //lines above code sample
    intervalInfoPanel = setInterval(addInfoPanel,2000);

    addChild(infoPanel);
}

private function addInfoPanel():void {
    //lines above code sample
    clearInterval(intervalInfoPanel);
    intervalInfoPanelRemove = setInterval(removeInfoPanel,3500);
}

private function removeInfoPanel():void {
    //lines above code sample
    clearInterval(intervalInfoPanelRemove);
}

1 个答案:

答案 0 :(得分:1)

  

1-每次我的createInfoPanel()函数如何重新设置间隔   作品?设置和澄清一次后它将不再起作用。

你是如何重置间隔的?你不在这里显示代码。
但通常你可以重置+重复使用这样的计时器:

timer.reset();

这将停止并将计时器的currentCount重置为0 然后你可以说timer.start();,一切都应该像之前从未运过过一样。

  

2-你可以看到infoPanel.addChild(titleField); addInfoPanel()中的行   功能。我怎样才能在这里制作流畅的动画?我的意思是,文字出现了   慢慢?

使用补间。使用txt.alpha = 0;添加TextFields,然后将alpha值缓慢地补间为1.0。 TweenLite(http://www.greensock.com/tweenlite/)是一个很棒的补间引擎。

import com.greensock.*;

txt.alpha = 0.0;
TweenLite.to(txt, 1, {alpha:1.0, delay:0.4});