Progression Forum
9月 03, 2010, 02:37:44 午前 *
ようこそゲストさん。まずは、ログインするか、ユーザ登録してください。
アクティべーションメール送られて来ませんでしたか?

ユーザ名、パスワード、クッキー保持期間を入力してログインして下さい。
お知らせ:
 
   ホーム   ヘルプ 検索 ログイン 登録  
ページ: [1]
  印刷  
投稿者 スレッド: Flex 3 SDKとの組み合わせ  (参照数 7577 回)
fujiki
初心者
*
投稿: 6


プロフィールを見る
« 投稿日:: 1月 12, 2009, 01:29:27 午前 »

fujikiといいます。

Flex 3 SDKとProgressionの組み合わせで、アプリケーション構築をされている方はいらっしゃいますか…?
当方、ネット上で、うまく探し当てることができなかったため、以下のサイトとサンプルを元に作成してみました。
もしすでに効率の良い方法が存在すれば、教えていただきたいです。

http://progression.jp/ja/doc/tutorial/class/
http://trac.progression.jp/browser/development/trunk/examples/flex_project

成果物は以下です。
https://dl.getdropbox.com/u/487976/Flash/Progression/FlexWithProgression.zip

FlexWithProgression/bin/index.htmlを開けば実行できますが、
実行時はどこかWebサーバに設置しないといけないかもしれません(ローカルだとSandbox侵害エラーが出る)。

以下、ざっくりですが、今回やったことです。


1. 構造
以下の様な構造です。(mxmlぽい擬似言語使ってあらわしてます)
コード:
<mx:Application>
  <mx:HBox><mx:Button id="index" /><mx:Button id="goodbye" /></mx:HBox>
<mx:Canvas id="canvas">
  <Progression>
  <Scene id="index">
[MXMLで作ったFlexコンポーネント]
</Scene>
<Scene id="goodbye">
  [MXMLで作ったFlexコンポーネント]
</Scene>
  </Progression>
</mx:Canvas>
</mx:Application>

Button@id="index"押下で、Scene@id="index"が表示される。(アプリ起動時のデフォルトシーンもindex)
Button@id="goodbye"押下で、Scene@id="goodbye"が表示される。


2. スケルトンとなるファイルの準備
* CS3上でProgression プロジェクトを新規に生成します。
* preloader.flaをパブリッシュし、preloader.swfをビルドします。


3. ソースコードの編集
* コードは以下の様な構成になっています。

コード:
  Main.mxml:
    メインルーチン。Progression初期化とか、Application初期化とか。

  myproject.scenes:
    Progressionのシーンに関するパッケージ。

  myproject.casts.labels:
    Flexコンポーネントパッケージ。(pages内で呼ばれる)

  myproject.casts.pages:
   各シーンで表示するFlexコンポーネントパッケージ。後でCastObjectに変換される。

* myproject.casts.{labels|pages}の作成
普通にMXMLでクラスを作成しておきます。

* Main.mxml作成
mx:Applicationの、addedToStageイベントを契機に、Progressionのインスタンス生成、各種ハンドラ設定等を行い、その後indexシーンに飛ばしています。

* Progressionのシーンに関するコードをチュートリアルを参考に記述。
各シーンの、_onLoadメソッド内において、FlexコンポーネントからCastObjectを生成し、親コンテナとなるオブジェクトにaddChildしています。
examples/flex_projectのサンプルでは、Applicationのインスタンスを親コンテナオブジェクトとして、CastObjectをaddChildしていましたが、個人的な利便性を考えて、mx:Canvas@id="canvas"上に、CastObjectをaddChildしています。
また、SceneObjectを拡張して、親コンテナオブジェクトを渡せる様にしています。良い名前は全部取られていたので、SceneBase.workbenchという名前にしてますが、それです。
もしこんなことしなくても、ちゃんとプロパティが存在していたりする場合は、指摘してもらえると助かります。


4. ビルド
Flex SDKのコンパイラでビルドします。(当方、FlashDevelopのビルド機能や、build.xmlをantに食わせたりしています)


以上のような感じです。よろしくお願いします。

IP記録
nium
管理人
住民メンバー
*****
投稿: 277


プロフィールを見る
« 返信する #1 投稿日:: 1月 13, 2009, 11:53:39 午前 »

貴重な情報ありがとうございます。

公式には Flex SDK まで対応するところまで追いついていませんので、こういった情報は非常に助かります。
せっかくですので、ブログの方でもご紹介させて頂きますね。

