【AS3】FlashDevelop【フリー】 (601レス)
【AS3】FlashDevelop【フリー】 http://mevius.5ch.net/test/read.cgi/swf/1216151218/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
135: ひきプロ ◆HIRO2ZQ2Xo [sage] 2009/08/07(金) 20:34:16 ID:kF/vEctb >>132-133 ぼくもこないだマニュアル見てたら偶然見つけました。 でもあんまり有効な使い道って思い浮かばないですよねw >>134 ProgressEvent の1回目で取れるかもしれません。 たぶん HTTP の Content-Length パラメータを見てるのかなと。 でも Web サーバの種類とか、場合によっては Content-Length が入らない場合もありそうですね。 もう一歩先に確認する方法として、PHP とかで GET パラメータに 渡されたファイル名を確認してサイズを調べるというような 簡単なスクリプトを書いたりするのも良いかもしれません。 これだと Loader のほかに URLLoader も使わないといけないので若干面倒ですね。 http://mevius.5ch.net/test/read.cgi/swf/1216151218/135
136: Now_loading...774KB [sage] 2009/08/07(金) 20:45:05 ID:u2+EPbai >>134 出来そうで出来ない事の一つのような。 LoaderInfo.bytesTotal は読み込んだサイズだったと思うから、0なのは当たり前だった気がする。 HTTPヘッダでも読めれば行けるような気もするけど、Content-Lengthはイコールでファイルサイズじゃなかった気もする Socketで接続して実験してみるとか http://mevius.5ch.net/test/read.cgi/swf/1216151218/136
137: Now_loading...774KB [sage] 2009/08/08(土) 03:36:22 ID:Xf8YSrUw やっぱり多少トリッキーなことをしないと難しそうだね。 ちゃんと作るなら >>135 の通りサーバサイドのプログラムに頼るのが一番信頼できそう。 俺のはちゃんとしてないので、ひとまずロードが完了した画像数を出しておいた。 数が多すぎなければ画像の数だけプログレスバーを出してもいいかも。 ProgressEvent.PROGRESS の時点なら利用できることは確認したけど、 ここから合計プログレスバーを作ると読み込み中に分母が変わっていきそうで微妙かなと。 合計サイズが揃うまで読み込み待機とか器用なことができたらいいけど ASのイベントモデルをちゃんと理解してないので週末使って調べてみる。 でも close() しか見あたらないので難しそうな予感(他に使い道ないし) http://mevius.5ch.net/test/read.cgi/swf/1216151218/137
138: Now_loading...774KB [sage] 2009/08/08(土) 16:37:19 ID:e1CUMyK1 あいつ生きてたのか http://mevius.5ch.net/test/read.cgi/swf/1216151218/138
139: Now_loading...774KB [] 2009/08/09(日) 09:01:10 ID:VHnq37kK 質問させてください 以下のように、2つ以上のファイルを使ってオブジェクトを生成する場合、 実行画面に何も表示されません。階層などの問題なのでしょうか? Main.as package { import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { public function Main():void { var tokei:DigitalClock = new DigitalClock(); } } } 続く http://mevius.5ch.net/test/read.cgi/swf/1216151218/139
140: Now_loading...774KB [] 2009/08/09(日) 09:15:04 ID:VHnq37kK 続き DigitalClock.as package { import flash.display.*; import flash.events.*; import flash.text.*; import flash.utils.*; public class DigitalClock extends Sprite { private var clockTimer:Timer = new Timer(1000); private var clock:TextField = new TextField(); public function DigitalClock():void { clockTimer.addEventListener(TimerEvent.TIMER, clockShowTimer); clock.defaultTextFormat = new TextFormat("arial", 20, 0x000000); clock.autoSize = TextFieldAutoSize.LEFT; clock.selectable = false; clock.embedFonts = false; addChild(clock); //ここが問題だと思う clockTimer.start(); } private function clockShowTimer(event:TimerEvent):void { 省略 } } } http://mevius.5ch.net/test/read.cgi/swf/1216151218/140
141: 139 [] 2009/08/09(日) 09:26:53 ID:VHnq37kK ちなみに、「DigitalClock.as」の中身は、 「Main.as」の中に組み込めば普通に実行できたので 一部省略しました。 階層の問題でしょうか? http://mevius.5ch.net/test/read.cgi/swf/1216151218/141
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
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 447 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.006s