我有一个在屏幕上绘制矩形的函数(参见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);
}
答案 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});