package { import flash.display.Sprite; import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.Event; import flash.events.IOErrorEvent; import flash.text.TextField; import flash.text.TextFieldType; import flash.utils.Timer; import flash.events.TimerEvent; import caurina.transitions.Tweener; import flash.display.BitmapData; import flash.display.Bitmap; public class Main extends Sprite { var _textArray:Array; //テキストフィールドを入れる配列 var _textContainer:Sprite; var _currentNo:uint; //現在のNo var _timerObj:Timer; //ツイート切り替えのタイマー var _txtWidth:uint; var _panelHeight:uint; public function Main() { var xmlURL:String = "load.xml"; //PHPファイルの指定 _timerObj = new Timer(5000); //切り替えの時間設定 _currentNo = 0; //現在のツイート(最初は0) _textArray = new Array(); //テキストフィールドを入れる配列 _txtWidth = 260; //テキストの横幅 _panelHeight = 120; //パネルの縦幅 //ライブラリからPanelを配置 var panelData:BitmapData = new Panel(100, 100); var panelImg:Bitmap = new Bitmap(panelData); panelImg.x = 26; panelImg.y = 57; this.addChild(panelImg); //テキストコンテナを配置 _textContainer = new Sprite(); _textContainer.x = 33; _textContainer.y = 63; this.addChild(_textContainer); //ライブラリからFrameを配置 var frameData:BitmapData = new Frame(100, 100); var frameImg:Bitmap = new Bitmap(frameData); this.addChild(frameImg); //RSSのロード var xmlLoader:URLLoader = new URLLoader(); xmlLoader.load(new URLRequest(xmlURL)); //ロード完了時イベント xmlLoader.addEventListener(Event.COMPLETE, loadComp); //ロードエラー時イベント xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioError); } /* ***************************************** RSS取得失敗時の処理 ****************************************** */ public function ioError(event:IOErrorEvent):void { var error_txt = new TextField(); error_txt.text = "RSSの取得に失敗しました。"; error_txt.width = _txtWidth; _textContainer.addChild(error_txt); } /* ***************************************** RSSロード完了後の処理 ****************************************** */ public function loadComp(event:Event):void { //ロードしたXMLをrssに入れる var rss:XML = new XML(event.target.data); //ツイートの数だけテキストフィールドを作成 var count:uint = 0; for each(var item:Object in rss.status.text) { _textArray.push(new TextField()); _textArray[count].text = item; //横幅設定 _textArray[count].width = _txtWidth; //折り返し設定ON _textArray[count].multiline = _textArray[count].wordWrap = true; _textArray[count].textColor = 0xFFFFFF; count++; } //最初のツイートを表示 _textContainer.addChild(_textArray[0]); //タイマーイベントスタート _timerObj.addEventListener(TimerEvent.TIMER, timerEvent); _timerObj.start(); } /* ***************************************** タイマー処理(一定時間で次のツイート) ****************************************** */ function timerEvent(event:Event):void { /* //表示されているツイートを削除 while(_textContainer.numChildren > 0){ _textContainer.removeChildAt(0); } _currentNo++ //現在の番号を次の配列に //次のツイートを表示 _textContainer.addChild(_textArray[_currentNo]); //最後の配列にきたら最初に戻る if (_currentNo >= _textArray.length) { _currentNo = 0; } */ if (_currentNo >= (_textArray.length - 1)) { changeMoveTweet(0); } else { changeMoveTweet(_currentNo + 1); } } /* ***************************************** ツイートの切り替え処理 ****************************************** */ function changeMoveTweet(nextNo:uint) { //trace(_currentNo); _textArray[nextNo].y = _panelHeight; _textContainer.addChild(_textArray[nextNo]); //Tweener移動処理 Tweener.addTween(_textArray[nextNo], { y:0, transition:"liner", time:2 }); Tweener.addTween(_textArray[_currentNo], { y: -_panelHeight, transition:"liner", time:2, onComplete:moveComp, onCompleteParams:[_textArray[_currentNo]] }); //次の番号を現在の番号に _currentNo = nextNo; } /* ***************************************** Tweener移動後 ****************************************** */ function moveComp(tf:TextField):void{ //移動後のテキスト削除 _textContainer.removeChild(tf); } } }