カテゴリー
Develop

progression検証 #20 HistoryManagerの拡張

今回は正確に言うと検証ではなく、改造です・・・。
今後のバージョンアップ等を考えると同期が取れなくなるのでお勧めしません。実装される方は一応自己責任でお願いします。
ドキュメントには掲載されていないのですが、
jp.progression.core.managers.HistoryManager
という履歴を管理するクラスがあります。基本的にはブラウザの「戻る」「進む」ボタンに対応してシーンを遷移させる働きをしています。これを使用しているクラスとしては
jp.progression.core.managers.KeyboardManager
jp.progression.core.managers.SceneManager
jp.progression.core.ui.CastObjectContextMenu

の3つがあります。コンテキストとかは標準的に表に出てくるので使っている人も多いと思います。
で、これと同じ働きをする「back」「next」ボタンをFlash内で実装する場合

という感じになります。
ただ履歴とその中における現在の位置の関係が分からないため、これ以上戻れない、進めない状態になったときにボタンを殺したりすることができません。(その口を見つけられていないだけかもしれないけど)
つまりHistoryManager._positionとHistoryManager._histories.lengthの関係をチェックして、フロントのボタンの制御を行える口を用意したいなと・・。
ただposition、histories共にprivate static属性のためextendsもできず・・・ということでHistoryManagerに2つメソッドを追加してしまいました。

カテゴリー
Develop

syntaxhighlighterを入れてみるの巻

ブログに記述したコードを自分で後でみても良く分からないぐらい汚いのでsyntaxhighlighterを導入することにしてみます。
1.まずsyntaxhighlighter – Google Codeからダウンロード
2.解凍して出来上がった”dp.SyntaxHighlighter”をサーバにアップ。(オデの場合はブログでサブドメインになっているので、そのサブドメインのドキュメントルートにアップ)
3.syntaxhighlighterのCSSを追加する。Movable Typeだとメインページ以外にもアーカイブ系にも追加。

以下他にも色々追加しないといけないので、Movable typeだとモジュールで追加した方が楽かな?ということで以下モジュールベースで話を展開。
4.”module.SyntaxHighlighter.txt”というテキストファイルを新規作成。
5.CSS設定の追加。”module.SyntaxHighlighter.txt”に以下の一文を記述。

6.使用言語のshBrushスクリプト(パーサー?)を”module.SyntaxHighlighter.txt”に追記。
種類は

  1. shBrushCpp.js :C++
  2. shBrushCSharp.js : C#
  3. shBrushCss.js : CSS
  4. shBrushDelphi.js : Delphi
  5. shBrushJava.js : Java
  6. shBrushJScript.js : JavaScript
  7. shBrushPhp.js : PHP
  8. shBrushPython.js : Python
  9. shBrushRuby.js : Ruby
  10. shBrushSql.js : SQL
  11. shBrushVb.js : Visual Basic
  12. shBrushXml.js : XML
  13. shCore.js : COREこれは必須っぽい

といったところ。自分が使用するであろう言語だけ追記。XMLだけ使う場合はこんな感じ。

7.クリップボードコピーの定義。Flashを介在してクリップボードにコードをコピーしているらしい。そのファイルは”/Scripts/clipboard.swf”。組み込みは

カテゴリー
Develop

progression検証 #18 CastImageLoaderの読み込み強制終了 CastImageLoader.close編

apeirophobia: Loaderの読み込み強制終了 Loader.close編apeirophobia: Loaderの読み込み強制終了 Loader.unload編の続き。Progression3でやるとどうなるか?の検証。
主要なコードは以下の通り。本当はもっとスマートな書き方がCastImageLoaderにはありますが、敢えてここはcontentsLoaderInfoと比較するためにこの記述の仕方で・・。
CODE:1

で、一点注意点としてはCastEventは”UNLOAD”イベントを持たないので、その部分だけはEvent.UNLOADを使用します。あ、あとcontentLoaderInfoではなく直接CastImageLoaderを監視します。
プレビュー/ダウンロードシミュレートでの実行結果は

