ActionScript 誰かが物凄い勢いで解答するスレ 18 >>948 catchで補足できない型のエラーが発行されたとき戻り値は無いか不定になるから
エラーにしてるんじゃねーのかな
javaとASは違うしw
>>948 ていうか finally で return 1 返せよ。なぜ try で返す?
>>951 タグはbgcolorだけ弄った?それともSWFobjectで生成されるタグ全部弄った?
前者でもダメなら・・・お勧めは出来ないが、wmodeでtransparentを使うしかないんじゃない
Flash側で「色変更のイベント」を認識しないといけない以上、ASを弄れないというのがネック
var tArray:Array = new Array("z","y","x"); var t:Test5 = new Test5(this); t.tstart(); ------------------- class Test5 { var thismc:MovieClip; function Test5(mc:MovieClip) { thismc = mc; } function tstart() { for(var i = 0; i< thismc.tArray.length; i++) { thismc.textbox_mc["t" + (i + 1) + "_txt"].text = thismc.tArray[i]; } } } タイムラインにあるムービークリップや配列なんかをクラスで扱う時に、コンストラクタにタイムラインのthisのみを送って それをパスの起点にして対象を指定する形で大抵の処理をしていたのですが、 処理速度等を考えるなら、基本的に、 var t:Test5 = new Test5tArray, textbox_mc); のようにクラスの処理対象は全てコンストラクタの引数に送って処理する方が良いのでしょうか? AS2.0です。
CS3にて 配列に格納したSoundオブジェクトをインデックス指定で再生する処理があります 再生終了時のイベントにそのインデックスを使いたいのですが var Sound1:Sound = SoundList[ Index ]; var SoundChannel1:SoundChannel = Sound1.play(); SoundChannel1.addEventListener( Event.SOUND_COMPLETE, SoundComplete ); この「SoundComplete」関数のどこに引数「Index」を指定すれば良いのでしょうか? function SoundComplete( event:Event ){ // ここに再生終了時のイベント }
>>954 オブジェクトは参照されるだけだからそんな変わらんと思うけど。
でもクラスとしてはダメじゃね。汎用性に欠ける&Arrayやコントロールの存在が不確か
>>955 単にIndexの数値が欲しいだけなら、Soundオブジェクト生成と同時にどっかに保持すりゃいい。
Indexを使ってSoundオブジェクトを参照したいならevent.targetすりゃいい。
>>953 もちろん、try内部はreturn 1ではなくて、実際はエラーの発生する可能性のあるメソッドを使用しています。
こういう仕様だと思って、catchの外にエラー発生時の処理を書くようにします。
>>956 返信遅くてすいません。
>>955 の書き方だと参照を取得している処理になっちゃっていますね
実際の処理は下記のようになっています。
function PlaySound( Index:uint )
{
var Sound1:Sound = new SoundList[ Index ]();
var SoundChannel1:SoundChannel = Sound1.play();
SoundChannel1.addEventListener( Event.SOUND_COMPLETE, SoundComplete );
}
ここに「鳴ってる最中は再生しない」として別途
if( NowPlaying[ Index ] == true ){
return;
}
という処理を加えようとしたら
再生が終了した時「falseを入れる」のにIndexが無い・・・
となってしまい「SoundComplete」で
終了したのはどの配列の中ではどのデータか分からない事に
クラスのメンバー変数に残しておくと終わる前に別のものが再生されると上書きされてしまいます。
アイディアが貧困で上手く回避する方法が思いつきません。
もう少し詳しく教えていただけないでしょうか
>>956 返信ありがとうございました。
やっぱり構造上は
var t:Test5 = new Test5(tArray, textbox_mc);
のように、処理に必要な要素をちゃんと渡した方がいいですね、ありがとうございました。
NowPlaying[ Index ]の辺りがよく理解できないけど、 いっちゃん単純な考え方で、 var NowPlaying:boolean = false; function PlaySound( Index:uint ){ ( NowPlaying ) ? return : 0; var Sound1:Sound = new SoundList[ Index ](); var SoundChannel1:SoundChannel = Sound1.play(); SoundChannel1.addEventListener( Event.SOUND_COMPLETE, SoundComplete ); NowPlaying=true; } function SoundComplete( event:Event ){ ( NowPlaying ) ? NowPlaying=false : 0; } って感じじゃだめなん
>>957 returnはfinallyかtryの外にないとJavaでもコンパイル通らないよ
理由はコンパイラも教えてくれている通り、値を返さない可能性があるから
返り値の値を調整したいときはtryの外に変数置いてfinallyで返す形で
>>960 Indexには今のファイルだと添え字0〜5に当たるサウンドが随時再生されます。
なのでそれぞれが再生中なのかのフラグを
NowPlaying配列にBooleanで持たせようとしています。
再生時の処理としてNowPlaing[ Index ] = true;で再生フラグを立てておいて
再生フラグが立っている時は再生処理をしないように。
再生終了時にNowPlaying[ Index ] = falseと実行したいのですがその時のIndex値を
なんとか関数の引数から持って来れないかと質問した次第です。
暫定処理として更に関数SoundComplete0〜5を定義してFuncList配列に登録
イベント関数の引数として登録してそれぞれの関数でNowPlaying[ X ] = falseと実行する事にしました。
SoundComplete( event:Event, Index:uint ){}という使い方ができるのかと思ったのですが
そんな使い方はできないのですね。
回答ありがとうございました。
じゃーこれでどうだ var NowPlaying:Array = new Array(5) {false,false,false,false,false}; function PlaySound( Index:uint ){ ( NowPlaying[ Index ] ) ? return : false; var Sound1:Sound = new SoundList[ Index ](); var SoundChannel1:SoundChannel = Sound1.play(); Sound1.index = Index; NowPlaying[ Index ] = true; SoundChannel1.addEventListener( Event.SOUND_COMPLETE, SoundComplete ); } function SoundComplete( event:Event ){ NowPlaying[ event.target.index ] = false; }
964 :
Now_loading...774KB :2008/03/09(日) 12:04:39 ID:+oCOU/He
>>953 再起されるのは後者ですが、前者は反応ありませんでした。
flashのオブジェクトidに.wmode="transparent"しても反応ありませんでした。
どうしようもないので、そもそものSWFobjectで生成する段階から仕様変更
してもらいます。
ありがとうございました。
>>963 ちょっと分からないのですが
サウンドチャンネルクラスを継承したクラスを作成して
indexをメンバー変数に追加するということでしょうか。
(違ってたら申し訳ないです)
しかしその発想はありませんでした。ちょっと試行してみようと思います。
ありがとうございます。
ActionScript3.0です。 UILoaderに外部swfを読み込む機能って重複して使えますか? ・1.swfのボタンAを押すとUILoader(fieldAとする)に2.swfを読み込む。 ・2.swfのボタンBを押すとUILoader(fieldBとする)に3.swfを読み込む。 ・3.swfのボタンCを押すと・・・ どうしても、2回目(3.swf)を読み込む段階で失敗します。 htmlでいうと、メニューとメイン画面をフレーム分けして メイン画面を更にサブメニューとメイン画面でフレーム分けするのを FLASHだけで作りたいのですが、無理でしょうか?
入れ子にする必要あるのか? メインでLoaderでそれぞれ読み込んで配置するんでいんじゃね
AS3ですが 多次元配列を宣言する時に、PHPのように $arr = Array( "key"=>"val", "key2"=>"val2", "key3"=>"val3", "key4"=>"val4", … "key10"=>"val10" ); //$arr[key4] == val4 みたいな宣言って出来ませんか?
>>968 多次元配列じゃなくて連想配列(ハッシュ)かな?
var obj:Object = {
"key1":"val1",
"key2":"val2",
"key3":"val3"
};
trace(obj.key1) //val1
trace(obj["key2"]) //val2
外部ファイルの読込みについて教えてください。 actionscriptで、 JPG画像を読み込みように、PDFファイルを読み込むことは可能でしょうか? actionscript3.0です。 flash cs3 です。
>>971 バイナリファイルとしては読み込めるけど、PDFとして表示はできないんじゃね?
PDF読み込んで何したいのさ
>>973 どこにそれがPDFなんて書いてあるんだ?
つーかどうみてもgif画像な訳だが。
>>947 あなたのおかげでなぞがすべてとけました。
>>972 Flashで使ってるのはただのデカい画像じゃね?
PDFも画像データだけみたいだし
そういや、FlashPaperってどこいったんだろうな
AS2.0で、タイムラインのトゥイーンはほぼ使わずスクリプトで制御し制作しています flash8のムービープレビューで見ると動きはスムーズなのに、パブリッシュされたswfを自分が用意したhtmlに貼り付けて表示すると 軒並み動きはカクカクした状態になってしまってます、パブリッシュ時にswfと一緒に作られたhtmlで表示しても同じです それぞれのswfの容量は数十kb程度です、画像等はスクリプトで外部ファイルを読み込んでいます この動作の原因は、やはりスクリプト処理が重いからこうなってしまうのでしょうか?、そして、重さを軽減する用にメモリの使用状況?等を調べる方法はありますか?
>>978 WinIEならwindow modeのバグってこともあるが、どうよ?
<param name="wmode" >のvalueがどうなってるかチェック。
それと、Flashの動作が遅くなる要因の大部分は描画処理であって
スクリプトはあんまり関係ないことが多い。
アルファ、グラデーション、トゥイーン等の多用や複雑なベクター画像の表示は
高負荷なので、多用しすぎに注意。
>>979 レスどうもです
表示をIE7とfirefoxでやっていますが、用意したhtmlにはwmodeの指定はありませんでした
指摘された中ではスクリプトのトゥイーン(tweenクラス等使用じゃなく、enterframeで値をずっと足していき、一定になったらdeleteする手動タイプ)
そしてアルファの増減は演出として頻繁に行っています、この辺をもっと考えてみた方がいいのかもしれませんね
あと似たような事ですが、ムービープレビューでは動くのにダウンロードシュミレートでは途中で処理が止まったり
IEではボタンのロールオーバーが問題無く起こるのに、firefoxではボタンにマウスを置いても全く無反応だったり・・・
こういった挙動の違いが、特に外部jpg・swf読み込む処理関係で結構起こるのですが、これもよくある事なのでしょうか?
htmlと違ってflashは、ブラウザごとの挙動の違いは殆ど無い物なんだと思い込んでいたのですが・・・
>>980 ブラウザ毎の挙動の違いはある。
例えば先のwmodeはIEだとopaqueにした方がいいぜとか
よく言われるけど、それだとFireFoxだとテキストボックスで
日本語が入力できなくなったりする。
スクリプトの記述方法がセオリーからちょっとでも外れると
挙動不審になったりとかあるから、この辺は試行錯誤というか
ノウハウなところだね。
とりあえずCS3のFlashのダウンロードシミュレートはマジウンコ。 ダウンロードシミュレートを最初からON状態にできないから 通常プレビュー → ダウンロードシミュレートという流れになるけど このダウンロードシミュレートの時、よく分からんが 前の通常プレビュー時に作られたインスタンスか何かが残るらしくて、 自前でやってたトグルボタン処理でボタンを押したら イベント受け取るインスタンスが2つあるらしくて 1フレーム中にON→OFF→ONと状態遷移しやがった。 本編をローダー介してやっても確かダメだった記憶が。 この不具合、話題にも上らないからほとんど使われてないんだろうけど、 どうにかならんものか。
>>980 ダウンロードシミュレートとかプレビューは
あくまでも仮の動きであって参考程度と割り切ったほうがいいと思う。
外部読み込みをしてるなら確実に読み込み完了を待ってるかな?
ちゃんとやっているならすまんが、読み込み完了を待たずにアクションを実行させると
意図しない挙動になるよ。
ブラウザによって読み込み速度等が違うので、うまくいくブラウザも
あったりするが、本来それは「たまたまうまくいっている」だけ。
>>981-982 ソフトやブラウザでの挙動の違いって結構あるもんなんですね・・・
書き方のセオリー取得には海外の著名な人が出している書籍などでしょうか
自分の場合は、エラーが出たらクラス名をネット検索して、とにかく動いたら良しといった流れでやってきていたので
セオリーなスクリプト表記という面を考えるととても自信が無いです
度々質問ですみませんが、"MovieClipLoaderでswfを読み込んで、読み込み終わった後に読み込んだswf側のトゥイーンを開始する”
といった場合どう処理してますか?
自分の場合は
onLoadCompleteの箇所の処理で
loader_mc.playStart();
loader_mc ←読み込んだswfを表示させるムービークリップ
playStart(); ←読み込んだswf先に書いてあるトゥイーンさせる関数
読み込んだswf先にトゥイーン処理を開始する関数を用意して、読み込みが終わったらその関数を実行
・・・この方法も、試しにスクリプト書いて見たら動いたというだけで、それ以降ずっとこの方法でやってきていましたが
985 :
Now_loading...774KB :2008/03/11(火) 23:59:01 ID:PZNmzB+P
onLoadCompleteの箇所の処理で loader_mc.play(); じゃだめだったっけ?
>>982 >イベント受け取るインスタンスが2つあるらしくて
ホントに?自分で作ったバグじゃなくて?
988 :
Now_loading...774KB :2008/03/12(水) 02:34:36 ID:AgPAuDeT
環境)OS:WinXP-Pro,Mem=1GB,ソフト:Flash8-Pro(Player7,AS2.0) 線の削除で質問です。 複数の点(MC1,MC2,・・・)を連結する複数の線の内、1つを削除する方法 にはどのようなものがあるのでしょうか? 例えば、 ●−●−●−●−● を ●−● ●−●−● のようにしたく思っています。
複数の線なら、簡単だろ・・・。普通に消せばいいじゃん。 それが一つの線ならばちょっとした工夫は必要かもしれないけど。
>>989 ,990
どうも。
線は、for文でmoveTo(), lineTo() を繰り返し使って、MC1→MC2 MC2→MC3 ・・・
と描いています。
clear()を使うと全部消えてしまうので、ピンポイントで消したく思っています。
994 :
Now_loading...774KB :2008/03/13(木) 11:56:44 ID:8EMAQP/g
Flash8 AS2.0 this.attachMovie("MC", "MC", this.getNextHighestDepth()); // var someListener:Object = new Object(); someListener.onMouseUp = function() { MC.removeMovieClip(); trace(this); trace(_parent); trace(this._parent); this.attachMovie("MC2", "MC2", this.getNextHighestDepth()); }; Mouse.addListener(someListener); MC2をMCと同じ階層に置きたいのですがこういった場合、 どのようにパスを指定すればいいのでしょうか。 外部SWFで読み込まれる側なのでなるべく絶対パスは使いたくないんですけど、 読み込む側のSWFとあわせて絶対パスで指定するしかないんでしょうか。
同じ階層ってのがわからん。同じコンテナってことか? 当然深度があるから同じ深度は無理だよね。
>>994 普通に
attachMovie("MC2", "MC2", getNextHighestDepth());
でいいんじゃね?
this使いたいんなら
var someListener:Object = new Object({targetMC:this});
とでもしておいて、
this.targetMC.attachMovie("MC2", "MC2", this.targetMC.getNextHighestDepth());
とかで。
>>996 おおーっ!できました。
thisとか指定なしでもいけるんですね。
someListenerに{targetMC:this}で渡す方法勉強になりました。
ありがとうございました。
次スレ用意しろ
埋め
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。