IP記録
clockmaker
コミッター
新参メンバー
*****
投稿: 94



プロフィールを見る サイト
« 返信する #2 投稿日:: 1月 13, 2009, 03:34:47 午後 »

私は Flex SDK とFlashDevelop の組み合わせで、
ちょうど今フラッシュサイトを作っています。

あまりたいしたことをしていないのですが、
参考までにご紹介させていただくと・・・

(1)Flash CS3の Progression プロジェクトパネルから「クラスベース」でファイルを準備します。
  スクリプトや公開用ファイルまで一括で準備でき便利なので、Flash CS3で元ファイルを準備しています。
(2)Flexベースで作るので .fla ファイルを削除
(3)Index.as をドキュメントクラスに設定
(4)Progression ライブラリを swc に差替えるために、
 /src/libs/フォルダを削除して、公式サイトよりDLしたswcファイルを/lib/内にswcを追加。
 (swcのほうがコンパイルが早そうなのでそうしてますが、違いましたらご指摘ください)
(5)準備完了。

基本的にFlash CS3のクラスベースで作るスタイルと同じようにしています。
私はMXMLで使用したことがありませんでしたので、
fujiki さんの情報は今後参考にさせていただきます!
IP記録
fujiki
初心者
*
投稿: 6


プロフィールを見る
« 返信する #3 投稿日:: 1月 14, 2009, 01:21:46 午後 »

>niumさん
掲載ありがとうございます。恐縮です。
個人的には、CS3なしでクラスベースのProgressionプロジェクトファイル(デフォルト設定で書き出したものでも十分)と、ビルド済みpreloader.swfが手に入れられれば良いなぁと思っています。

>clockmakerさん
情報ありがとうございます。うまく表現できませんが、mxmlcからすると、MXMLで記述されたクラスも、ASのみで記述されたクラスも、同じFlexのクラスとして扱われるので、クラスベースでの開発の中でも普通に組み込めると思います。私は簡単なコンポーネントをMXMLで記述して、ASで記述したクラス内でそれのインスタンス化をしたりしています。
IP記録
nium
管理人
住民メンバー
*****
投稿: 277


プロフィールを見る
« 返信する #4 投稿日:: 1月 15, 2009, 03:33:33 午後 »

なるほど、デフォルト設定で書き出されたクラスベースのプロジェクトデータをそのまま配布するだけであれば、あまり負荷も増えないのでいけそうな気がしますね。

とりあえず参考にデフォルト状態のプロジェクトデータをアップしてみました。
http://trac.progression.jp/browser/archives/DefaultProject.zip

何かここはこうした方がよい、的なポイントがあればお教えください。
出来る限り修正して、リリースフローに組み込めるかどうか検討してみますね。
IP記録
fujiki
初心者
*
投稿: 6


プロフィールを見る
« 返信する #5 投稿日:: 1月 16, 2009, 06:00:38 午前 »

>niumさん
> とりあえず参考にデフォルト状態のプロジェクトデータをアップしてみました。
> http://trac.progression.jp/browser/archives/DefaultProject.zip

早速の対応ありがとうございます!
ちょっと今は直ぐに確認できる状態ではないので、後ほど確認してフィードバックします。
IP記録
fujiki
初心者
*
投稿: 6


プロフィールを見る
« 返信する #6 投稿日:: 1月 18, 2009, 08:55:22 午後 »

>niumさん
遅くなって申し訳ありません。
いただいたプロジェクトファイルを、軽くですが、Flex 3 SDKで使い、うまくいけそうな事を確認しました。
確認した手順を、ざっくりとまとめてみました。ご意見などありましたら、返信していただけると幸いです。

動作サンプル
https://dl.getdropbox.com/u/487976/Flash/Progression/DefaultProjectWithFlex/index.html

プロジェクトファイル
https://dl.getdropbox.com/u/487976/Flash/Progression/DefaultProjectWithFlex/DefaultProjectWithFlex.zip

今回は、2つのシーンを用意し、その中で、mx:Buttonを一つ持つ、mx:VBoxコンポーネントを表示させています。

手順
1. DefaultProject.zip展開。FD(FlashDevelop)で開く。

2. FD向け設定
- Project -> Properties...で、"No output, only run pre/post build commands"のチェックをはずす。
- Output fileに"deploy\index.swf"を指定。
- Classpathから./srcをRemove。(./src/classesと重るため)

3. エントリポイントにあたるクラスの設定
- 今回、mx:Applicationをルートとしてるsrc/classes/Main.mxmlを作成し、これをエントリポイントとする。Always CompileをONにしておく。

