In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: RSSを電光掲示板で実現するには…

RSSを読み込める電光掲示板を作りたい! 
どうしたらRSS(タイトル部分)を電光掲示板に読み込めるようになるのでしょうか? 
順番をちょっと変えたのとXML読み込み用文をちょっと追加しただけです。
* FlashDevelopで弄ったらdiffが全文に・・・
Get Adobe Flash player
by Hiiragi 02 Jul 2009
// forked from eri's RSSを電光掲示板で実現するには…
// 
//RSSを読み込める電光掲示板を作りたい! 
// 
//どうしたらRSS(タイトル部分)を電光掲示板に読み込めるようになるのでしょうか? 
// 
// 
/*
 * 順番をちょっと変えたのとXML読み込み用文をちょっと追加しただけです。
 * FlashDevelopで弄ったらdiffが全文に・・・
 */

package  
{ 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.GradientType; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.geom.Matrix; 
	import flash.net.URLLoader;
	import flash.net.URLRequest;
    import flash.text.TextField; 
    import flash.text.TextFieldAutoSize; 
    import flash.text.TextFormat; 
     
    /** 
     * 電光掲示板 
     */ 
    [SWF(width="320", height="240", backgroundColor="0x000000", frameRate="10")] 
    public class rssTitle extends Sprite  
    { 
        /** 
         * 文字列のピクセルを入れるビットマップデータ 
         */ 
        private var data:BitmapData; 
         
        /** 
         * 1 フレーム経過するごとに一定量ずつ値を足す 
         * スクロール値に使用 
         */ 
        private var frameCount:int; 
         
        /** 
         * 電光掲示板に表示する内容が入ったテキストフィールド 
         */ 
        private var textField:TextField; 
         
        /** 
         * テキストフィールドのピクセルを取得する時に使うスプライト 
         */ 
        private var sourceSprite:Sprite; 
         
		//追加分(RSSを読み込むためのオブジェクト群)
		private var rssXML:XML;
		private var rssObj:URLLoader;
		
        /** 
         * コンストラクタ 
         */ 
        public function rssTitle():void  
        { 
            if (stage) init(); 
            else addEventListener(Event.ADDED_TO_STAGE, init); 
        } 
         
        /** 
         * 初期化イベント 
         * @param    e 
         */ 
        private function init(e:Event = null):void  
        { 
            removeEventListener(Event.ADDED_TO_STAGE, init); 
            // entry point  
             
            // スプライトの初期化 
            sourceSprite = new Sprite(); 
             
            textField = new TextField(); 
            textField.autoSize = TextFieldAutoSize.LEFT; 
            //textField.height = 10; 
            //textField.width = 120; 
            textField.background = true; 
            textField.backgroundColor = 0x000000; 
			//なんかxを-1してると文字の最後に線が入ったのでコメントアウト
            //textField.x = -1; 
            textField.y = -2; 
            textField.text = "電光掲示板風RSS"; 
			
            var format:TextFormat = new TextFormat(); 
            format.color = 0x0000FF; 
            format.size = 15; 
            // 文字の隙間 
            format.letterSpacing = 1; 
            textField.defaultTextFormat = format; 
             
			//RSS読み込み開始
			rssObj = new URLLoader(new URLRequest("http://level0.kayac.com/index.xml"));
			rssObj.addEventListener(Event.COMPLETE , onComplete);
			
        } 
		
		private function onComplete(e:Event):void {
			
			//読み込んだデータをXMLに変換後、最初の記事のタイトルをtextfieldに入れる
			rssXML = new XML(e.target.data);
			textField.text = rssXML.channel.item.title[0]; 
			
			// スプライトにテキストフィールドを登録 
            sourceSprite.addChild(textField); 
             
            // 文字のピクセルが入ったビットマップデータを準備 
            data = new BitmapData(textField.width, 16); 
            data.draw(sourceSprite); 
             
            // アンチエイリアスがかかったフォントで文字が抜けてしまうので、 
            // 閾値を超えたピクセルは表示するようにする 
            for (var y:int = 0; y < data.height; y++) 
            { 
                for (var x:int = 0; x < data.width; x++) 
                { 
                    var color:uint = data.getPixel(x, y); 
                     
                    if (color >= 0x000040) 
                        data.setPixel(x, y, 0xFF); 
                    else 
                        data.setPixel(x, y, 0); 
                }                 
            } 
             
            // 初期スクロール値を設定 
            frameCount = -31; 
			
			
			
            // フレーム開始イベントの登録 
            addEventListener(Event.ENTER_FRAME, onEnterFrame); 
		}
		
		
		
        /** 
         * フレーム開始イベント 
         * @param    event 
         */ 
        private function onEnterFrame(event:Event):void  
        { 
            // フレーム数のカウント 
            frameCount++; 
             
            // 文字列サイズを超えたら初期値にする 
            if (frameCount > data.width) 
                frameCount = -31; 
             
            // 画面に描かれた内容をいったんクリア 
            graphics.clear(); 
             
            for (var y:int = 0; y < 16; y++) 
            { 
                for (var x:int = 0; x < 31; x++) 
                { 
                    var pixel:uint; 
                     
                    // 表示範囲を超えていたら強制的に OFF 
                    if (x + frameCount < 0 || x + frameCount > data.width - 1) 
                        pixel = 0; 
                    else 
                        pixel = data.getPixel(x + frameCount, y); 
                     
                    if (pixel != 0) 
                        drawDot(10 + x * 10, 40 + y * 10, 4.5, 0xFF0000, 0x800000); 
                    else 
                        drawDot(10 + x * 10, 40 + y * 10, 4.5, 0x600000, 0x400000); 
                } 
            } 
        } 
         
        /** 
         * 点を描く 
         * @param    x            点の中心の X 座標 
         * @param    y            点の中心の Y 座標 
         * @param    size        点の大きさ 
         * @param    colorLight    明るい場所の色 
         * @param    colorDark    暗い場所の色 
         */ 
        private function drawDot(x:Number, y:Number, size:Number, colorLight:uint, colorDark:uint):void 
        { 
            var colors:Array = [colorLight, colorDark]; 
            var alphas:Array = [1.0, 1.0]; 
            var ratios:Array = [0, 255]; 
            var matrix:Matrix = new Matrix(); 
            matrix.createGradientBox(size * 2,  
                                     size * 2,  
                                     0, 
                                     x - size, 
                                     y - size); 
             
            graphics.lineStyle(); 
            graphics.beginGradientFill(GradientType.RADIAL,  
                                        colors, 
                                        alphas, 
                                        ratios, 
                                        matrix); 
            graphics.drawCircle(x, y, size); 
            graphics.endFill();     
        } 
         
    } 
     
}