ネコガネ:メモ帳

Adobe Flash & AIR、Action Script 関連とゲーム制作に関するメモ。

LINEスタンプ「モコとくろすけ」販売開始しました!!

f:id:necogane:20140610134550p:plain

長い審査期間を終え、「モコ と くろすけ」ようやく販売開始となりました!

スコティッシュフォールドの女の子「モコ」と黒猫の男の子「くろすけ」のスタンプです。

他の猫系スタンプとの違いは、カップル向けのLOVEな要素が少〜し入っていることです! もし、気に入っていただけましたら、あなたのパートナーと一緒に使っていただけたら嬉しいです。

評判がよければ…各キャラクター単体で、色んなシチュエーションメッセージを 増やしたバージョンも作成したいと思っています。

(13/12/06 更新) 指定したラベルにタイムラインヘッダを移動するFlashの拡張機能

指定したラベルにタイムラインヘッダを移動するFlash Proの拡張機能を作成しました。

この拡張機能のアイデアは、A.e.Suckさまの記事で、

AmazingFlash: 拡張コマンド ベスト3

沖くん作でフレーム番号を指定して再生ヘッドを移動するコマンドがあるんですが、これのラベル版があったらいいなあ。名付けて「ラベル名を指定して再生ヘッドを移動する」コマンド。

という発言をみつけたため。とても便利そうなJSFLなので、勉強がてら作ってみました。

…が、タイムラインが数百フレーム以上になるとヘッダが移動するまでに少し時間がかかりますorz
表示しているタイムラインのヘッダを動かすだけなので、シーンまたいだ移動もできません
そんなこんなで、いまいち実用性に乏しい拡張機能なのですが、とりあえず作ったのでひっそり公開して見ようと思います。

(2013/12/06 追記)
コードの最適化を行い、タイムラインのフレーム数が多くてもタイムラインヘッダの移動に時間がかからなくなりました。
修正バージョンは下記にアップロードしました。

ダウンロード

機能説明

  • 現在表示中のタイムラインのヘッダを、指定したラベルの位置に移動します。ムービークリップを表示中であれば、そのムービークリップのタイムラインヘッダを移動します。
  • ラベル名が重複していた場合は、最初に見つかったフレームラベルの位置にヘッダを移動します。

動作環境

  • Adobe Flash CS6 以降(Windows/Mac)
  • Mac OS X 10.7.5、Adobe Flash CS6、Adobe Flash CC で動作確認を行っています。
    たぶんWindowsでも動くと思いますが、インストールできなかったり、動かなかったりした場合は @necogane まで教えてください。

使い方

  1. Extension Manager を使用して、[goto_label_v1.1.0.zxp]をインストールします。
  2. [コマンド]メニュー→[指定ラベルに移動]を選択します。
    f:id:necogane:20131205170341p:plain
  3. [フレームラベル]に移動したいラベル名を入力し、[OK]ボタンをクリックします。 f:id:necogane:20131205170345p:plain
  4. タイムラインヘッダが指定したフレームラベルの位置に移動します。 f:id:necogane:20131205170349p:plain

注意

  • フレーム数が多い(500フレーム以上の場合)と、ヘッダを移動するまでに少し待たされます。 速度の改善策がないか検討します。→改善しました。
  • ラベル用のレイヤーは、なるべく一番上に置いておいてください。
    f:id:necogane:20131205175952p:plain
    これは、内部的に各レイヤーのキーフレームごとにラベルのチェックを行っているのですが、レイヤーは上から順番に検索しています。そのため、一番上にラベルレイヤーを置いておくと、一番初めにチェックが行われるので、ラベルの位置の検索処理に時間がかからなくなります。
    逆にキーフレームが沢山(500〜)振ってあるレイヤーが一番上に置かれていると、待ち時間がかかってしまいますのでご注意ください。

SFWデータの暗号化に関すること

ゲームのリソースデータの暗号化、複合方法を調べていて、データを暗号化し複合することはできたけど、肝心の秘密鍵をどこに持たせれば良いのか悩んでいた。
SWF自体に秘密鍵を含めてしまうと、仮にSWFを逆コンパイルされてしまった場合にバレバレになってしまう。

情報を探していたところ、SWFデータの暗号化に関することが、Adobeのページに掲載されていた。

より安全なSWF Webアプリケーションの作成 | Adobe Developer Connection

