【AS3】FlashDevelop【フリー】 (601レス)
1-

130
(1): 2009/08/04(火)12:16 ID:d57xYwwQ(1) AAS
>> 129
ありがとう!
参考にします。

ところで、オリゼの画像とか勝手に使って大丈夫なの?
131: ひきプロ ◆HIRO2ZQ2Xo 2009/08/04(火)13:41 ID:NE4Ij/QG(2/2) AAS
>>130
もやしもんの画像は著作権的にまずそうですよねw
ゆくゆく問題になりそうなものは入れ替えようと思います。
132
(2): 2009/08/06(木)00:52 ID:BIlthKR7(1) AAS
条件付コンパイルかぁ・・・何かに使えそうだ
でも、何に使えるのかな
133
(1): 2009/08/06(木)01:17 ID:FbtIO6V/(1) AAS
>>129 条件付コンパイルとか出来たのか・・・ 知らなかった。

>>132 他言語でよくあるのは、例えば例にも出てるデバッグモード時の動作とか。
主にログ出力や、トレース
134
(2): 2009/08/07(金)17:08 ID:vF9qZ0RK(1) AAS
スレチかもしれないけど、FD + Flex SDK だけで作ってるのでとりあえずここに。

AS3 Project with Preloader を使ったプロジェクトの Preloader 内で
複数の外部画像をそれぞれ Loader に読ませて
Main で利用したいと思ってるんだけど、プログレスバーの分母に
外部画像のサイズ合計を使うにはどうしたらいいのかな。
Loader.load(req) する前に調べられるとベスト。

せめて Event.OPEN 時に画像サイズがわかればいいんだけど、
OPEN ハンドラ内で Event.target の LoaderInfo.bytesTotal 見ても 0 になってるし・・・
135
(1): ひきプロ ◆HIRO2ZQ2Xo 2009/08/07(金)20:34 ID:kF/vEctb(1) AAS
>>132-133
ぼくもこないだマニュアル見てたら偶然見つけました。
でもあんまり有効な使い道って思い浮かばないですよねw
>>134
ProgressEvent の1回目で取れるかもしれません。
たぶん HTTP の Content-Length パラメータを見てるのかなと。
でも Web サーバの種類とか、場合によっては Content-Length が入らない場合もありそうですね。
もう一歩先に確認する方法として、PHP とかで GET パラメータに
渡されたファイル名を確認してサイズを調べるというような
簡単なスクリプトを書いたりするのも良いかもしれません。
これだと Loader のほかに URLLoader も使わないといけないので若干面倒ですね。
136: 2009/08/07(金)20:45 ID:u2+EPbai(1) AAS
>>134 出来そうで出来ない事の一つのような。
LoaderInfo.bytesTotal は読み込んだサイズだったと思うから、0なのは当たり前だった気がする。
HTTPヘッダでも読めれば行けるような気もするけど、Content-Lengthはイコールでファイルサイズじゃなかった気もする
Socketで接続して実験してみるとか
137
(1): 2009/08/08(土)03:36 ID:Xf8YSrUw(1) AAS
やっぱり多少トリッキーなことをしないと難しそうだね。
ちゃんと作るなら >>135 の通りサーバサイドのプログラムに頼るのが一番信頼できそう。
俺のはちゃんとしてないので、ひとまずロードが完了した画像数を出しておいた。
数が多すぎなければ画像の数だけプログレスバーを出してもいいかも。

ProgressEvent.PROGRESS の時点なら利用できることは確認したけど、
ここから合計プログレスバーを作ると読み込み中に分母が変わっていきそうで微妙かなと。
合計サイズが揃うまで読み込み待機とか器用なことができたらいいけど
ASのイベントモデルをちゃんと理解してないので週末使って調べてみる。
でも close() しか見あたらないので難しそうな予感(他に使い道ないし)
138: 2009/08/08(土)16:37 ID:e1CUMyK1(1) AAS
あいつ生きてたのか
139
(4): 2009/08/09(日)09:01 ID:VHnq37kK(1/4) AAS
質問させてください
以下のように、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();
  }
 }
}

続く
140
(1): 2009/08/09(日)09:15 ID:VHnq37kK(2/4) AA×

141
(1): 139 2009/08/09(日)09:26 ID:VHnq37kK(3/4) AAS
ちなみに、「DigitalClock.as」の中身は、
「Main.as」の中に組み込めば普通に実行できたので
一部省略しました。
階層の問題でしょうか?
142
(1): ひきプロ ◆HIRO2ZQ2Xo 2009/08/09(日)09:58 ID:KDLSuSt/(1) AAS
>>137
ロードした画像数を表示するのが一番作りやすそうな形ですね。
ProgressEvent.PROGRESS でファイルサイズ取れましたかー。
途中でロード処理を一時停止することはきっとできないと思うので、
複数のファイルをロードする時は、ProgressEvent では
容量を割り出してから というわけにはいかなさそうですね。
なにかわかったら教えてくださいっ!
僕も興味あります。
>>139-141
たぶん、>>139 で書かれたコードを、

var tokei:DigitalClock = new DigitalClock();
addChild(tokei);

と 1 行足すと画面に表示されると思います。
Main の画面に addChild しないと画面に出てこないんですよねw
僕も最初詰まりましたw
143
(1): 139 2009/08/09(日)11:15 ID:VHnq37kK(4/4) AAS
>>142
できました!
ありがとうございます!!

具体的には、
「addChild(tokei);」
をちょっと変更して、
「addChild(tokei.getClock());」
としたらできました。もちろんDigitalClock.as でゲッターを用意しました。