1:読み込み中にclose実行>読み込みは中断されず、COMPLETEイベント発生。ただし_loaderは表示されない。
2:読み込み前にclose実行>特に問題なし
3:読み込み後にclose実行>_loader消去
4:読み込み中にclose実行後、再度読み込み>2回目の読み込みCOMPLETEイベントが発生するが、_loaderが表示されない。
5:読み込み完了後にclose実行後、再度読み込み>問題なく表示
6:読み込み後、再度読み込み中にclose実行>unloadが無視され、COMPLETE発生後表示されてしまう。

という感じに。読み込みは中断されずCOMPLETEイベントは発生してしまいますが、表示されることはありません。
ただし4、5、6あたりが挙動が不審なところで、読み込み中にunloadを実行する、もしくは一度unlaod無しでCOMPLETEしてしまうとcontents(DisplayObject)の制御が利かなくなるようです。(ExLoader、ExImageLoader、CastImageLoaderの中を見てみましたが、ちょっと原因良く分からなかった)
HTTP経由での実行結果は

1:読み込み中にclose実行>読み込み中断。
2:読み込み前にclose実行>特に問題なし
3:読み込み後にclose実行>_loader消去
4:読み込み中にclose実行後、再度読み込み>問題なし
5:読み込み完了後にclose実行後、再度読み込み>問題なく表示
6:読み込み後、再度読み込み中にclose実行>問題なし

という結果になりました。プレビュー環境でおかしかった4、5、6辺りはHTTP経由では問題ないようです。
で、話はちょっと横にそれますが、contentsLoaderInfoのイベントとのタイミングですが、普通にLoadingした場合

CastImageLoader::ロード開始
contentLoaderInfo::ロード開始
CastImageLoader::ロード完了
contentLoaderInfo::ロード完了

というようにCastImageLoaderのイベントのほうが先に実行されています。ステキです。
では続いて、CastImageLoaderに最適と思われる記述の仕方をしてみます。

カテゴリー
Develop 未分類

Loaderの読み込み強制終了 Loader.unload編

前回(apeirophobia: Loaderの読み込み強制終了 Loader.close編)の続き。
とりあえず主要なコードは以下のような感じ。
CODE:1

これをプレビュー/ダウンロードシミュレートで実行すると

1:読み込み中にunload実行>読み込み止らず、読み込み完了して表示
2:読み込み終了後にunload実行>表示されていた_loaderが消去
3:読み込み前にunload実行>何も起きない。

といった感じ。closeの時のように例外throwは無い。ということでhttp経由で検証。

1:読み込み中にunload実行>読み込み止らず、読み込み完了して表示
2:読み込み終了後にunload実行>表示されていた_loaderが消去
3:読み込み前にunload実行>何もおきない

という感じで、どうしようもない感じに終わりましたw
つまりunloadは読み込みが完了したcontentLoaderInfoに対してのみ有効なようです。
ということでcloseと組み合わせて使うのが正解のようですが、なんにしてもプレビュー環境で動作が確認できないのでその辺が面倒です。はぃ。
じゃ次はprogression3のCastImageLoader等で同様の処理を行う場合にどするか?(多分ほとんど一緒だとは思いますが)検証することにします。

カテゴリー
Develop

Loaderの読み込み強制終了 Loader.close編

外部イメージのローディング途中で他の処理やシーンに遷移したい場合等、ローディングを任意に中止する部分で現在はまり中ということで検証を時系列的にメモ。
“Loader”クラスには”close”と”unload”という似たようなメソッドが2つほどある。
closeは

Loader インスタンスに対して現在進行中の load() メソッドの処理をキャンセルします。

一方unloadは

load() メソッドを使用してロードされた、この Loader オブジェクトの子を削除します。関連したLoaderInfo オブジェクトの property は null にリセットされます。他のオブジェクトが参照している可能性があるため、子は必ずしも破棄されるとは限りません。ただし、Loader オブジェクトの子ではなくなります。

と定義されている。
とりあえず”close”から検証してみる。
CODE:1

