私は長方形を描きながら、私はその上に2つのテキストフィールドを追加してい
(createInfoPanel()を参照)、画面上の四角形を描画する機能を持っています。
しかし、あなたが推測するように、それはすぐにそれらを追加しています。
これらのテキストフィールドを追加するのを延期したいのですが、しばらくしてからこれらのパネルを削除したいと考えています。
インターバルやタイマーを設定すると、1回使用した後に動作しなくなります(クリア/削除によってそれらを停止しなければならないため、再度設定しませんでした)。
イメージが変更されるたびに自分のパネルが作成されているので、イメージが変更されるたびに作業する必要があります。ActionScript:各時間関数の再設定インターバルはどのように機能するのですか?
私は2つの質問があります:
1-私のcreateInfoPanel()関数が動作するたびにインターバルを再設定するにはどうすればよいですか?一度設定してclaringした後でもう動作しません。
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][email protected]));
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);
}
私のせいで、私はこのようにリセットする必要があります:クリア/削除して再度作業してください。私がリセットすれば、私が欲しいのかどうかは関係なく、再び働くからです。私はそれを完全に停止し、次にcreateInfoPanel()関数でやり直したい。私がクリアすると、再び動作しません。 – kubilay
親愛なる@pkyeck、私はコードサンプルを追加しました。あなたが見ることができるように、私は再び働きを拒否するためにそれらをクリアしますが、私はcreateInfoPanel()で毎回それらを設定します。問題は一度クリアした後には動作しないということです。 – kubilay
'setInterval()'と 'clearInterval()'は 'Timer'クラスとは何の関係もありません。なぜ2つの異なるアプローチを使用しますか?あなたが必要とするものなら、 'Timer'を一度だけ実行させることができます。 'new Timer(1000、1);' – pkyeck