Mainに書き込まないといけないんですね、勉強になりました。
144: 139 2009/08/10(月)08:17 ID:B1VXl5B1(1) AAS

145: ひきプロ ◆HIRO2ZQ2Xo 2009/08/11(火)20:43 ID:mz96ONGl(1) AAS
>>143
DigitalClock は Sprite を継承しているので、
addChild(tokei.getClock());
とせずに、
addChild(tokei);
というコードで時計の画像が扱える方がよりスマートな設計になると思います。
tokei.getClock() は、たぶん DigitalClock の内部にもう一つ画面表示要素を作って
それを Main に渡す構造になっていると思うのですが、
その場合、 DigitalClock は Sprite を継承しない設計にすることができますね。
tokei を addChild 、 removeChild するだけで表示したり消したりできる方が
コードが読みやすくなるし、間違いも起こりにくくなると僕は思います。
とここまで書いて、好みの問題な気もしてきましたw
146
(1): 2009/08/14(金)01:11 ID:w4LLHFJe(1/5) AAS
もう解決したが、謎仕様にハメられた・・・

例)
[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上に上げて 外部リンク[swf]:hogehoge のようにして実行するとなんと 0 が返る
  // 挙動が変わるとはこれいかに
 }
}
147: 2009/08/14(金)01:14 ID:w4LLHFJe(2/5) AAS
>>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を一段カマせば、ブラウザ越しでもローカル実行でも取れる
  // ※サイズはその時のステージのサイズ
 }
}
148: 2009/08/14(金)01:17 ID:w4LLHFJe(3/5) AAS
ちなみに、謎仕様と言うか動きから察するに、win32で言う所の、
WM_PAINT が実行されたタイミングでサイズ決定してるんだろうなぁという感想

stage.stageWidth と stage.width の違いも知らないと多分間違うし、結構罠が多い…
無駄に時間食ってしまった
149: ひきプロ ◆HIRO2ZQ2Xo 2009/08/14(金)14:25 ID:H3Ft1e6v(1/3) AAS
Web ページに配置すると init イベントで stageWidth 取れないんですか。
なぜか 0 になってしまう時があるなーと思ってたんですよねw
詳しい内容載せていただいてありがとうございました。
勉強になります。
150
(1): 2009/08/14(金)21:08 ID:w4LLHFJe(4/5) AAS
あとこういう謎仕様と言うか、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 を設定するかしないかで描画の内容が変わるって一体・・・
151: 2009/08/14(金)21:15 ID:w4LLHFJe(5/5) AAS
あ、ちなみに誤解の無いように言っておくと、不満色々書いてても
俺根本的にFlash好きだからなww ブツブツ文句言いながら追いかけて楽しんでる
152
(1): ひきプロ ◆HIRO2ZQ2Xo 2009/08/14(金)23:21 ID:H3Ft1e6v(2/3) AAS
>>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 になってしまいます。
153
(1): ひきプロ ◆HIRO2ZQ2Xo 2009/08/14(金)23:24 ID:H3Ft1e6v(3/3) AAS
最後の行の書き方がおかしかったですね。
0 / value;
というような式だと、結果は常に 0 になるので、
最初に width・height を設定すると、その段階で
scaleX、scaleY が 0 になってしまうと考えられます。
154: 2009/08/15(土)14:53 ID:srGxDtlq(1/4) AAS
>>152-153 ああなるほど。確かにそうかも。・・ってか、こういう風に利用者側が動きを想像しないと
動作の正解が見えないってのはどうなんだろうな・・ww 困るわ、モヤモヤがいつまでも晴れなくて。 色々と
155: 2009/08/15(土)15:04 ID:srGxDtlq(2/4) AA×

156: 2009/08/15(土)15:11 ID:srGxDtlq(3/4) AAS
ネタ続き)
で、この当たり前の話がここからどうなるかと言うと、要はAS3って型推論と型厳密が両方使える言語なんだよなって事。

…って、ここで心配事書くはずだったが、ちょっと確認してからにしたいのでやっぱり止めた
157: 2009/08/15(土)18:27 ID:srGxDtlq(4/4) AAS
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 とは
158
(1): ひきプロ ◆HIRO2ZQ2Xo 2009/08/16(日)03:14 ID:AKWy+LpT(1/2) AAS
ちょ〜濃いネタですねw
かなり調べないと付いていけないです。
OO のお話ですが、ActionScript は過去のやり方を引き継いでる部分とか
JavaScript のベースになっている仕様を取り入れるとかで、
おっしゃる通り、色んな考え方が錯綜してるように見えますね。

var obj:Object = new Object();
obj.prototype.func = function ():void { return; };

というような、プロトタイプを使った機能の拡張もできるらしいですね。
実際に使ったことはないですが。
159
(2): ひきプロ ◆HIRO2ZQ2Xo 2009/08/16(日)03:25 ID:AKWy+LpT(2/2) AAS
今挙げていただいた話題とは直接の関係はないですが、

・Flash Playerの作り方
外部リンク:www.slideshare.net

ここに書かれている内容によると、
Flash Player の動きって、明文化されてない部分がかなりあるようで、
「バグとか誤動作も含めてそういう仕様」 みたいな状態になってるようですね。
ドキュメントが後から作られてるような感じかもしれませんw
謎の動きをする箇所は、Flash の文化圏はそういうものだと割り切って、
厳密に仕様が存在する環境とは分けて考えた方が
精神衛生上よろしいのではないかと個人的には思いますw
1-
あと 442 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.062s