- 2008-11-17 (月) 14:05
- progression | study
progressionのasDocやら、as3事体理解しきれてないので、この本を見たりしながら、
ちょこちょここの前のサンプルをベースにいじっていますが、
スピードは超スローで、
本当どうってことないとこでひっかかったりしてます。。。
が、めげずにぼちぼちやってきます!
この前のエントリのサンプルを基に、
シーンの中にさらに子シーン(ポップアップして閉じるような)を追加したものを作りたいと思います。
Scene1の中に子シーンChild1,Child2,Child3を作成してみます。
Child~はボタンを押したらScene1内でポップアップしてChild~内の閉じるボタンで元に戻るっていうイメージです。
ちょこちょこ前のサンプルを修正していますが、
新たに作成したクラスは
- 子シーンの共通クラス MyChildScene.as(SceneObjectを継承)
- 子シーンの中の表示要素 MyChildPage.as(CastSpriteを継承)
これだけ。
Scene1~3の共通クラスMyScene.asのコンストラクタに、
Scene1のときだけさらに子シーンとボタンを追加するように記述。
- //コンストラクタ
- public function MyScene( name:String = null, initObject:Object = null ) {
- super( name, initObject );
- //ページを作成します。
- _page = new MyPage( { myPageNum:initObject.mySceneNum } );
- //scene1の子シーン・ボタンを作成
- if (initObject.mySceneNum == 1) {
- var myChildNum:int = 3;
- for (var i:int = 1; i <= myChildNum; i++) {
- //シーン
- var myChildScene:MyChildScene = new MyChildScene("child" + i, { myChildSceneNum:i } );
- addScene(myChildScene);
- //ボタン
- var btn:MyBtn = new MyBtn({myname:"child"+i,sceneNum:initObject.mySceneNum,childNum:i} );
- btn.x = 110 * i;
- btn.y = 250;
- _page.addChild(btn);
- }
- }
- }
これで追加OK。
次は子シーン(ポップアップさせたいページ)の表示をMyChildPage.asで定義。
- //コンストラクタ
- public function MyChildPage( initObject:Object = null ) {
- super( initObject );
- // 表示を作成する
- var myShape:Shape = new Shape();
- myShape.graphics.beginFill(0xFCFCFC);
- myShape.graphics.drawRect(0, 0, 400, 300);
- myShape.graphics.endFill();
- addChildAt(myShape,0);
- _txt = new TextField();
- _txt.mouseEnabled = false;
- _txt.textColor = 0x000000;
- _txt.text = "child" + initObject.myChildPageNum;
- this.x = 200;
- this.y = 100;
- this.alpha = 0;
- }
あと、MyBtn.asのコンストラクタのSceneId設定を修正
- // クリック時の移動先を設定する
- if (!initObject.sceneNum) {
- sceneId = new SceneId( "/index" );
- if (initObject.back) {
- sceneId = new SceneId( "/index/myScene1");
- }
- } else if (!initObject.childNum) {
- sceneId = new SceneId( "/index/" + "myScene" + initObject.sceneNum );
- } else {
- sceneId = new SceneId( "/index/" + "myScene" + initObject.sceneNum+"/child"+initObject.childNum);
- }
ちょっとこのへん効率悪い書き方な気するけど、initObjectの値で移動先を振り分けてるってかんじです。
そんなこんなで、できたのはこれです。
ちゃんとurlも変わってくれてます!
さらに遷移のモーションを変えようとしたところ、気づいた点がいくつか。
1.ナビゲーションが最前面にきていない
前のサンプルではIndex.asでボタンを作成していたけど、表示リストには追加されるものの、IndexSceneの背面にきてしまうので、
今回はindexScene.asのコンストラクタに以下を追記
- // ボタンを作成する
- var btnId:Array=["index","scene1","scene2","scene3"];
- for (var j:int = 0; j <= 3; j++) {
- var btn:MyBtn = new MyBtn({myname:btnId[j], sceneNum:j } );
- btn.x = 10;
- btn.y = 60 * j;
- trace(btn);
- progression.container.addChildAt(btn,100*j);
- }
progression.container.addChildAt(btn,100*i);
IndexSceneではほかの子シーンもaddSceneするので、かぶらないようにaddChildAtでいきなり表示リストの100番代においてやります(←このいきなり番号とばすのはprogressionだからこそできるみたい)。
2.addCommand内でthis.x=○○とかは無理
シーンの遷移方法を左から右にスーッって感じにしたかったんやけど、遷移する前に位置を戻したくて、
this.x=○○って書いてみたけど、「xというプロパティはありません」ってゆうかんじのエラー。
たぶんこれ、as3わかってたら当たり前なんやろうけど、
深いとこわかってないので、エラーなくなるまでとりあえずいろいろやってみた。
funcコマンドの中に書いてみたりとかも無理。
結局、DoTweenerはいけるから、それ使ってやってみよ!と思ったけど、
位置もどしたいだけやしに時間は指定いらんよなーって考えてて、じゃあどう記述したらいいのかわからんくて、
ちょっと悩み、結果「time:0」でもいけるんじゃ?と思って書いてみたところいけた!
こんな感じで。(MyPage.asの_onCastAdded)
- addCommand(
- //初期位置に戻す
- new DoTweener(this,{x:640,time:0}),
- //移動
- new DoTweener(this, { x:120, time:0.5, transition:"EaseOutExpo" } )
- );
たぶんもっといい方法があるんやろうけど、今回はとりあえずこれで。。。誰か教えてください(;´Д`)
う~んうまく文にできない(;^ω^)
今度は外部データの読み込みやってみるかな。
関連する投稿
- Newer: [今日の気になったサイト]QUBACLOCK
- Older: [progression勉強]シーン、ボタンを一気に量産してみる
Comments:2
- taka:nium 08-11-18 (火) 0:08
-
こんにちわー。
DoTweener コマンド実行前に初期位置に戻すのであれば、
addCommand() メソッドの手前で普通に実行してしまうのも手だと思います。
もしくは Prop コマンドを使用するか、Func コマンドを使いつつ this を使用しないというのもいけますね。// addCommand() の手前で初期位置に戻す
x = 640;addCommand(
//初期位置に戻す
new Prop( this, { x:640 } ),
function():void {
x = 640;
},
//移動
new DoTweener(this, { x:120, time:0.5, transition:”EaseOutExpo” } )
);こんな感じでいけると思います。
- kanariia 08-11-18 (火) 1:19
-
わーw
お忙しいのに回答ありがとうございます(ノ´∀`*)>DoTweener コマンド実行前に初期位置に戻すのであれば、
addCommand() メソッドの手前で普通に実行してしまうのも手だと思います。
あ、そんな方法が!!
今後これ使いますっ♪>もしくは Prop コマンドを使用するか、Func コマンドを使いつつ this を使用しないというのもいけますね。
thisを使用しなければ大丈夫だったんですね。。
それもやってみたらよかった(;><)
Trackbacks:3
- Trackback URL for this entry
- http://kanariia.com/blog/archives/71/trackback
- Listed below are links to weblogs that reference
- [progression勉強]階層のあるサイトを作ってみる from kanariia.com blog
- pingback from blog.progression.jp» ブログアーカイブ » [お知らせ] 今週の Progression 関連エントリー(2008/11/15 ~ 2008/11/21) 08-11-21 (金) 16:37
-
[...] kanariia.com blog / [progression勉強]階層のあるサイトを作ってみる [...]
- pingback from Progression 孫階層まで作成してみる。 « FlashとかActionScriptとか 08-12-28 (日) 23:56
-
[...] kanariiaさんの記事 [...]
- pingback from AS3:Progressionはじめてみました – mooco | webdesign 10-01-02 (土) 17:10
-
[...] →フルFlashサイトをProgressionで作り始める時にまず読むべき16の記事 →[progression勉強]階層のあるサイトを作ってみる →[AS]progression [...]