シュールな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);
}
}