既にこの時点でCLOSEイベントを取得する口が見つからない(汗 EVENT.CLOSEは”Socket”,”XMLSocket”だけにしか用意されていないイベント。つまり発動したとしても結果を拾えないという謎な感じになっている。

カテゴリー
Develop

progression検証 #16 CastDocumentでの先読み処理におけるProgression.sync=trueの設定

Progressionの便利機能の一つに

sync : Boolean
ブラウザ上でコンテンツを実行している場合に、URL と Progression インスタンスのシーンを同期させるかどうかを取得または設定します。 同一コンテンツ上で有効化できる Progression インスタンスは 1 つのみであり、複数に対して有効化を試みた場合、最後に有効化された Progression インスタンス以外の sync プロパティは自動的に false に設定されます。

があるわけですが、”Index(CastDocument)”クラス内でコマンドを使って外部ファイルのローディング処理等をしつつ、”sync=true”にしていると、コマンド処理待ちをすっ飛ばして自動的にfirstSceneIdシーンに遷移してしまいます。(prog.goto( prog.firstSceneId );”を記述していない場合、プレビュー環境では遷移しないのですがブラウザ上でみると遷移しちゃう)
各シーン毎に必要なものを読み込む様な形であれば問題ないのですが、先読みデータ前提で各シーンの設定していると(例えば外部イメージをbitmapdataとして保持して、そこから呼び出したり)、読み込み前のためにnullになってしまってエラーが出てきます。
でわどするか?っつーと”prog.sync = false;”の設定をコマンドの中にいれて設定を同期させてしまいます。つまり先読み処理が終わった後、且つ最初のシーンへの移動の間で設定する。こんな感じ
CODE-1

これで多分大丈夫。
多分・・。

カテゴリー
Develop 未分類

Progressionのテンプレートファイル for FlashDevelop

minomix blog » ProgressionのテンプレートファイルをFlashDevelopに組み込んでみた
これは便利でちゅ。

カテゴリー
Develop 未分類

progression検証 #15 CastImageLoaderをコマンドで監視編

なんだかまさに付箋状態になりつつある”Progression3″カテゴリ・・・。
ということでもう一つ追加。
外部からイメージを読み込むのに使うクラス”CastImageLoader”。これは”flash.display.Loader”のサブクラスなので”LoadChild(←flash.events.EventDispatcher)”と違ってコマンドで処理待ちしてくれない。
これをコマンドで監視できるようにするのはどーすればよいか?というお話。
“Command”クラスを継承して”CastEvent.CAST_LOAD_COMPLETE”でイベントを排出したり、”executeComplete();”したりすればなんかいけそうな気もするが、ちょっとそれは冗長な気がする。
“Func”クラスを用いて、ごにょごにょしたりしてコマンド監視下に置けないかしら?
“after”メソッドの中でゴニャゴニャしてもいけそうな気もするが、今頭がまわらないので忘れないようにメモ。

カテゴリー
Develop 未分類

progression検証 #7 外部データをpreloaderで読み込んでみる(XML編)

エラー処理などは放り出して、先に進みます。前回のエントリーではIndexSceneで外部XMLを読み込みましたが、最初のLoading時に設定系外部XMLやらを読み込む事例は多いかと思いますので、次はPreloaderで外部ファイルを読み込んで、SceneObject等からそのデータにアクセスするのはどーすればよいのか試してみます。
まず前検証でIndexSceneに設定した外部XMLの読み込みをPreloaderに移植します。
#code-1

こんな感じでOK。
実行すると外部XMLの読み込みが終わってからIndexが展開されます。ステキ。

カテゴリー
Develop

progression検証 #6 外部データを読み込んでみる(XML編)

この問題(apeirophobia: Progressionの中でPV3D)がまだクリアになっていないのだけど、ちょっと先に進みます。今回は外部データの読み込みを試してみます。
一般的に外部データとして想定されるものはxml,json,jpg,swf等があります。as3になってバイナリも読み込めるのですがそれはまた別の話で。
最初に至極まっとうにXMLでやってみます。IndexScene.asの_onLoadの中に組み込んでみます。
#code-1

こんな感じ。
次にcommandを使ってみる。

カテゴリー
Develop

progression検証 #4 シーンに色々貼り付けてみる(jp.progression.casts)

続いてSceneに色々貼り付けるのに”jp.progression.casts”系を使用してみます。
まずは”AboutScene”。前回で作成した適当なMovieClip”div_scene1″とJPG画像をcast系に変更。bmは以前は”name”を指定していたものを”id”に変更。(一応nameもありますが、getInstanceByIdを検証するためidにしておく)

で、とりあえずコンパイルしてみると”AboutScene”を表示させるタイミングでエラーが発生。

TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。

さてこれは何が原因かいな?ということで、考えると”as CastMovieClip”はちと強引だったかしら?ということで、ライブラリの”div_scene1″のリンケージ設定で、基本クラスを”jp.progression.casts.CastMovieClip”に設定。
これでOK。
さて続いて”AboutScene”で生成されて、”ContactScene”で削除される画像のオブジェクトの処理をするために”ContactScene”の中を設定。”_onInit”の中で

としてコンパイル。
“AboutScne”を表示後、”ContactScene”を表示すると、きちんとbm(id=face)が削除される。
ここまではOK。
ただし、その後他のシーンに遷移してまた”ContactScene”に戻ったり、いきなり”ContactScene”に入ったり、用はCastBitmapオブジェクトが存在しない状態だとエラーが出る。

ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。

“if (bm)”では駄目っぽい。
ちと

で何が戻ってきているのか?みてみると

[CastBitmap id=”face” name=”instance26″ group=”null”]

な感じ。addChildされているかどうか?は戻り値には関係ないっぽい。
ちなみに”getChildByName”だとremoveChildしたObjectは”null”で戻ってくる。
なので、addChildされているか否かを判定する必要がある・・。
さて・・・。ちょっとひとまずここで休憩。

カテゴリー
Develop

progression検証 #3 シーンに色々貼り付けてみる(標準)

ヨロヨロ進行中。
さて、シーンの中に普通にMovieClipやら、イメージやらを貼り付けてみる。
SceneObjectは[SceneObject Inheritance →EventIntegrator Inheritance →flash.events.EventDispatcher]という継承なので、DisplayObjectでは無い。ここは一応注意。じゃあDisplayObjectは具体的にシーンごとに分離されているのか?と言われると多分違う。恐らくドキュメントルートにSceneに関係なく配置されているのだと思うが、Sceneをまたいで存在するDisplayObjectにどーアクセスするのか?はまだ分からない。
少し話しがそれたので、元に戻す。
ガイドに書いてあるaddCommandの形でとりあえずMovieClipとBitmapDataを貼り付けてみる。
ライブラリでMovieClipを”div_scene1″、JPG画像を”bm_face”でクラス定義。
Sceneのコンストラクタで

こんな形で生成。
んでもって”_onInit”で

こんな感じでキャスト登録。
同様に”_onGoto”できちんと”RemoveChild”。

で、OK。
本当は用意されているjp.progression.casts Package – Progression 3.0 – API Referenceこの辺のキャスト系を使わないと、あまりAddCommandの中に入れている意味は無いのだと思うけど、まず整理の為に標準のやり方でやってみる。
次にaddCommandの中で定義しないで、直接貼ってみる。

カテゴリー
Develop

progression検証 #1

Ver.2で途中まで手を付けたままで、なかなか先に進めずにいたprogression。
改めてVer.3で最初からやり直してみる。
同じタイミングでtrick7さんもスタートしている。trick7.com blog: やっと Progression3 をさわりはじめたメモ 多分こちらの方がヨタヨタ展開の予感。
まずprogression.jp | ドキュメント | クラス制作ガイドで一通り実装。色々基本的な項目がパッケージ化されていて便利。元のAS3を忘れそうで恐ろしいw
この時点での感想・疑問点としては

  1. シーンが遷移中にボタンが自動的にKILLされている。これは便利な面もあれば不便な面もある。任意で解除できるのかは追って調べる。(ただ解除したらコマンド系非同期処理になにか破綻が出てくるかもしれない)
  2. flashVarsにJSONを良く使用するのでindex.htmlにJSONを組み込みたいのだけど、テンプレートをどう修正すれば良いのか良く分からない(SWCの中?)。これも追って調べる。
  3. データ構造がまだきちんと分かっていない。Indexの中のnew Progressionの第3引数でrootClass(ガイドではindexScene)を定義しているが、ここをnullにした場合どういう状態になるのか?(暗黙的にindex?)
  4. IndexSceneの中で他のシーン(About,Contact)を生成している理由は?情報構造的にindexSceneの子供という考え方?
  5. Sceneに複数のcastを割り振りできなくなった?(多分できるけど)

勉強会に行きたいのだけど、いつも都合が合わず欠席している。
次回こそなんとしても行きたい。

カテゴリー
Develop

Metamorphosis

Metamorphosis is programmed entirely in Processing, it’s the follow up to my Music is Math video.
Glenn Marshall 3d animation, visual design, motion graphics, code art, music, composition, buddhist, zen, kaleidoscope. : Butterfly.ie
(http://www.butterfly.ie/)

カテゴリー
Develop 未分類

Flashゾンビ対策?

久しぶりにFlashを触っていたのですが、クラスファイルを変更したものがパブリッシュの際に反映されず困っていました。FlashDevelopをバージョンアップさせたからかなぁ?とかFlashゾンビ対策|_level0.CUPPYとか色々検証してみたのですが、どれも駄目。
で、結局コントローラーに相当するクラスの名前を”Main”にしていたのを”Ctrl”に変更したらうまく反映されるようになりました。”Main”ってそんなに特殊な言葉だったっけな?
全然AS3とかの話じゃないですが、とりあえずエントリー。

カテゴリー
Develop 未分類

本当のFlash

Catherine Zeta Jones Flashed! : Wacky Archives
これが正しいFlash。

カテゴリー
Develop

Photoshopのガイド

前々から気になっていたのだけど、Photoshopでガイドを引くときに、めっさ拡大してガイドを配置しようとしたら、ガイドが表示されず、配置できないときがあるのだけど、そういうことって無いですか?
多分水平線のガイドだけだと思うんだけど・・・。CSのバージョンぐらいからかな?
少し拡大率を変えてやれば引けるようになるのだけど、ピクセル単位でガイドを指定したいときにちょっと困る。

カテゴリー
Develop

メモ:iPhone開発周り

iPhone Open Application Development: Jonathan Zdziarski
The iPhone Developer’s Cookbook: Building Native Applications for the Iphone (Developer’s Library): Erica Sadun
Professional iPhone And iPod Touch Programming: Building Applicatins for Mobile Safari (Wrox Professional Guides): Richard Wagner
日本語の書籍はでてないのかな?iTouchと基本的に仕様は同じと考えて良いのかな?
今まで無視してきただけにさっぱり分からん。
とりあえずメモw

カテゴリー
Develop 未分類

FLASH OOP for ActionScript 3.0

FLASH OOP for ActionScript 3.0
7月頭に発売開始だそうです。
ちなみに前の奴買っていますが、ザラザラって読んで終了してしまった・・・。
今回購入したら完読したいと思います。
今回の帯は誰のコメントがつくのだろうか?

カテゴリー
Develop 未分類

flashDevelop Ver3 Beta.7

バージョンアップしたら設定が全部吹っ飛んだ・・・汗
ちなみにフォントの設定がTools/Program settings/Mainから出来るようになって喜んだのだけど、Console FontとDefault Fontだけということで、なんかエディタ部分のフォントは従来どおり”C:\Documents and Settings\User\Local Settings\Application Data\FlashDevelop\Settings\ScintillaNET.xml”で行うかんじらしい。まぁ良いけど。
何が具体的に変わったのかまだ良く分からないですが、Global Classパスを色々設定している人は先にそこらへんメモしてからバージョンアップしてください。(一応プロジェクトレベルで設定されているクラスパスはそのまま継承されています)