2008年11月アーカイブ

表示オブジェクトを重ねて、下になったほうをボタン化したときにハマりました。

AS2のときは上にMovieClipをおいてもボタン機能に影響はなかったのですが
AS3では上に重なった表示オブジェクトの領域に入ると
デフォルトの設定でロールオーバーとなってしまうようです。

回避方法は、上に重なった表示オブジェクトに下記の設定をします。

var sp:Sprite = new Sprite();
sp.mouseEnabled=false;

mouseEnabledはマウスからのメッセージを受け取るかどうかを設定します。

昔からこういうのが好きなんです。
AS3の軽さを実感したくて作ってみました。

クリックすると様々な色の粒が飛び出します。

JavascriptをONにし、最新のFlashプレーヤーをインストールしてください。

勉強を兼ねて作ってみました。

JavascriptをONにし、最新のFlashプレーヤーをインストールしてください。

setText関数にテキストを渡すと表示します。

必要っぽいパラメータはsetで用意しました。
各パラメータに渡す値の組み合わせによってはコンパイルエラーを出してしまうみたいです。
色々、制限をつけてみたんですが、改行コードはNGなど、まだまだあるみたいです。

ToolTip.as

package {
    import flash.display.DisplayObjectContainer ;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    import flash.text.TextFormatAlign;
    import flash.geom.Point;
    import flash.geom.Rectangle;

    public class ToolTip {
        /*-----------------------------------------------
         変数
        -----------------------------------------------*/
        private var container:DisplayObjectContainer ;
        private var puffSet:Sprite;
        private var tf:TextField;
        private var flag:Boolean;
        //◆set&get用
        private var __widthPuff:uint=100;//最大幅
        private var __padding:Object={top:5,left:5,bottom:3,right:3};//吹き出しとテキストとの間隔
        private var __round:uint=5;//角丸の直径
        private var __x:Number=0;//X座標
        private var __y:Number=0;//Y座標
        private var __size:uint=10;//フォントサイズ
        private var __color:uint=0x000000;//文字の色
        private var __leading:uint=0;//行間
        private var __bgColor:uint=0xFFFFFF;//吹き出しの色
        private var __bgAlpha:Number=1;//吹き出しの透明度
        private var __lineThickness:uint=2;//ラインの太さ
        private var __lineColor:uint=0x000000;//ラインの色
        private var __lineAlpha:Number=1;//ラインの透明度
        private var __length:uint;//表示文字列の字数
        private var __maxLength:uint=100;//最大文字数

        /*-----------------------------------------------
         関数・メソッド
        -----------------------------------------------*/
        //◆コンストラクタ
        public function ToolTip(_container:DisplayObjectContainer ):void {
            container=_container;
            init();
        }
        //◆初期設定
        private function init():void {
            tf = new TextField();
            tf.autoSize = TextFieldAutoSize.LEFT;
            tf.selectable = false;
            tf.multiline = true;
            tf.wordWrap = true;
            tf.mouseEnabled = false;
            //
            puffSet=new Sprite();
            puffSet.addChild(tf);
            //
            flag=false;
        }
        /*-----------------------------------------------
         メイン
        -----------------------------------------------*/
        public function setText(_str:String):void {
            tf.text=textRound(_str);
            tf.x=__padding.left;
            tf.y=__padding.top;
            tf.width=__widthPuff-(__padding.left+__padding.right);
            tf.setTextFormat(textFormatFunc());
            //
            var frame:Rectangle=textRectangle(tf);
            //
            puffSet.graphics.clear();
            puffSet.graphics.beginFill(__bgColor, __bgAlpha);
            puffSet.graphics.lineStyle(__lineThickness,__lineColor,__lineAlpha);
            puffSet.graphics.drawRoundRect(frame.x,frame.y, frame.x+frame.width+(__padding.left+__padding.right), frame.y+frame.height+(__padding.top+__padding.bottom),__round,__round);
            puffSet.graphics.endFill();
            puffSet.x=__x;
            puffSet.y=__y;
            container.addChild(puffSet);
            //
            flag=true;
        }
        public function removeText():void {
            if (flag) {
                container.removeChild(puffSet);
                flag=false;
            }
        }
        /*-----------------------------------------------
         サブ
        -----------------------------------------------*/
        //テキストフォーマットを設定
        private function textFormatFunc():TextFormat {
            var format:TextFormat=new TextFormat();
            format.size=__size;
            format.color=__color;
            format.leading=__leading;
            format.font="_ゴシック";
            return format;
        }
        //全テキストを囲む矩形データを返す
        public function textRectangle(_tf:TextField):Rectangle {
            var firstText:Rectangle = _tf.getCharBoundaries(0);
            var fp:Point = new Point(firstText.x,firstText.y);
            var tr:Rectangle,trLeft:Number;
            var mostLeft:Number=0;
            __length=tf.length;
            for (var i=0; i<__length; i++) {
                tr = _tf.getCharBoundaries(i);
                trLeft=tr.x+tr.width;
                mostLeft=(mostLeft__maxLength) {
                str=str.substr(0,__maxLength-1)+"...";
            }
            return str;
        }

        /*-----------------------------------------------
         set&get
        -----------------------------------------------*/
        public function set _width(value:uint):void {
            __widthPuff=value;
        }
        public function get _width():uint {
            return __widthPuff;
        }
        public function set _padding(value:Object):void {
            __padding=value;
        }
        public function get _padding():Object {
            return __padding;
        }
        public function set _round(value:uint):void {
            __round=value;
        }
        public function get _round():uint {
            return __round;
        }
        public function set _x(value:Number):void {
            __x=value;
        }
        public function get _x():Number {
            return __x;
        }
        public function set _y(value:Number):void {
            __y=value;
        }
        public function get _y():Number {
            return __y;
        }
        public function set _size(value:uint):void {
            //サイズが10より大きくなると、条件次第でバグるので
            __size=(value>10)?10:value;
        }
        public function get _size():uint {
            return __size;
        }
        public function set _color(value:uint):void {
            __color=value;
        }
        public function get _color():uint {
            return __color;
        }
        public function set _leading(value:uint):void {
            __leading=value;
        }
        public function get _leading():uint {
            return __leading;
        }
        public function set _bgColor(value:uint):void {
            __bgColor=value;
        }
        public function get _bgColor():uint {
            return __bgColor;
        }
        public function set _bgAlpha(value:Number):void {
            __bgAlpha=value;
        }
        public function get _bgAlpha():Number {
            return __bgAlpha;
        }
        public function set _lineThickness(value:uint):void {
            __lineThickness=value;
        }
        public function get _lineThickness():uint {
            return __lineThickness;
        }
        public function set _lineColor(value:uint):void {
            __lineColor=value;
        }
        public function get _lineColor():uint {
            return __lineColor;
        }
        public function set _lineAlpha(value:Number):void {
            __lineAlpha=value;
        }
        public function get _lineAlpha():Number {
            return __lineAlpha;
        }
        public function set _maxLength(value:Number):void {
            //文字数が多くなると重くなるので
            __maxLength=(value>500)?500:value;
        }
        public function get _maxLength():Number {
            return __maxLength;
        }
        //◆getだけ
        public function get _length():Number {
            return __length;
        }
    }
}

タイムライン

iimport ToolTip;

var t:ToolTip=new ToolTip(this);
t._padding.left=4;
t._padding.top=2;
t._padding.bottom=0;
t._padding.right=1;
t._width=100;
t._round=10;
t._x=t._y=200;
t._size=10;
t._color=0xFFFFFF;
t._leading=2;
t._bgColor=0x6666FF;
t._bgAlpha=1;
t._lineThickness=2;
t._lineColor=0x3333CC;
t._lineAlpha=1;
t._maxLength=100;
t._width=100;
t.setText("テキストテキストテキストテキストテキストテキストテキストテキスト");

var sp:Sprite=new Sprite();
addChild(sp);
var t2:ToolTip=new ToolTip(sp);
t2._x=10;
t2._y=10;

addEventListener(Event.ENTER_FRAME, moveHander);
function moveHander(e:Event):void {
    sp.x=stage.mouseX;
    sp.y=stage.mouseY;
    t2.setText("マウスカーソルの座標 → ("+String(stage.mouseX+","+stage.mouseY)+")");
}

時間があればもう少し作りこみたいです。

コンストラクタでstageを参照しているswfを外部から読み込むとnullが返りエラーになります。
stageの参照はタイミングを意識して使った方がいいみたいです。
でないとほんとに泣き見ますね。

HTMLからFlashに変数を渡す最も手っ取り早い方法として
Flash Varsがあります。

プレーヤーのバージョンに依存することから
AS2のころは使用を控えていましたが、
これからは積極的に使っていきたいと思います。

Flash側の受け取り方が大きく変わったようなのでその辺りをメモ。

読み込まれたデータはドキュメントクラス、もしくはタイムラインのDisplayObjectのloaderInfoプロパティに格納されるそうです。

FlashVars.as

package {
    import flash.display.LoaderInfo;
    import flash.display.MovieClip;
    public class FlashVars extends MovieClip {
        public function FlashVars():void {
            var lip:Object=loaderInfo.parameters;
            for (var i:String in lip) {
                trace(lip[i]);
            }
        }
    }
}
2  3  4  5

このアーカイブについて

このページには、2008年11月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年10月です。

次のアーカイブは2008年12月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。