【AS3】FlashDevelop【フリー】 (601レス)
【AS3】FlashDevelop【フリー】 http://mevius.5ch.net/test/read.cgi/swf/1216151218/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
142: ひきプロ ◆HIRO2ZQ2Xo [sage] 2009/08/09(日) 09:58:19 ID:KDLSuSt/ >>137 ロードした画像数を表示するのが一番作りやすそうな形ですね。 ProgressEvent.PROGRESS でファイルサイズ取れましたかー。 途中でロード処理を一時停止することはきっとできないと思うので、 複数のファイルをロードする時は、ProgressEvent では 容量を割り出してから というわけにはいかなさそうですね。 なにかわかったら教えてくださいっ! 僕も興味あります。 >>139-141 たぶん、>>139 で書かれたコードを、 var tokei:DigitalClock = new DigitalClock(); addChild(tokei); と 1 行足すと画面に表示されると思います。 Main の画面に addChild しないと画面に出てこないんですよねw 僕も最初詰まりましたw http://mevius.5ch.net/test/read.cgi/swf/1216151218/142
143: 139 [] 2009/08/09(日) 11:15:01 ID:VHnq37kK >>142 できました! ありがとうございます!! 具体的には、 「addChild(tokei);」 をちょっと変更して、 「addChild(tokei.getClock());」 としたらできました。もちろんDigitalClock.as でゲッターを用意しました。 Mainに書き込まないといけないんですね、勉強になりました。 http://mevius.5ch.net/test/read.cgi/swf/1216151218/143
144: 139 [] 2009/08/10(月) 08:17:07 ID:B1VXl5B1 http://mevius.5ch.net/test/read.cgi/swf/1216151218/144
145: ひきプロ ◆HIRO2ZQ2Xo [sage] 2009/08/11(火) 20:43:06 ID:mz96ONGl >>143 DigitalClock は Sprite を継承しているので、 addChild(tokei.getClock()); とせずに、 addChild(tokei); というコードで時計の画像が扱える方がよりスマートな設計になると思います。 tokei.getClock() は、たぶん DigitalClock の内部にもう一つ画面表示要素を作って それを Main に渡す構造になっていると思うのですが、 その場合、 DigitalClock は Sprite を継承しない設計にすることができますね。 tokei を addChild 、 removeChild するだけで表示したり消したりできる方が コードが読みやすくなるし、間違いも起こりにくくなると僕は思います。 とここまで書いて、好みの問題な気もしてきましたw http://mevius.5ch.net/test/read.cgi/swf/1216151218/145
146: Now_loading...774KB [sage] 2009/08/14(金) 01:11:18 ID:w4LLHFJe もう解決したが、謎仕様にハメられた・・・ 例) [SWF (width=800, height=600, backgroundColor=0xffffff, frameRate=20)] public class Main extends Sprite public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { // ここで stage.stageWidth と stage.stageHeight // を取った時・・・ ローカルで直接swfを叩くと 設定値がちゃんと取れる // しかし WebServer上に上げて http://hogehoge/huga.swf のようにして実行するとなんと 0 が返る // 挙動が変わるとはこれいかに } } http://mevius.5ch.net/test/read.cgi/swf/1216151218/146
147: Now_loading...774KB [sage] 2009/08/14(金) 01:14:43 ID:w4LLHFJe >>146 の解決策 例) [SWF (width=800, height=600, backgroundColor=0xffffff, frameRate=20)] public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); addEventListener(Event.ENTER_FRAME, ent); } private function ent(e:Event = null):void { removeEventListener(Event.ENTER_FRAME, ent); // EnterFrameを一段カマせば、ブラウザ越しでもローカル実行でも取れる // ※サイズはその時のステージのサイズ } } http://mevius.5ch.net/test/read.cgi/swf/1216151218/147
148: Now_loading...774KB [sage] 2009/08/14(金) 01:17:51 ID:w4LLHFJe ちなみに、謎仕様と言うか動きから察するに、win32で言う所の、 WM_PAINT が実行されたタイミングでサイズ決定してるんだろうなぁという感想 stage.stageWidth と stage.width の違いも知らないと多分間違うし、結構罠が多い… 無駄に時間食ってしまった http://mevius.5ch.net/test/read.cgi/swf/1216151218/148
149: ひきプロ ◆HIRO2ZQ2Xo [sage] 2009/08/14(金) 14:25:46 ID:H3Ft1e6v Web ページに配置すると init イベントで stageWidth 取れないんですか。 なぜか 0 になってしまう時があるなーと思ってたんですよねw 詳しい内容載せていただいてありがとうございました。 勉強になります。 http://mevius.5ch.net/test/read.cgi/swf/1216151218/149
150: Now_loading...774KB [sage] 2009/08/14(金) 21:08:05 ID:w4LLHFJe あとこういう謎仕様と言うか、Flashの中の動きを想像して予想しないと 一見何でも無いような事すら書けないってのはちょっと苦痛な気もする・・・ 理由わかる? 例1) var w:int = 200; var h:int = 50; var sp:Sprite = addChild(new Sprite()) as Sprite; sp.graphics.beginGradientFill(GradientType.LINEAR, [0xffffff, 0x000000], [1.0, 1.0], [200, 255]); sp.graphics.drawRoundRect(0, 0, w, h, 8, 8); sp.graphics.endFill(); 例2) 〜例1と同じ前略〜 var sp:Sprite = addChild(new Sprite()) as Sprite; sp.width = w; sp.height = h; 〜例1と同じ後略〜 空の Sprite の width/height を設定するかしないかで描画の内容が変わるって一体・・・ http://mevius.5ch.net/test/read.cgi/swf/1216151218/150
151: Now_loading...774KB [sage] 2009/08/14(金) 21:15:46 ID:w4LLHFJe あ、ちなみに誤解の無いように言っておくと、不満色々書いてても 俺根本的にFlash好きだからなww ブツブツ文句言いながら追いかけて楽しんでる http://mevius.5ch.net/test/read.cgi/swf/1216151218/151
152: ひきプロ ◆HIRO2ZQ2Xo [sage] 2009/08/14(金) 23:21:08 ID:H3Ft1e6v >>150 この問題はなんで起こるんでしょうねw ぼくも疑問に思っていました。 width・height への値の代入は、 「描き始める前に領域を確保する」 という効果が出ないようですね。 これは直感と反する動作なので謎の仕様に見えてしまいます。 試しに、図形を描き終わった後から width・height を再設定してみると、 scaleX, scaleY に値を代入したかのように拡大縮小されますね。 「後からサイズを変える」 という効果はあるようです。 trace(sp.scaleX); を表示してみると、再設定されていることが確認できました。 ということは、最初に width・height に値を代入すると、 scaleX、scaleY が 0 に設定されてしまうことになり、 その後の描画内容が画面に出ないという動作になってしまいます。 以上のことから想像すると、width・height のセッターの動作が、 function set width(value:Number):void { this.scaleX = this.width / value; } というようになっているのではないかなと。 width の初期値は 0 なので、何か値を掛けたとしても 0 になってしまいます。 http://mevius.5ch.net/test/read.cgi/swf/1216151218/152
153: ひきプロ ◆HIRO2ZQ2Xo [sage] 2009/08/14(金) 23:24:27 ID:H3Ft1e6v 最後の行の書き方がおかしかったですね。 0 / value; というような式だと、結果は常に 0 になるので、 最初に width・height を設定すると、その段階で scaleX、scaleY が 0 になってしまうと考えられます。 http://mevius.5ch.net/test/read.cgi/swf/1216151218/153
154: Now_loading...774KB [sage] 2009/08/15(土) 14:53:11 ID:srGxDtlq >>152-153 ああなるほど。確かにそうかも。・・ってか、こういう風に利用者側が動きを想像しないと 動作の正解が見えないってのはどうなんだろうな・・ww 困るわ、モヤモヤがいつまでも晴れなくて。 色々と http://mevius.5ch.net/test/read.cgi/swf/1216151218/154
155: Now_loading...774KB [sage] 2009/08/15(土) 15:04:29 ID:srGxDtlq あと、スレが過疎なので話のネタと一つの心配事を書いとく。 ネタ: ただし誰でも知ってるような話) 良くあるAS他の説明で、「これはオブジェクト指向(以下OOと略)言語です」 って説明があるが、実はOOにも複数の流派/思想がある。 例えばダックタイピングなOO、つまり 「それがアヒルのように歩きアヒルのように鳴くなら、それはアヒルである」 って考え方。 これは例えば、C/C++ 言語で関数ポインタを使ったコールバックを想像するとわかりやすくて、つまり、 「使おうと思った時にそれが想像通りのインタフェース/インプリメンテーションになっていれば、それと見なす」 と言う物。 AS3の例) class A { var onLoad:Function = null; function load(): void { if(onLoad != null) onLoad("終了"); } } // var a:A = new A(); a.onLoad=function(s:String):void { trace(s); }; // "終了とトレースされる これは関数テンプレートに従ってそれと見なしているので実行可能となるが、例えば a.onLoad = function(i:int):void ... のように記述すると コンパイルは通るが実行時に 「型が違う」 的なエラーになる。 こういう動きを、型推論とか、ダックタイプとか、C/C++のテンプレートに倣って テンプレート指向OOとか言う 対して JavaやC#、C++のクラス機構のような 「アヒルのように歩きアヒルのように鳴いてもアヒルでないなら、それはアヒルでは無い」 という 型厳密なOOを、クラス指向OOとか言う。(続く) http://mevius.5ch.net/test/read.cgi/swf/1216151218/155
156: Now_loading...774KB [sage] 2009/08/15(土) 15:11:52 ID:srGxDtlq ネタ続き) で、この当たり前の話がここからどうなるかと言うと、要はAS3って型推論と型厳密が両方使える言語なんだよなって事。 …って、ここで心配事書くはずだったが、ちょっと確認してからにしたいのでやっぱり止めた http://mevius.5ch.net/test/read.cgi/swf/1216151218/156
157: Now_loading...774KB [sage] 2009/08/15(土) 18:27:24 ID:srGxDtlq AS3メモ: ・URLLoader と Loader は継承関係に無い赤の他人。Loader はさり気なく DisplayObject の派生 ・Video インスタンスにattachした NetStream を取り出す方法が無い。 ※setがあるのにgetが無い的なイメージ。 それは触ってはいけないからじゃ?とも思ったが、コントロールはNetStream側で行う謎設計 ※この辺のストリームやI/Oのイメージは、初めから整理されているJava他の言語のイメージは捨てて、全部疑ってかかった方がいい ・if(a < b && c , 1) { ほげほげ } のような構文でコンパイルエラーにならない @FlashDevelop 3.0.1 RTM + Flex3 しかし実行すると Decompressされたソースが山のように吐かれて死亡する。しかもエラーメッセージは [Fault] exception, information=VerifyError: Error #1068: Boolean と int は共有できません。 になる。原因がわかればわかる話だが、いきなり実行時にこのエラーメッセージ見ても原因が想像出来なかった。まさか typo とは http://mevius.5ch.net/test/read.cgi/swf/1216151218/157
158: ひきプロ ◆HIRO2ZQ2Xo [sage] 2009/08/16(日) 03:14:49 ID:AKWy+LpT ちょ〜濃いネタですねw かなり調べないと付いていけないです。 OO のお話ですが、ActionScript は過去のやり方を引き継いでる部分とか JavaScript のベースになっている仕様を取り入れるとかで、 おっしゃる通り、色んな考え方が錯綜してるように見えますね。 var obj:Object = new Object(); obj.prototype.func = function ():void { return; }; というような、プロトタイプを使った機能の拡張もできるらしいですね。 実際に使ったことはないですが。 http://mevius.5ch.net/test/read.cgi/swf/1216151218/158
159: ひきプロ ◆HIRO2ZQ2Xo [sage] 2009/08/16(日) 03:25:19 ID:AKWy+LpT 今挙げていただいた話題とは直接の関係はないですが、 ・Flash Playerの作り方 http://www.slideshare.net/yukoba/flash-player ここに書かれている内容によると、 Flash Player の動きって、明文化されてない部分がかなりあるようで、 「バグとか誤動作も含めてそういう仕様」 みたいな状態になってるようですね。 ドキュメントが後から作られてるような感じかもしれませんw 謎の動きをする箇所は、Flash の文化圏はそういうものだと割り切って、 厳密に仕様が存在する環境とは分けて考えた方が 精神衛生上よろしいのではないかと個人的には思いますw http://mevius.5ch.net/test/read.cgi/swf/1216151218/159
160: Now_loading...774KB [sage] 2009/08/16(日) 12:40:30 ID:BH5EXFvM あぁ、書こうと思ってた心配事がとりあえず的中。 原因はつまり、>>158 氏の話の通りだ。 多分過去の仕様を引き継いで 強引に形を変えつつ、増築を繰り返してる&API仕様の整理が出来て無いのか、ライブラリがバラバラ。 具体的にどういう事があったかメモしとくとこんな感じ。 丁度 >>159 の話ともリンクするけど、 俺がやろうとしてた事は、かいつまんで言えば画像、音、動画(FLV)を、特に分け隔てもせずに動的にロードしつつ、再生するものだった。 実際には他にも色々行っているけど、その中の一部として、これをやりたかった。 そしてハマった。 結果、結局さんざん調べてどうやら出来ないとの結論に達して、別の観点で自分で整理して、継承したクラスいくつか作って 再管理する形にしたけど、この 「どうやら出来ない」 って結論に辿り着いた理由ってのが、まさにこのバラバラな作りのせい。 何かの役に立つかもしれないので、念のためまたメモしとく(続く) http://mevius.5ch.net/test/read.cgi/swf/1216151218/160
161: Now_loading...774KB [sage] 2009/08/16(日) 13:08:53 ID:BH5EXFvM (続き 1/2) 差し当たり、自サバのCGI(Perl/PHP)にパラメタをPOSTして、そのレスポンスとして flv ファイルを取得し、それを表示したかった。 画像と音はさくっと完成。 しかし flv でハマる。 結果、GETで投げれば普通に出来たんだが、POSTじゃないと困る部分があったので、そうしたかった。 しかし出来なかった。 その理由を具体的に以下に記す。 原因は上でも書いた通りクラスが一部独自仕様になっており、絶妙にバラバラに作られてたせい。 まず前提として、 flash.net.URLStream と flash.net.NetStream がまったく別物。 一見似てるけど全然別物。 どういう事かと言うと、 継承関係がまず Object ← EventDispatcher ← ほげほげStream となっていて、Stream 抽象クラスのような物は無いし、インタフェースインプリメントの状態もまったく別。 と言うか、 NetStream は IDataInput インタフェースを実装していない。 かと言って、上で書いたダックタイプな手法でごまかそうにも、メソッドのシグネチャが違うので無理。 つまり、この2つは相互に入れ替えが出来ない。 やろうとした事から考えると、NetStream がもしもインタフェースインプリしてたら、自前クラスで機能補完できたんだけど、 それも出来ず、かといって AS3 は多重継承も出来ないので、結果、出来ない。 http://mevius.5ch.net/test/read.cgi/swf/1216151218/161
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 440 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.007s