開発者はSWFファイルが逆コンパイルできることを認識しておく必要があります。このため、これらの暗号化方式の秘密鍵およびプライベート鍵は、SWFファイル自体の中に格納できません。少なくとも、対称方式の秘密鍵と非対称方式のプライベート鍵は、セキュリティで保護されたインターネットプロトコルを通じてダウンロードするか、エンドユーザのマシン上のSWFから生成することによって、漏洩を防止する必要があります。

引用箇所を更に抜粋すると、下記の2つの方法があるということだった。

  • セキュリティで保護されたインターネットプロトコルを通じてダウンロードする
  • エンドユーザのマシン上のSWFから生成する

ただ、インターネットに接続できない場合もあると思うので、他にも方法がないか探してみる。

ActionScript 3.0 で、ディスプレイオブジェクトからBitmapDataを取得するには?

インスタンス化したMovieClipなどのDisplayObjectからBitmapDataを取得するには、draw (BitmapData.draw メソッド)を使用する。 その際、matrixにDisplayObjectのスケール情報を渡すことで、変形後のBitmapDataを得ることが出来る。

flash on 2013-11-21 - wonderfl build flash online

package {
    import flash.display.Bitmap;
    import flash.geom.Matrix;
    import flash.display.BitmapData;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            //DisplayObject を作成
            var _mc:MovieClip = new MovieClip();
            _mc.graphics.beginFill(0xFF0000);
            _mc.graphics.drawRect(0,0,24,24);
            _mc.graphics.endFill();
            
            //[1]テストのためスケールを2倍にする
            _mc.scaleX = 2;
            _mc.scaleY = 2;
            
            //DisplayObject と同じサイズの BitmapData を作成
            //ビットマップデータ1
            var _bitmapData1:BitmapData = new BitmapData(_mc.width,_mc.height,false);
            //ビットマップデータ2
            var _bitmapData2:BitmapData = new BitmapData(_mc.width,_mc.height,false);
            
            //DisplayObject のスケール情報を取得
            var _matrix:Matrix = new Matrix();
            _matrix.scale(_mc.scaleX,_mc.scaleY);
            
            //BitmapData に書き込み
            //[2]ビットマップデータ1はそのまま
            _bitmapData1.draw(_mc);
            //[3]ビットマップデータ2には、Matrixを渡す
            _bitmapData2.draw(_mc,_matrix);
            
            //[4]ビットマップデータ1の方は、[1]のスケールが反映されず作成時の DisplayObject のサイズのまま
            var bitmap1:Bitmap = new Bitmap(_bitmapData1);
            this.addChild(bitmap1);
            
            //[5]ビットマップデータ2の方は、[1]のスケールが反映され2倍の大きさで表示される
            var bitmap2:Bitmap = new Bitmap(_bitmapData2);
            bitmap2.x = 48;//位置調整
            this.addChild(bitmap2);

        }
    }
}

ActionScript 3.0 でString型の内部文字コードは?

「UTF-16BE」(BEはビックエディアン)。
Adobe Flash Platform * データ型の「String データ型」にも書かれていて、charCodeAtで文字コードを調べるとUTF-16BE形式で文字コードが返ってくる。
(charCodeAt はUnicode表と照らし合わせるときにわかりやすい。)

外部読み込みするテキストファイル自体の文字コードは「UTF-8」が推奨とされているため、ByteArrayを使い自前でテキストファイルの文字コードを調べた時と、charCodeAtで調べた文字コードとの違いがややこしかったのでメモ。

はてなブログでSWFファイルの埋め込みテスト

DropBoxの[Public]フォルダを使用して、SWFファイルを表示。 [Public]フォルダ機能の復活は、下記リンクを参考にさせていただいた。感謝。

シケモク Tech: Dropboxで廃止されたPublicフォルダ機能を5秒で復活させる方法

Flash Player 11.7.0 以上をインストールしてください。

Flash Builder が重くなった時

Flash Builder を使用しているうちに動作が劇的に重くなったときは、以下の操作で解決することがある。

  1. [プロジェクト]メニュー→[クリーン]を選択する。
  2. [すべてのプロジェクトをクリーン]または、[以下で選択したプロジェクトをクリーン]のどちらかのラジオボタンをチェックする。
  3. [OK]ボタンをクリック。

f:id:necogane:20130724233805p:plain