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

シュールなAS3.0 #4 カーソルにコメントさせてみた

初心者です。そういうことです。
備忘録&実験

ごりおしですが、それっぽい。
修正予定。
別の方法でもつくってみたい。

謎
・Timerをローカルでインスタンス化(メソッド変数?)していたら、動くときと動かないときがあった⇒外にだしてやったら、安定して動くようになった
/**
 * Copyright ultraTakePon ( http://wonderfl.net/user/ultraTakePon )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/hW6t
 */

package {
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.display.StageDisplayState;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        private var balloon:Balloon;
        public function FlashTest() {
            balloon = new Balloon();
            addChild(balloon);
            //balloon.doComment("そんなに見つめないで///");
            
            this.addEventListener(Event.ENTER_FRAME, update);
        }
        private function update(e:Event):void
        {
            // マウスカーソルにピッタリマーク
            balloon.x = mouseX + 30;
            balloon.y = mouseY + 10;
            balloon.doRandomComment();
        }
    }

}

import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.display.Sprite;
import flash.text.TextFormat;
import flash.text.TextField;

class Balloon extends Sprite
{
    private const コメント枠の太さ:uint = 6;
    
    private var テキストフィールド:TextField;
    private var 文字の高さ:uint;    // 全ての基準的な値として使用
    private var timer:Timer;
    public function Balloon ():void
    {
        テキストフィールド = new TextField()
        テキストフィールド.autoSize = "left";    // ここにもってこないとなぜか、文字が巨大化する
        テキストフィールド.text = "TEST文字列モジレツもじれつ";
        this.visible = false;
        addChild(テキストフィールド);
        文字の高さ = テキストフィールド.height;
        テキストフィールド.defaultTextFormat = new TextFormat("", 文字の高さ, 0x0, true);
        テキストフィールド.x = 文字の高さ;
        テキストフィールド.y = -文字の高さ * 0.5;
        //テキストフィールド.text = "" + テキストフィールド.width;
        //テキストフィールド.text = "" + テキストフィールド.height;
        
        doComment("私がカーソルDA★");
    }
    
    public function doComment(コメント:String):void
    {
        var time:Number;    // バルーン表示時間
        
        // 別のコメントを表示中のときは抜ける
        if (this.visible) return;
        this.visible = true;
        
        // 引数で渡されてきたコメントで初期化
        テキストフィールド.text = コメント;
        
        // 一旦全消しという無駄なことをやっている
        this.graphics.clear();
        
        // 三角形の吹きだしっぽいやつ
        this.graphics.beginFill(0x0);
        this.graphics.drawTriangles(
            Vector.<Number>([+文字の高さ * 0.5, -文字の高さ * 0.5,
                             +文字の高さ * 0.5, +文字の高さ * 0.5,
                             -文字の高さ * 0.5, 0]) );
        this.graphics.endFill();
        
        // 四角形のパーツ
        this.graphics.beginFill(0xFFFFFF);
        this.graphics.lineStyle(コメント枠の太さ * 0.5, 0x0);
        this.graphics.drawRect(+文字の高さ * 0.5, -文字の高さ, テキストフィールド.width + 文字の高さ, 文字の高さ * 2);
        this.graphics.endFill();
        
        // 余分な部分の消去 ↓コメントアウトしてみると、どこを消そうとしているのかがわかるます
        this.graphics.beginFill(0xFFFFFF);
        this.graphics.lineStyle(0, 0xFFFFFF);
        this.graphics.drawTriangles(
            Vector.<Number>([+文字の高さ * 0.5 + コメント枠の太さ, -文字の高さ * 0.5,
                             +文字の高さ * 0.5 + コメント枠の太さ, +文字の高さ * 0.5,
                             -文字の高さ * 0.5 + コメント枠の太さ, 0]) );
        this.graphics.endFill();
        
        // コメントの長さで消すタイミングを計る
        if (コメント.length * 400 < 3000) time = 3000;
        else time = コメント.length * 400;
        timer = new Timer(time, 1);
        timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
        timer.start();
    }
    
    private function onTimerComplete(e:TimerEvent):void
    {
        this.visible = false;
        e.updateAfterEvent();
    }

    public function doRandomComment():void
    {
        var comment:String;
        switch(Math.floor(Math.random() * 30))
        {
        case 0:comment = "べ、別にあんたのために(ry ///";    break;
        case 1:comment = "へへへ";    break;
        case 2:comment = "ATフィールドぜんかい!?";    break;
        case 3:comment = "すらまっぱぎー";    break;
        case 4:comment = "今のなんかワロタ";    break;
        case 5:comment = "くせになる";    break;
        case 6:comment = "も、もうやめたげてよー";    break;
        case 7:comment = "フヒ";    break;
        case 8:comment = "そ、そこだけはやめろよな";    break;
        case 9:comment = "ふぅ";    break;
        case 10:comment = "もうっ///";    break;
        case 11:comment = "もうなにがなにやらわからなくなってきたあああ";    break;
        case 12:comment = "わふーぅ";    break;
        case 13:comment = "にゃにゃにゃー♪";    break;
        case 14:comment = "くんかくんか";    break;
        case 15:comment = "ぺろぺろ";    break;
        case 16:comment = "もっといじるのだ";    break;
        case 17:comment = "いいね";    break;
        case 18:comment = "まだまだー";    break;
        case 19:comment = "おまわりさんこの人です";    break;
        case 20:comment = "ミーンミンミンミンミーン";    break;
        case 21:comment = "ふぅぉおおおおおぉぉ!?";    break;
        case 22:comment = "いっけえええぇぇぇ!!";    break;
        case 23:comment = "やだっ、こっちみないで///";    break;
        case 24:comment = "m9";    break;
        case 25:comment = "動きたくないでござる";    break;
        case 26:comment = "わからなくもない";    break;
        case 27:comment = "はいはい、ワロスワロス";    break;
        case 28:comment = "ふぇ~";    break;
        }
        if (comment) doComment(comment);
    }

}