4. Progressionの生成
- Index.asで行われていることを、ApplicationコンテナのapplicationCompleteか、addedToStageイベントハンドラで行う。Flex特有で注意する点としては、Progressionのインスタンスを生成する際に、systemManager.stageを渡す。

5. FlexコンポーネントのSceneObjectへの追加
- 追加したいFlexコンポーネントのインスタンスを生成し、適宜パラメータを設定。
- 上記を元にCastObjectを生成し、AddChild()。注意点としては、AddChildする際の親コンテナは、progression.containerではなく、ApplicationコンテナやApplicationコンテナの子コンテナを指定する必要があるため、何らかの形で、コンテナオブジェクトをSceneObject内から参照できるようにしておく。今回、myproject.SceneBaseという、SceneObjectを拡張したクラスを作り、SceneObjectインスタンス生成時にコンテナオブジェクトを渡せるようにした。

6. ビルド
- FDのビルド機能を使ってビルド。

以上です。


* 補足
clockmakerさんの手法を知るまで全く気づかなかったのですが、Flexにおいてmx:Applicationコンテナで始まってないクラスでも、エントリポイントとして使用できるのですね。私はずっとmx:Applicationがはじめに来ないとだめだと思いこんでいました…。上記Main.mxmlを使わず、Index.asをエントリポイントにして、普通にビルドできますね。
ただ、やり方が悪いのか、progression.containerに対して、Flexのコンポーネントを直接AddChildしても表示がなされなかったため、なにか工夫がいるかもしれません…。
IP記録
nium
管理人
住民メンバー
*****
投稿: 277


プロフィールを見る
« 返信する #7 投稿日:: 1月 23, 2009, 09:11:09 午後 »

ご報告ありがとうございます。

現在手が足りない状況のため、実際に試すことはできていないのですが、リリース毎にデフォルトクラスプロジェクトデータもダウンロード可能にする方法で、一応対処可能なようですね。
もう少しいい方法があるかもしれませんが、それは今後少しづつ対応するとして、当面はその方法を採用させて頂きますね。
http://trac.progression.jp/browser/development/tags/3.1.2/Progression3-ja_ClassProject.zip
IP記録
fujiki
初心者
*
投稿: 6


プロフィールを見る
« 返信する #8 投稿日:: 2月 18, 2009, 02:18:55 午後 »

こんにちは。

FlexとProgressionの組み合わせでのアプリ製作を進めていると、以下の様な問題が発生しました。
原因は良くわかっていませんが、ワークアラウンドする方法を見つけたので、ひとまず報告します。
(もちろん原因を追究して解決してほしいというわけではなく、単にこういうことが起きたという情報の共有目的です)

== 問題 ==
特定のFlexのコンポーネントを使用(SceneObjectにAddChildや、イベントハンドラ内でメソッドを呼び出し)すると、これらが正常に機能せず、コントロールに対して特定のアクションを行うと例外が投げられる。
今回はComboBox、Label、CursorManagerで問題が起きました。

* ComboBox: ボックスは現れるが、クリックしてもプルダウンメニューが出てこない。
* CursorManager: CursorManager.setBusyCursor()してもカーソルが変わらない(消える)。
* Label: マウスカーソルをLabel上に持っていくと、枠に収まりきれてないテキストが、ToolTip上で読むことができるが、このToolTipが出ない。

== 回避策 ==
* preloader.swfを使わず、直接index.swf(本体のSWF)をHTMLから呼び出す。
niumさんが投稿された以下の記事が助けになりました。
http://blog.progression.jp/archives/951

例外がおきているのは、Flexのコード内で、Flexのソースをざっと追った限り、何かスクリーンの矩形か、スクリーン上の座標を取得している箇所で、nullアクセスが起きているように思えます。なぜそうなっているのかまではさすがにわかりませんでした…。

== サンプル ==
* Preloaderあり(プルダウン出てこない、カーソル変わらない、ToolTipでない)
http://dl.getdropbox.com/u/487976/Flash/progression/PreloaderProblem/index_with_preloader.html

* Preloaderなし(期待通りに動作する)
http://dl.getdropbox.com/u/487976/Flash/progression/PreloaderProblem/index_without_preloader.html

* ソース
http://dl.getdropbox.com/u/487976/Flash/progression/PreloaderProblem/PreloaderProblem.zip

以上です。
« 最終編集: 2月 18, 2009, 02:55:48 午後 by fujiki » IP記録
ページ: [1]
  印刷  
 
ジャンプ先:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!