2012-03-19 27 views
0

私は長方形を描きながら、私はその上に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); 
} 

答えて

1

の1-たびに私のcreateInfoPanel()関数 作品?一度設定してclaringした後でもう動作しません。

どのように正確にあなたの間隔をリセットしていますか?あなたはここにコードを表示しません。
が、通常、あなたが+、このような再使用タイマーをリセットすることができます:これはタイマーのcurrentCount
0にを停止し、リセットされます

timer.reset(); 

あなたはその後timer.start();を言うことができる、それは走ったことがないように、すべてが動作するはずですが前。

2 - infoPanel.addChild(titleField)が表示されます。 addInfoPanel()内の行 関数です。ここでスムーズなアニメーションをするにはどうすればいいですか?つまり、テキストはゆっくりと と表示されますか?

トゥイーンを使用します。 txt.alpha = 0;のTextFieldを追加してから、アルファ値をゆっくりと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}); 
+0

私のせいで、私はこのようにリセットする必要があります:クリア/削除して再度作業してください。私がリセットすれば、私が欲しいのかどうかは関係なく、再び働くからです。私はそれを完全に停止し、次にcreateInfoPanel()関数でやり直したい。私がクリアすると、再び動作しません。 – kubilay

+0

親愛なる@pkyeck、私はコードサンプルを追加しました。あなたが見ることができるように、私は再び働きを拒否するためにそれらをクリアしますが、私はcreateInfoPanel()で毎回それらを設定します。問題は一度クリアした後には動作しないということです。 – kubilay

+0

'setInterval()'と 'clearInterval()'は 'Timer'クラスとは何の関係もありません。なぜ2つの異なるアプローチを使用しますか?あなたが必要とするものなら、 'Timer'を一度だけ実行させることができます。 'new Timer(1000、1);' – pkyeck

関連する問題