2008年10月アーカイブ

UIコンポーネントにマスクを適用するときに
マスクレイヤーによる適用をするとラベルが消えてしまいます。

スクリプトのsetMaskによる適用なら問題ないらしいです。

知ってればほんと大したことないことなんですが
知らずに進めてて、後で修正ってなったときに偉いことになりそうなんで、とりあえず。

以前に作っていたAS2版をAS3版に移行してみました。

package {
    import flash.xml.*;
    public class MyXPath {
        public static  function xmlToArr(_xml:XML):Array {
            var reArr:Array=new Array  ;
            var childXMLList:XMLList=_xml.children();
            for (var i=0; i < childXMLList.length(); i++) {
                reArr[i]=new Array  ;
                var childXML:XML=childXMLList[i];
                var grandchildXMLList:XMLList=childXML.children();
                for (var j=0; j < grandchildXMLList.length(); j++) {
                    var grandchildXML:XML=grandchildXMLList[j];
                    reArr[i][grandchildXML.name()]=grandchildXML.toString();
                }
            }
            return reArr;
        }
    }
}

AS3になってXMLドキュメントへのアクセスがわかりやすくなったらしいので
このクラス自体、あんまり使わないかもしれないですが。

オープニングムービーがあるコンテンツは
2度目以降のアクセスに対してそのオープニングを自動的にスキップする仕様を求められることがよくあります。

最も一般的なのはクッキーだと思うのですが、
今回は以前にやったSharedObjectを利用してFlashだけでやりました。

class AccessChecker {
    private static  var _lso:Object = SharedObject.getLocal("accessChecker");
    public static function chk(_num:Number):Boolean {
        var num:Number = (_num == undefined) ? 24 : _num;
        var lastTime:Number = _lso.data.lastTime;
        lastTime = (lastTime == undefined) ? 0 : lastTime;
        var dateObj:Date = new Date();
        var nowTime:Number = Math.ceil(dateObj.getTime()/1000/3600);
        var flag:Boolean;
        if (nowTime-lastTime

chk関数を実行し、2回目以降のアクセスには引数の時間が経過するまでfalseを返します。
ついでなんで、引数無しの時は24時間にしておきました。

タイムラインには

var openingPlay:Boolean=AccessChecker.chk(12);

とかで、あとはopeningPlayを適当に扱ってあげます。

UIコンポーネントでまたまたトラブルです。

コンボボックスを配置したものを制作中、
それだけで書き出したら普通に動作するのに
別のSWFから読み込ませると動かなくなりました。

var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth()); var mcLoader:MovieClipLoader = new MovieClipLoader(); mcLoader.loadClip("combo.swf",container);

色々、調べたら特にComboBoxに限ったことではなく
UIコンポーネントのいくつかにこういった症状があるそうです。

解決方法はロードするムービークリップの_lockroot プロパティをtrueに。

var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth()); container._lockroot = true; var mcLoader:MovieClipLoader = new MovieClipLoader(); mcLoader.loadClip("combo.swf",container);

動いてよかった。

コンポーネントはカスタマイズが面倒だったりするのであんまり好きではないんですが、<br/> 使用する理由としては結構便利なリスナーイベントが用意されてるところでしょうか。

今回、TextInputについて調べてみました。

フォーカスのオン・オフの設定の実験です。

コンポーネントのTextInputを2つ配置して、<br/> インスタンス名を「t0」「t1」とします。

var _ti:mx.controls.TextInput;
var _str:String;

function textInputFocusSetup(_ti, _str):Void {
    _ti.text = _str;
    _ti.borderStyle = "none";
    //
    var tiFocusOut:Object = new Object();
    tiFocusOut.focusOut = function() {
        if (_ti.text == "") {
            _ti.text = _str;
        }
    };
    _ti.addEventListener("focusOut",tiFocusOut);
    var tiFocusIn:Object = new Object();
    tiFocusIn.focusIn = function() {
        if (_ti.text == _str) {
            _ti.text = "";
        }
    };
    _ti.addEventListener("focusIn",tiFocusIn);
}

textInputFocusSetup(ti0, "入力してください");
textInputFocusSetup(ti1, "入力してね");

初期状態では引数に指定した文字列が表示され、フォーカスすると文字列が消える。
さらに、未入力のままフォーカスが外れたらもう一度最初の文字列が表示される。

HTMLのフォームでもよくあるんで、似たようにしたかったんですが、
もう少し作り込まないとだみたいですね。
とりあえずということで。

2

このアーカイブについて

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

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

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

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