ActionScript 誰かが物凄い勢いで解答するスレ 22
1 :
Now_loading...774KB :
2009/01/11(日) 11:08:31 ID:FicsEN1I
3 :
あやや :2009/01/11(日) 20:44:39 ID:+wNHdYl7
flashでダイアログボックスを呼び出してサーバーにファイルのアップロードをしたいのですが flashからPHPに受け渡す方法がわかりません。だれか教えてください!
CS3 XP AS3.0でちょっと質問。 クイズを作ってて、問題データはxml外部読み込み。 xmlには問題、N択解答、解説とノードがある。 xmlデータ読み込んでそれを テキストボックスに表示させる事をしたいんだけど タイムラインの1フレームに読み込みの記述書いておいて そのタイムラインの問題、解答などのテキストボックスには反映されるんだけど クリックして別のフレームに飛んだとき(正解用フレームなど)に そのフレームのテキストボックスにはxmlのデータ(解説)が反映されない。 これって1フレームに書いた読み出しコードをそのフレームにも 書かないといけないの? 移動先フレームに同じ変数使うとCS3様に 怒られるからなんか1フレームの変数を呼び出す、的な利用方法が あると思うんだけど・・・・本見てもサッパリ。 また改めて1フレームに書いたようなxml読み出しを別の変数名で書かないと 動いてくれないのだろうか。 どなたか分かる方いないでしょうか?
Actionscriptにマウスカーソルをマウス以外の外部入力装置によって移動させることが出来るような関数ってありますか? GainerやArudinoなどを使ってオリジナルのマウスみたいなのを作ってみようと思っているんですが、ハード面よりも プログラミングで躓いてしまっている初心者ですorz
>>6 「Wii AS3 Flash」でググる。
コーディングは、簡単なサンプルが多数載っている本を買って、
改変しながら勉強すると良い。
>>7 ありがとうございます、早速参考にして勉強させてもらいます ノシ
ついさっきからas始めた者です as3なんですがマウスホイールでムービークリップの制御(という言い方なのかな?)は 出来るんでしょうか? ホイールで動く時計の針と連動させたいのですが、行き詰ってしまいました
>>10 ヘルプ機能初めて使ってみました^^;;
けっこう詳しくいろいろと載ってますね。
で、結局出来ないってことですよね? 初心者にはあのヘルプすらキツイというorz
出来るに決まってるだろw
ActionScript3でゲームを制作してる者です。 [Embed]でmp3を埋め込んで効果音を鳴らしてるのですが 出だしが0.5秒くらい遅れて再生されてしまいます。
すいません、途中で投稿してしまいました。 音の出だしをもっと早くする方法はあるでしょうか。 よろしくお願いします。
・0.5秒前から再生する ・サウンドの無音部分を削除する ・動的に無音部分を飛ばして再生する
出来るって教えてくれた方、ありがとうございました。 出来るとさえわかったので自分なりに調べたらそれっぽくできました!
"/データ/商品[@id=" + 変数名 + "]/商品名"
19 :
17 :2009/01/14(水) 14:53:17 ID:yfHgP3pr
できました! ありがとうございます!
20 :
Now_loading...774KB :2009/01/16(金) 23:46:42 ID:unblxp1S
FLASH CS3上で矩形図形をムービークリップ(インスタンス名:mc)にして、その中にテキストフィールドやムービークリップを追加して AS3でライブラリからこのムービークリップを呼び出し、ムービークリップの中のテキストフィールドに文字を入れたりムービークリップを動かしたり そういった事はできたのですが、 この呼び出したmcインスタンスを処理中に消したい場合、このmcに removeChild(mc); mc = null; としただけで、ライブラリから呼び出したデータは全部消えるのでしょうか? もしくは、全部消すならこのmcの中にあるムービークリップ等に全てインスタンス名を付け、全部getChildByNameで呼び込んで mc.removeChild(mc内のムービークリップ) mc内のムービークリップ = null; 等として全部中身を消した後、最後にmcにnullを渡さないと、ライブラリから呼び出したデータ全部は消えないのでしょうか? どうかお願いします
>>20 上の方法だと、
1. 参照が無くなったmcが削除候補になり、そのうち消える
2. (mcが消えたことで)参照が無くなったmc内のムービークリップが削除候補になり、そのうち消える
下の方法にすると、
1. 参照が無くなったmcと、mc内のムービークリップが削除候補になり、そのうち消える
とにかく参照が無くなった(どこからもアクセスできなくなった)時点で
自動的に削除候補になり、そのうち自動的に削除されると考えるとOK。
mc内のムービークリップを参照しているのがmcだけなら、上の方法でも全く問題無しです。
22 :
20 :2009/01/17(土) 10:01:36 ID:2dSrA4uS
>>21 オブジェクト同士が幾ら表示リスト上で繋がっていても、参照されずstageからの大元の表示リストから外れたら
いずれはその塊は削除されるといった感じでしょうか
削除についてあまり具体的にわかっていなかったのでとても勉強になりました!
返信ありがとうございました
as3、cs3環境で質問です メインタイムラインで定義した変数に外部ファイルのクラスからアクセスするにはどうしたらよいでしょう?メインタイムラインじゃstaticも使えないしお手上げです… よろしくお願いします
>>23 変数 var abc:int; として、MovieClip(root).abc は?
>>24 できました!
助かりました、直してやらないといかんのですね。ありがとうございます!
flash CS、AS3.0でインスタンスの削除がよくわからないのでお尋ねします。 flash CSで作成したアニメMCにリンケージを設定して、スクリプトで var ほにゃらら:MovieClip = new MCの名前(); と呼び出して、MCの再生が終了したら このインスタンスを自動的に削除したいと思っています。 今のところ、MCの最後のフレームのアクションに、 stage.removeChild(this); delete(this); stop(); と書いていますが、これで問題なく削除されていますか?
うん 参照とリスナがなければ
>>26 ・AS3.0では、オブジェクトのインスタンスに対してdeleteは使えません。
・呼び出し側の変数「ほにゃらら」がMCの参照を持っているので削除されません。
多分、呼び出し側で、
var ほにゃらら:MovieClip = new MCの名前();
stage.addChild(ほにゃらら);
とかしていると思うので、それを、
stage.addChild(new MCの名前());
として、MCの参照を持つ変数を作らないようにします。
MCのフレームアクションは、
stage.removeChild(this);
stop();
だけでOKです。
stage.removeChild(this)を呼び出した時点で
MCは参照がなくなるので、削除対象となり自動的に削除されます。
(AS3.0では、明示的にオブジェクトを削除する手段はありません)
>>29 後者のマリオカート風味の映像は
FlashCS4から比較的簡単にできる
3D回転を用いればよい
function a (str){ trace(str); } (true ? a : b)("あいう") これがJavaScriptじゃ動くのにどうしてFlashじゃ動かないんですか><おしえてください 代替策もお願いします
JavaScriptでも動かんだろそれ
あー、alertにするのか つか、player10だとbさえ定義しときゃ動いたよ 9はしらん
お願いします。教えて下さい! CS3 XP AS2.0です。 ブラウザの横幅に合わせて縦横の大きさが変動するムービークリップ(contents)を 作ったのですが、 ブラウザの横幅に合わせて横幅のみ変動する高さは常に一定のムービークリップ(footer)を いつもこのムービークリップ(contents)のすぐ下に配置するには どうすればいいでしょうか? contentsのスクリプトは以下のようになってます。 よろしくお願いします。 Stage.scaleMode = "noScale"; Stage.align = "TL"; var MW:Number = contents._width; var MH:Number = contents._height; var sListener:Object = new Object(); sListener.onResize = function() { contents._width = Stage.width; contents._height = MH/MW*Stage.width; } updateAfterEvent(); Stage.addListener(sListener); sListener.onResize();
footerのY座標はcontentsの縦幅 後、updateAfterEvent何か意味あるの? 明らかに書く場所間違えてるように思うけど、意図してのこと?
>>35 ありがとうございます!
おっしゃるようにY座標をcontentsの縦幅にしたら思うように出来ました。
updateAfterEventは見本にしたサンプルソースをそのままコピペして
しまいました。すいません意味はありません。
>>34 ですが、
footer._y = contents._height;
を入れることによってfooterはcontentsの下に置くことが出来たのですが、
ブラウザの大きさによってはfooterが隠れてしまう場合があります。
常にfooterの高さ分(仮に100px)を確保するにはどうすればいいのでしょう?
contentsの高さ + footerの高さ よりステージの高さが大きいときは
ステージが見えていて構いません。
わかりにくい表現ですみません。教えて下さい。
39 :
Now_loading...774KB :2009/01/24(土) 18:30:57 ID:3O4tfDUp
各asファイルをどうディレクトリ分けすればいいのかわからないんだけど 参考になるサイトとかあったら教えて下さい…。
どうでも良いかもしれんけどちょっと質問。 AS2.0で _parent.gotoAndPlay("label"); と gotoAndPlay("_parent.label"); は記述的にはどっちが良いとかある?気になって昼寝もできません。
>>39 参考にするも何も自分の好きなように分けたらいいんじゃない?
別に分けなきゃいけないルール・制約があるわけで無いんだし
>>40 上はMovieClipクラスのgotoAndPlayメソッド
下はgotoAndPlayグローバル関数
43 :
Now_loading...774KB :2009/01/26(月) 17:30:54 ID:sO17OXmi
すいません、詰まってます、ご教示ください。 MovieClipのモーショントゥーインで作った動きの移動量(ベクトル) をとることは出来るのでしょうか。
44 :
43 :2009/01/26(月) 17:36:18 ID:sO17OXmi
イメージは動く床に物体が乗ってるって感じです
モーショントゥイーンを設定した MovieClip にインスタンス名を設定すれば 各フレーム毎にその MovieClip インスタンスの位置データ(x, y)を取得できる。 そこから移動量を割り出せばよいのでは
46 :
Now_loading...774KB :2009/01/26(月) 20:30:13 ID:xLv/aYBe
getDefinitionByNameを使いたいのですが上手くいかず、試しに 新しいflaファイルを作り、タイムラインに import pack.*; for(var i:int=0; i<2; i++) { var testClass:Class = Class( getDefinitionByName("pack.TestClass" + (i+1) ) ); } そしてflaファイルと同じ階層にpackというフォルダを作りクラス名とトレース文が違うだけのTestClass1・TestClass2を入れて package pack { public class TestClass1 { public function TestClass1() { trace("TestClass1"); } } } としたのですが、プレビューをすると、変数 TestClass1 は定義されていませんというエラーが出てしまいます 一体何が足りないのでしょうか・・・ actionscript3、FLASH CS3です
47 :
43 :2009/01/26(月) 20:44:45 ID:sO17OXmi
FPSで現在値は分かるのですが、前回値がと、とれなひ・・
49 :
46 :2009/01/26(月) 23:08:58 ID:xLv/aYBe
>>48 レスありがとうございます
記事を教えてもらって恐縮ですが、未だに上手く掴めません・・・
ただ、結局for文の繰り返し内だけで処理の記述をを纏める事はできず
for文の前に自前に
var testClass1:TestClass1;
var testClass2:TestClass2;
という様に先に個々の呼び出しを行なっておかないとダメという事なのでしょうか
ライブラリにムービークリップを作りリンゲージして呼び出す方は普通に出来ましたので
こちらの方でなんとかやっていった方が無難なんでしょうかね
>>49 flashはコンパイルしたときに一度も使われてないクラスはswfに含めないようになってる
だからコンパイル後にgetDefinitionByName()しても定義されてませんってなる
なのでswfに含まれるようにするには、リンケージしておくか、
var testClass1:TestClass1;
var testClass2:TestClass2;
というように型を宣言しておくか、コンパイルオプションですべてのクラスを含めるようにする
51 :
Now_loading...774KB :2009/01/28(水) 16:15:16 ID:UjH6BzW3
AS3の質問です! 抽象クラスのコンストラクタに引数が設定されている場合 その抽象クラスを継承したサブクラスには、かならずその抽象クラスの コンストラクタをオーバーロードしなければいけないのですか?? 抽象クラスを継承したサブクラスのコンストラクタに superにパラメータを渡すだけのコードを記述しなければならないのが ばかばかしい(コードの重複になる)と思ったので質問しました。 もしかしたら、サブクラスにコンストラクタを記述しない場合 自動的にスーパークラスのコンストラクタがサブクラスに生成 されるのではないかと思い、試してみたのですが サブクラスにコンストラクタを記述しないで実行したら 「引数の数が正しくありません」とコンパイラに怒られてしまいました。 あきらめてさっさと各サブクラスにsuperにパラメータを渡すコンストラクタを記述すべきでしょうか。
53 :
Now_loading...774KB :2009/01/29(木) 22:37:21 ID:BysMUrX4
AS3.0です。 1.四角いボタン(movieclip)にマウスオーバーでoverの処理 2.四角いボタン(movieclip)からマウスアウトででoutの処理 その四角いボタンの中にmovieclip(矢印が点滅している)があります。 四角いボタンからはマウスアウトはしていないのですが中に含まれている 矢印のムービークリップにマウスが重なると四角いボタンのマウスアウトの処理が実行 されてしまいます・・・四角いボタンの中なのでオーバー状態にしたいのですがなにかうまい方法はありますでしょうか?
rollOver rollOut
55 :
Now_loading...774KB :2009/01/29(木) 23:40:43 ID:BysMUrX4
>>54 ありがとうございます。
MouseEvent.ROLL_OVER
MouseEvent.ROLL_OUT
ですね!
助かりました。
CS3 AS3.0で、 ブラウザがFirefoxのときのみ再現するのですが、 var loaderinfo : LoaderInfo = root.loaderInfo; loaderinfo.addEventListener(Event.COMPLETE, LoadComplete); としたときに、COMPLETEイベントが起きません。 SWFのキャッシュがあるときに起きるような感じがするのですが。。。 原因のわかる方、解決策をお願いします。
>>56 Event.ENTER_FRAME で bytesLoaded と bytesTotal を比較して、
completeしているか判断するしかないみたいですよ。
FLVのストリーミング再生ってむずい? (Flash Media Serverはあるみたい。)
>>57 ぁー、そうなんですか。
どうもありがとうございます〜、助かりました。
60 :
Now_loading...774KB :2009/01/31(土) 13:23:20 ID:Vcu4AIju
cs3ですがmcAにイレゴにしたmcボタンがあります。タイムラインのルートからそのボタンを参照しようとすると、mcAがプロパティ未定義な感じのエラー。 まずmcAを参照できないみたい。リンケージせずにインスタンス名で普通に呼んでるんですが、どなたか解決法ご存知でしたら教えて欲しいです お願いします
AS3.0で質問です。 ステージにオブジェクト名をつけたムービークリップがあるのですが、 これを自前のクラスから参照するにはどうしたらいいのでしょうか? メインのタイムライン var a:testClass = new testClass(); stop(); 自前のクラス package { import flash.display.Stage; public class testClass { function testClass() { trace(Stage.myMc); } } } これだと、trace(Stage.myMc);のところで 1119: 未定義である可能性が〜 というコンパイルエラーになってしまうのです。どうやったら ステージにあるMCにたどり着く事ができるのでしょうか?
>>62 タイムラインなら
MovieClip(root).myMc;
でいけないかな?
それかstageの参照を引数でとるとか
>>63 >MovieClip(root).myMc;
これだと、「1120: 未定義のプロパティrootへのアクセスです」になってしまいました。
このクラス自身にはrootがない、と判断されてしまっているのかなと。
クラス側でステージを受け取るメソッドを作ってから、
タイムラインでstageを渡すようにメソッドを呼ぶとステージは受け取れる?
みたいなのですが、
public function init(st, mc:MovieClip)
{
trace(st); // class [Stage]
trace(st.myMc); // undefined
}
となってしまってmyMcにたどり着けませんでした。
じゃあ、myMcを渡せばいいという話ではあるんですが、ステージ上の
MCが複数あると大変なことに・・・。
>>64 そうだった、そのクラス自体はDisplayObjectを継承してないからrootとかないな
Stageには直接アクセスできないからDisplayObjectのstageプロパティを介さなきゃいけない はず
public function Foo(s:DisplayObject) {
trace(s.stage);
}
というかstageなのかrootなのかw
addedToStageイベント(ADDED_TO_STAGE)でステージに追加されたときにrootなりstageなりから辿っていけばおkじゃね?
>>65 DisplayObjectなるほど、と思って試してみたのですが、
s.stageまではアクセスできるのですが、s.stage.myMcにすると
やはり1119エラーでした。
なんか変だなと、ステージにテキストフィードやらムービークリップを
たくさん置いてから、メインのタイムラインに以下のコード書いて実行したところ...
var num = stage;
for(var i=0;i < num;i++){
var mc = stage.getChildAt(i);
trace(mc);
}
結果は
[object Stage]
[object MainTimeline]
2つしかありませんでした。たぶん、FLASHでステージに置いたMCとか
テキストフィールドとかコンポーネントはstageに含まれるのではなく、
stageと等価な関係?っぽいです。実際、メインのタイムラインで
trace(myMc);とすればオブジェクト名が出てきますが、trace(Stage.myMc);
としたら1119エラーに。
これはもう、最初からステージにモノを置くなって事でしょうか?
>>66 イベントが飛んでこないようです。理由はきっと
>>67 でstageに含まれていないから?
もしかして、初回のAS実行時にはMCとかテキストフィールドが
生成されていないのかと、2フレ目以降で監視するようにしてみたのですが、
結果は
>>67 と同じでした。
意味わからん どんな作りになってんのそれ
あーあー、ステージに配置するんじゃないのか じゃあstaticなクラスプロパティにでもステージへの参照つっこんどけば? ステージ側から初回にそこへ参照突っ込んどけばあとはいけんじゃ?
>>69 FLASHを起動して、真っ白い画面にテキストフィールドを置いたり
絵を描いてMC化したりです。それらに自作のクラスからアクセスしたいのです。
もちろん、ドキュメントクラスからはアクセスできます。
>>70 オブジェクトがステージ内に含まれていない事がわかったので、それだとうまくいきませんでした。
うまくいかない理由がさっぱりわからん まーがんばってくれ
パブリッシュ設定のFlashのタブにある、 ActionScriptのバージョンっていうとこの右の「設定」を押して。 Strictモードのチェックをはずしてパブリッシュしてみたらどうだろう。
比較演算子で()の中が真なら1、偽なら0を返すような計算をするのって ASでできますか? (例) a= (b==c)*10 ;aの値は、bとcが同じなら10,違うなら0になる
a=b==c?10:0
できました。ありがとうございます。
78 :
71 :2009/02/03(火) 14:04:37 ID:7hc0/nyC
自作のクラスをnewするときに参照を渡してあげれば済む話ではないのか
>>78 いや、79の言う通りで参照を渡せばいいだけの話
81 :
71 :2009/02/04(水) 22:23:57 ID:1Vr++Uqi
>>79-80 ステージの参照をですか?
それとも最初からFLASHで配置したムービークリップとか
テキストエリアをですか?
前者の場合、実際にやってみると出来ませんでした。
コンパイル時1199か実行時にundefinedという感じです。
後者の場合、それが出来る事は
>>64 の段階でわかっているのですが
個数が多いと引数が大変だなと。それらをひっくるめたMCを作れば
いいんですけど。
>>81 解っているというのではなく、適当に書いたら動いたんだろw
参照を渡すって解るか?
AS3です。 テキスト入力フィールドに入れる文字数を 全角なら何文字、半角なら何文字というように制限する方法はありますでしょうか?
>>84 ありがとうございます!ここのサイト↓はみていたのですけど、
ttp://hakuhin.hp.infoseek.co.jp/main/as3/container.html この図だとstageの下のroot1(root)のように書かれているのに、
stage経由だとmyMcにたどり着けなかったので変だなぁと思っていました。
まだちょっと、thisとrootの関係があやふやですが、つかみ所が
わかってきました。本当にありがとうございます。
var tc:TestClass = new TestClass(root);
trace("myMc.name = " + myMc.name);
trace("this = " + this);
trace("this.myMc.name = " + this.myMc.name);
trace("root = " + root);
trace("root.myMc.name = " + root.myMc.name);
trace("stage = " + this.stage);
trace("root.stage = " + root.stage);
trace("stage.root = " + stage.root); // ?
>>82 参照を渡す意味は(C++やjavaでさんざんやってきたので)わかるのですが、
何を渡すのかのところで考え違いを起こしていました。
86 :
Now_loading...774KB :2009/02/07(土) 14:27:30 ID:A1tneeCg
AS3なのですが ユーザーが右クリックで拡大/縮小した場合の倍率を 取得するにはどのようにしたら良いでしょうか? 衝突判定の処理の中で Matrix.tx Matrix.ty を使用しているのですが ムービーの拡大/縮小で値が変わってしまうので 倍率を取得して補正したいのです。。。
matrixのaとかでわかるんじゃね? コンテナで一括で倍率変更してるならコンテナので
>>87 ありがとうございます
matrixのaとかdで正しい値が取得出来ました!
1週間悩んで、散々ヘルプ見てても気がつかなかったです。。
脳みそ腐ってきてるのかな。。
Flex Builder 3上でFileReferenceを使ってローカル上のファイルを読み込み 取り扱うファイルを読み取りたいのですが、FileReference.loadを実行しても ReferenceError: Error #1069: flash.net.FileReference にプロパティ load が見つからず、デフォルト値もありません。 Flex SDKを3.0.1で実行した際には正常に動作する様なのですが、 Flex SDKを3.2.0として実行すると上記のようなメッセージが表示され、 load関数自体を実行できません。 実行の際に必要なFlashのバージョンを10.0.*にしたり、 読み込まれるplayerglobalを複数選択などしてみたのですが どれも正しい動作には至りませんでした。 もし宜しければ調べるためのキーワードなどを教えて頂けないでしょうか。
すいません、事故解決しました。 今までFlashのデバッグ作業をローカル上のFlashで行っていたのを、 ブラウザ上からのデバッグに切り替えたら正常に動作しました。 もし調べてくれていた方がいたらすいません。
91 :
Now_loading...774KB :2009/02/08(日) 18:03:58 ID:pNXBfy4V
ネットにある、ページのサムネイル画像をクリックすると、元画像が表示されるみたいな仕組みについてですが あれは読み込む画像を、サムネイル用の小さい画像と元画像とを別々に用意してあるものなのでしょうか? 上記のようなスクリプトサンプル (xmlにurlを明記して、それを元に画像を読み込みサムネイル・元画像を作る) を見つけたのですが、読み込んでる画像urlがサムネイル側・元画像側とも同じでした(元画像一枚を双方で読み込み) サムネイル側では読み込んだLoaderはサイズを小さくし表示、元画像側で読み込んだLoaderはそのまま表示していました 実装はできたのですが、なんだか動作が重いような感じがします こういった仕組みは初めて作ったのですが、ネットにあるこの様な仕組みも同じ画像を読み込んで縮小したりで処理してるのでしょうか? ふと思ったのが、元々サイズを小さくしたサムネイル画像と元画像を別々に用意して それぞれをサムネイル側・本画像側で読み込みして表示した方が重くなったりしないのかなと思ったのですが この仕組みのセオリーとしてはどっちの方法が良いのでしょうか? Actionscript3.0をFlashCS3使用です
>>91 その通りです。
縮小する処理や、さらにその画像をそのまま動かす処理というのは意外と重いです。
サムネイルを用意しておくことにはサーバとの通信負荷の軽減にも繋がります。
元画像しか用意してないのなら、読み込み時にサムネイル用のBitmapなどを用意して
その後に動かしたりするといいと思います。
>>92 ありがとうございました、サムネイル用・元画像と別々に用意した方がやっぱりいいんですね
サムネイルBitmapというのも調べてみようと思います、遅くなりましたがありがとうございました
モロゾフって誰ですか?
環境:xp flexSDK3.2 FlashDevelop AS3 MXML mxmlのaccordionパネルについて教えて下さい。 以下のような構成の時にスクリプトからボタンにアクセスができません。 Accordion ├HBox1 / Button1(初期表示) ├HBox2 / Button2 ├HBox3 / Button3 ○Button1(初期状態からアクセスできる) ×Button2(一旦HBox2を表示すればそれ以降アクセスできる) ×Button3(一旦HBox3を表示すればそれ以降アクセスできる) accordionパネルはいったん表示しないと、中の子が定義されないようなので困っています。 最初から全てのボタンにアクセスしたい場合はどうしたらいいでしょうか?
97 :
96 :2009/02/10(火) 19:10:15 ID:ygAoQOnz
>>96 自己レスです。
accordionパネルのcreationPolicyプロパティをallにすることでいけました。
AS3の文字化け解決で質問です。 サーバからの日本語文字列をコード変換する方法を教えてください。 AIRでURLLoaderを利用して、サーバからのレスポンスを取得したところ、 日本語部分が文字化けしています。(ブラウザだとちゃんと見れる) sparkで提供されているライブラリ(DetectOnWeb)を利用し、文字コード判定したところ レスポンスデータはUTF-8でした。 unescapeMultiByteを利用しても違う文字化けに変わるだけで解決できません。 この後どのように解決すれば良いでしょうか?
99 :
Now_loading...774KB :2009/02/11(水) 21:33:52 ID:Mdmk1dc4
トゥイーンエンジンの自作について詳しく解説しているサイトか書籍はありませんでしょうか?
100 :
凹 :2009/02/11(水) 21:57:25 ID:34ChhF3X
102 :
♪ :2009/02/12(木) 01:31:17 ID:qtpZIyCE
101へ ありがとう!! 早速行ってきます♪
103へ アンカー書けや阿呆 初心者は3年ROMれよ。恥を知れクズ
>>95 ストリームの読み込みは別として
fcommand辺りでいけたはず
gglで「flash 全画面」辺りで調べてみて
一応あとで調べなおしてみる
>>98 useCodePageで調べればいけると思う
105 :
Now_loading...774KB :2009/02/12(木) 04:19:54 ID:ypmfssxE
初歩的な質問ですみません。 ムービークリップ内からタイムラインの変数を参照&書き換えを行いたいのです 下記を実行すると1120エラーでうまく参照されていないようです 皆様の知恵をご教授下さい。 ・タイムライン内 MCr1というMCを配置 var a = 2; var b = 2; //MCが止まっていたらスペースキーを押すことによってスタートする if ( b == 2 ) { stage.addEventListener(KeyboardEvent.KEY_DOWN, dousa); function dousa(evt) { if(evt.keyCode == 32){ a = 1; MCr1.play(); }}} //MCが動いていたら左矢印を押すことによってストップ信号を出す if ( b == 1 ) { stage.addEventListener(KeyboardEvent.KEY_DOWN, dousa); function dousa(evt) { if(evt.keyCode == 37){ a = 2; }}} ・MCr1内 //ストップ信号を受け取ったら停止する if( a == 2 ) { stop(); b = 2; }
キーが押されたときというイベントに対するリスナーを登録 そのハンドラ内でaなりbなどの判定してplay,stopを実行 なんでif文の中に関数定義なんか書いてるんだ? インスタンス名は小文字で始める 重要なflgにはa,bなどのわかりづらい名前は付けない 型をちゃんと指定する
107 :
Now_loading...774KB :2009/02/12(木) 12:16:08 ID:ihZ9xDdB
as3.0で、外部から読み込んだ複数の数値のデータの 最大値を求める方法はありますか? 配列だと、 var a:Array = [10,21,35]; Math.max.apply(null,a); で求められるんですが、外部から読み込んだデータを Arrayの配列にぶっこむ方法とかはあるのでしょうか。
普通に配列に代入すりゃいいじゃん
109 :
107 :2009/02/12(木) 12:35:45 ID:ihZ9xDdB
>>108 自分でやった代入の方法がおかしいみたいです
例えば外部のXMLのnumdataという項目にそれぞれ数値が
設定してあって、その最大値を読み込みたいんですが、
var xxx = myXML.numdata;
var a:Array = [xxx];
var yyy = Math.max.apply(null,a);
trace(yyy);
というような記入方法だとうまく出て来ず…
xxxが文字列でカンマ区切りになっているのなら まず分解しなくてはだめ var a:Array = xxx.split(","); 各aの配列の内容は数値ではなく文字列で分解されるかもしれないので 更に各要素を数値変換する必要があるかも
111 :
107 :2009/02/12(木) 13:15:29 ID:ihZ9xDdB
>>110 すみません、書くのを忘れていました、読み込みたいデータが複数あるので
(1つのデータ内の項目のひとつがnumdata)、for〜でループさせて処理をしてます。
よって、データ1つの持つnumdataの数値は1つで、カンマ区切りにはなっていないのです。
var xxx = myXML.numdata[i];
var a:Array = [xxx];
var yyy = Math.max.apply(null,a);
trace(yyy);
xxxで、とりあえず全データのnumdataの数値を拾ってきているのですが、
逆にそれを、カンマのついたArrayの形にしたい、という感じです。
それこそ一つ一つ配列に代入すればいいだけの話 配列の使用方法を調査してみて
113 :
107 :2009/02/12(木) 15:07:25 ID:ihZ9xDdB
>>112 これしか思いつかず、やってみたのですが、やはりトレースすると
全部のnumdataが列挙されるだけになってしまいます…
Arrayの基礎がわかってないですかね…
var xxx = myXML.numdata[i];
var a = new Array;
a[i] = xxx;
var yyy = Math.max.apply(null,a);
trace(yyy);
つか、最大値を求めるだけなら、xml取得してから for文で最大値求めるコード書くだけでいんじゃね 特に配列使う必要があるなら別だけど
なんで一個ずつ新しい配列つくるのさ 全部同じ配列にいれなきゃ
俺も練習がてら
>>107 のサンプル書いてみた
皆ならどんな風に書くか
スレ盛り上げるつもりで書いてみようぜ
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class asMIK22_107 extends Sprite
{
private var _loader:URLLoader;
public function asMIK22_107()
{
_loader = new URLLoader();
var req :URLRequest = new URLRequest("data.xml");
_loader.load(req);
_loader.addEventListener(Event.COMPLETE,loadComplete);
}
private function loadComplete(e:Event):void{
var myXML:XML = XML(_loader.data);
var max:uint = 0;
for each(var v:int in myXML.value) if(max < v)max = v;
trace(max);
}
}
}
>>116 に使ったXMLの中身
<data>
<value>23</value>
<value>51</value>
<value>43</value>
<value>16</value>
</data>
AS3.0でFlashCS3-ProをWinXP-Proで使っています。 Root上(Stage上)に置いたインスタンスがNullになり困っています。 (本やWebで調べても原因が分かりません) HosiというMCのASファイルからRoot上のインスタンス(starSetB)を参照したいのですが、 どうしてもNullになり参照できません。 参照の経路は Hosi → Root → starSetB で、starSetBを押すとHosiに関連付けられた ASファイル中の trace ("starSetB"); が実行されるようにしたく思っています。 (つまり 子 → 親 → 子 で、兄弟の参照です) ところが、プレビューすると下記のメッセージが現れて参照出来ません。 TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません 今までは同じようなASを組んでも問題なく実行出来ましたが、年明けから同様な症状 になります。一応、CS3のアップデートを試みましたが「利用可能なアップデートはありません」 と出ます(CS3のバージョンは9.0です)。下記はHosiで書いたASの抜粋です。 var RootTL:MovieClip = root as MovieClip; //rootの指定 public function TestSet_01 () { RootTL.starSetB.buttonMode=true; // マウスポインタを指の形に RootTL.starSetB.addEventListener (MouseEvent.MOUSE_UP,starSetB_up); } private function starSetB_up (mouseEvt:MouseEvent) { trace ("starSetB"); //出力 } どうしたら良いでしょうか?
>>118 package{
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class Hosi extends MovieClip {
var RootTL:MovieClip;
function Hosi() {
TestSet_01();
}
public function TestSet_01() {
RootTL = root as MovieClip; //rootの指定
RootTL.starSetB.buttonMode=true; // マウスポインタを指の形に
RootTL.starSetB.addEventListener(MouseEvent.MOUSE_UP,starSetB_up);
}
private function starSetB_up(mouseEvt:MouseEvent) {
trace ("starSetB"); //出力
}
}
}
できるじゃん。
starSetBがない。starSetBが別の階層にある。starSetBのインスタンス名を付け忘れた。
・・・とかじゃないかなぁ。なんでもかんでもrootってもあれだけど。
MOUSE_UPよりMOUSE_CLICKのがいいような気が。
120 :
Now_loading...774KB :2009/02/13(金) 04:48:39 ID:HwhM5Ab5
Rootでスクリプトを書かない事情が何かあるんだろうか
121 :
118 :2009/02/13(金) 05:21:09 ID:pywSiMVS
122 :
118 :2009/02/13(金) 05:26:01 ID:pywSiMVS
>>120 部品ごとに制御をしたいので、個別に書いています。
今回は部品間の通信(参照)が出来ないので困っています。
>>121 upローダ使えるんだったらflaをUpしてください。
その方が話がはやいです。
>>121 RootTL.startSetB... のところを Stage.startSetB...
にしたらいいかと(TestSet_01がドキュメントクラスの場合)
TestSet_01がドキュメントクラスじゃないなら、
TestSet_01の引数にドキュメントクラスへの参照変数を追加する
(new するときにthisを与える)
126 :
Now_loading...774KB :2009/02/13(金) 14:28:12 ID:VqIvAhCj
WinXP Flash CS3を使用していますが、 元々作っていたFlashのソースが前バージョンから引き継いだもののため、 ActionScript2を使っています。 Flashアプリを getURL("FSCommand:fullscreen", "true"); getURL("FSCommand:allowscale", "false"); で、フルスクリーン表示させています。 そのFlashアプリでPDFを起動させる必要があるのですが、 PDFファイルを起動させる方法がわからなかったので、 getURL("test.pdf"); を使ってブラウザからPDFを開こうと試みたのですが、 これをするとPDFは開くものの、フルスクリーンで起動していた 元画面がリサイズされて小さくなってしまいます。 解決するにはどうしたらよいでしょうか?
127 :
118 :2009/02/13(金) 14:31:20 ID:9v1HkEjy
>>123 すいません。ZipでUpしました(解凍後のフォルダ名:PassWay)。
http://uproda11.2ch-library.com/src/11158556.zip.shtml 内容は、
1) AS3_PassWay_01.as ・・・ メインASファイル(t01a,t02共通)
2) PassWay -t01a.fla ・・・ 当初のFla
3) TestSet_01a ・・・ 当初のASファイル
4) PassWay -t02.fla ・・・ 119さん方式のFla
5) Hosi.as ・・・ 119さん方式のASファイル
PassWay -t01a.fla と PassWay -t02.fla は共に starSetB をRoot(Stage)上に持つのですが、
共にインスタンスstarSetBがNullになります。
なお、メインのASファイル AS3_PassWay_01.as は現時点では特に動作を指定していません。
>>124 「ドキュメントクラスへの参照変数を追加する」の具体的な方法が分かりません。引数に
メインASファイル(ドキュメントクラス)の AS3_PassWay_01 を入れましたが、Nullになります。
>>125 有難うございます。
しかしこれでは、ライブラリMCのリンケージ設定が無いので目的のものとは違ってしまいます。
128 :
107 :2009/02/13(金) 14:34:05 ID:dt1m184T
>>116 ありがとうございます、
>>114 さんの、for文で最大値を求める、という部分で
躓いてたんですが、変数用意して、自分より数値が大きければつっこんでいく、
という考え方でいけたんですね。
発想の引き出しがまだまだ足りないので、がんばります。
ありがとうございました。
130 :
Now_loading...774KB :2009/02/13(金) 15:38:53 ID:VqIvAhCj
>>129 完全にテンパってました。すいません。気をつけます。
>>127 せっかくサンプル作ったのに、ちょっとは自分でも調べようよ
1から10まで全部丁寧に説明せにゃいかんのかい
とりあえずソース見た感じ RootTL.starSetB. を this. に直せば動くから リンケージ名と同じ名前のASファイルは自分自身、つまりthis
あとこれは消す var RootTL:MovieClip = root as MovieClip;//rootの指定
>>131-133 有難うございます&大変申し訳ございません。
UpしたZipではリンケージ設定で根本的な間違いをしていましたので訂正します。
※その前に再度質問の整理をさせて下さい。
元々は、部品や処理内容を個別のASファイルに記述して 子 → 親 → 子 という
兄弟間の参照をしたく思っていました。再UpしたZip(下)の場合なら、同じRoot(Stage)上に
ある 「インスタンスstarSetB」→「インスタンスstarBeginMとstarEndM」 の処理です
つまり、キーボード(starSetB)と画面(starBeginMとstarEndM)に分離している状態です。
今までもこのように処理を分け、兄弟間の参照を書いても問題なかったのですが、今年の
初め辺りから不可能になり(Nullが表示され)困っていました。
尚、再UpしたZipは
http://uproda11.2ch-library.com/src/11158613.zip.shtml で、
TestSet_01e.as の RootTL.starSetB.buttonMode=true; でエラーになります。
度々申し訳ありませんが、宜しくお願い致します。
前はas2.0で書いてたんだろ あんた人の話し何も聞かないでできないできない言って勝手にテンパるからうざいわ 何度同じ事聞かれても同じ答えしか出ねーよ しかも動くサンプルあるし 技術どうこうのレベルじゃない あんたに言っても無駄
>>135 最初の質問の記述に間違いがあって、更にUpしたFlaファイルにも間違いがあったので、
混乱を避けるため(出発点に戻るつもりで)134を書いて再Upしました。
> 前はas2.0で書いてたんだろ
この目的の動作は最初からAS3.0で書いています。AS3.0のもっと複雑な記述のコンストラクタ
で問題なく兄弟間の参照はできていましたが、再三書いている通り、今年に入り参照できなくなりました。
動くわけ無いコード書いてあるのに今年も去年もねーだろ 好きに書けば?動かないけどな
>>135 落ち着け。テンパってるのはこの人じゃないぞ
それじゃあ人を怒りたいが為にここに着てるように見えるぞ
>>136 もう少しFlash上のスコープについて調べてみな
Flex(スクリプトのみ)で動かしてるスコープとFlashのスコープで
見比べてみるとよく解るかもしれないぞ
それと再三って言葉のイメージが良くないな
>>138 つい感情的になってしまいました。言葉には気を付けます。
「Flash上のスコープ」について調べてみます。
あと、このスレの
>>60 〜
>>85 は私の疑問と近い気がしますので
参考にしてみます。
int, uint, voidの頭文字がなぜ小文字なのかが気になる わかるひといる?
慣性じゃない?
>>141 Javaからの慣例ってことなのかもしれないけど、
AS3の場合の大文字小文字が、プリミティブ型とオブジェクト型、
って分け方でもないし不自然じゃない?
>>142 ごめんそのURLの意味がわからない
> AS3の場合の大文字小文字が、プリミティブ型とオブジェクト型、 > って分け方でもない どういうこと?
>>143 わからないというのは、プリミティブ型について記載されてないから、
という意味で?
それとも、このページの存在意味がわからない方?
レス遅れました、すんません
>>144 Javaはプリミティブ型(基本データ型)の時は頭文字小文字、オブジェクト型の時は頭文字大文字で
始まる型名で宣言するようになってるけど、AS3はそうはなってないですよね?って意味です。
もしそういうJavaみたいな分け方での頭文字の大文字小文字を使うのであれば、プリミティブ型っぽい
BooleanやNumberなども頭文字小文字にすべきだと思うし、そうではなく「厳密に言えばAS3での型は
すべてオブジェクトだ」ってことならなぜint, uintだけ頭文字小文字なの?って思うし、中途半端に思えるんです。
>>145 そのページは以前から知っていて読んだこともあるんですが、今回の自分の質問との関連性がわからないっす。
Adpbeが提唱するコーディング規約にも、なぜint, uintが頭文字小文字になってるのか、とか、わかりやすさの
ために頭文字を大文字にしてIntやUintやVoidを使って良い、とかは書いてないですよね?
JavaとAS3をちょっとかじっただけの知識しかないので、根本的なことを見落としているかもしれません。
さっきC#を調べてみたら、プリミティブ型はすべて小文字、オブジェクト型はすべて大文字で統一されてる気がします。
147 :
Now_loading...774KB :2009/02/14(土) 22:53:43 ID:gDkAwmPa
Flash8のactionscript2で書いています
ムービークリップ中のボタンのonReleaseの処理をタイムラインに書いて、
getURLさせようとしてるんですが動きません
_root.infoMC1.b_link1_1.onRelease = function(){
getURL("
http://www.hoge.com/ ","_blank");
}
って感じです
infoMC1はMovieClip、b_link1_1はボタンのインスタンス名です。
このアクションはタイムラインの10コマ目に書いてあって、対象のボタンも10コマ目に
出てくる設定です。
どこかおかしいでしょうか?
基礎的なことで恥ずかしいですが、基礎的なことだからこそ大ハマリしてしまいました
よろしく御願いします
>>146 ECMAScript準拠かそうでないかで分けてるんじゃないの?
>>147 そのonRelease()前に
trace("name = " + _root.infoMC1.b_link1_1);
って書いてみて出力をチェックする。なにもでなきゃ
infoMC1.b_link1_1がない。
trace("name = " + _root.infoMC1);
って書いてみて何も出なきゃinfoMC1がない。
インスタンス名がついてないとかね。
>>149 ,150
どうもありがとう 言われたことチェックしてみます
またきたらまたヨロシクです
>>146 Boolean や Number がオブジェクト型であるということが中途半端だ
という理由はあるのかな?
var flag:Boolean = true; var flag:Boolean = new Boolean(true); var flag:Boolean = Boolean(true); こういうところが嫌いだな。Arrayなんか最悪だわ。
好みなのね 初めは抵抗あっても なれてしまえばなんとも感じなくなるさ
>>146 ECMAScript4にあわせたんじゃないかな?
あれが確かint,uintとかになってたはず
>>152 そういうことじゃなくて、クラス名の先頭は全て大文字にするという命名規則があるのに
大文字だったり小文字だったり中途半端なことをするのか と言いたいんじゃないのかな?
>>153 それは
Booleanデータを代入
新しいBoolean型を生成
Boolean型に変換
ってだけで、作る側が統一すればいいだけの話では?
156 :
153 :2009/02/15(日) 14:01:12 ID:THCfAlSL
1行目はプリミティブ型 2行目のはオブジェクト型 だと思ってたんだけど違うの?全部オブジェクト型なの?
全てプリミティブのように振る舞うが全てオブジェクト 3つとも全て同じこと
質問 trace( !false ); これなんでtrueになるの?オブジェクトならfalseが返るはずだと思って気になった。 NOT演算子って何やってるの?
>>155 > そういうことじゃなくて、クラス名の先頭は全て大文字にするという命名規則があるのに
> 大文字だったり小文字だったり中途半端なことをするのか と言いたいんじゃないのかな?
int, uint ってクラスだっけ?
データタイプとデータバリューを一緒にしてるしw
>>158 !false
は
false != true
false は true ではないから true が返る
メモリの1bit目が0になるデータバリューを持つオブジェクトが倫理否定でtrueになるという認識で合ってますか? Objectは1bit目が1のため倫理否定で必ずfalseが返って、 Bool型はObjectだけど、1だったり0だったり・・・と?
オートキャストの表でも見ろw
なにそれー・・
わかった。Boolにキャストされるって事か。ありがとう
>>163 Booleanがオブジェクトだから、とかではなく
!はもともとBooleanのtrue、falseをみるもの
!にBoolean以外を入れた場合Booleanに変換してから評価する
基本的に
0, NaN ,"", null, undefined
以外は全てtrueになる
168 :
Now_loading...774KB :2009/02/16(月) 15:24:23 ID:zUdKOiSX
Fla8 AS1.0書き出しです。 テキスト入力でユーザーに数字を入力させるのですが、 先頭に0が付いていると8進数になってしまうと調べて分かりました。 substringなどをつかって頭の0を取り除くのはできましたが、 000123のように頭に連続して0がある場合もすべて取り除きたいのですが、 頭から順に0を取っていく簡単なfunctionを教えていただけますでしょうか。
170 :
169 :2009/02/16(月) 16:04:11 ID:zUdKOiSX
ありがとうございます・・・わざわざforとsubstr使って0を取ってました・・・。 追加で質問です。 電卓のようなものを作っているのですが、テキスト入力に数字を 入力させるのですが、空欄のままだとそのまま先に進んで 計算を続行してしまいます。 始めに「0」と表示させたくないので、最初は var n:String=""; で空欄にしているのですが、 if文で n="" とやっても判定されません。 数字を一旦入力してDELキーで数字を消して空欄にしても同じです。 テキスト入力やStringにおいて ="" で定義したものは =""ではないのでしょうか?
171 :
169 :2009/02/16(月) 16:05:31 ID:zUdKOiSX
n=="" の間違いです。すいmせん。
>>170 =""は""のはず。
スコープが間違ってないか、参照している変数が間違ってないかなど
trace()でまずは確認をしてみては?
173 :
168 :2009/02/16(月) 16:39:23 ID:zUdKOiSX
上のコメントのナンバリング169じゃなくて168でした、すいません。
>>172 ありがとうございます。解決いたしました。
if文で==""を跳ねたあとにも別の判定でgotoAndPlayを
実行していたので後ろのif文でOK判定が出たら進んでしまうようでした。
FlashDevelop (3.0.0 RC1)、Flex3 SDK (3.3.0.4589)、XP SP3 にて作成しております。
AS3で動画プレイヤーを作成しようと思い、とりあえず再生のみ実装した状態で
Youtubeの動画ダウンロードし、再生テストを行ってみたのですが、
Youtube上での再生に比べて、カクカクした再生になってしまいます。
スペックの高いPCでは両者とも特に問題ないのですが、低スペックPCではカクカク度合いの差が顕著に現れるようです。
パフォーマンス上問題となる記述がありましたら、指摘願います。
テストに使用した動画
ttp://www.youtube.com/watch?v=tDqGiEdTyOg&fmt=22 package player
{
import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.net.*;
public class Main extends Sprite {
private var connection:NetConnection;
private var videoStream:NetStream;
private var video:Video;
private var tf:SoundTransform;
public function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
175 :
174 :2009/02/16(月) 22:40:37 ID:nAJ/W0m7
private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); connection = new NetConnection(); connection.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); connection.connect(null); } private function netStatusHandler(e:NetStatusEvent):void { switch (e.info.code) { case "NetConnection.Connect.Success": stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.quality = StageQuality.BEST; videoStream = new NetStream(connection); video = new Video(); video.width = 640; video.height = 360; video.x = 0; video.y = 0; video.smoothing = true; video.attachNetStream(videoStream); stage.addChild(video); tf = new SoundTransform(); tf = videoStream.soundTransform; tf.volume = 0.5; videoStream.soundTransform = tf; videoStream.play("test.mp4"); } } } } 以上です。
フラシャーな人はデザパタとかアルゴリズムとかちゃんとやってますか as上がりはそういう本皆無だから大変そう
デザートのリンゴがなんだって?
>>176 俺はjava / C++上がりだけど、デザパタとかやってないね。
だって面倒じゃん。そういうきっちりした事したくないから
FLASHやってるんだもん。
シングルトンとかASでもがんばれば出来るけどさ、作っておけば
使い回し出来て資産もたまって、あとになるほどウマーなのは
知ってるけどさ。
179 :
Now_loading...774KB :2009/02/17(火) 00:03:04 ID:EWV1sOGe
ユーザーに外部の画像ファイルを任意に開いて貰いたいのですが、 こちらでスクリプトにあらかじめ開かせるファイル名を記述しないで開かせるというのは AS3でどうすればできますか?
外部の画像ファイルってユーザのローカルPC上の? それともサーバ上の? FileReferenceクラス または 外部ファイル読み込み で調査すれば情報が見つかるかも
181 :
Now_loading...774KB :2009/02/17(火) 02:42:34 ID:SPQyJ3QZ
ローカルPC上ですけど、 ググってもファイル名を記述しておいてそれを読み込むという形なんですよね。 case1.jpgみたいな。これだとユーザーにいちいち画像ファイルの名前を変えて このフォルダにいれてくださいねってやんないといけないです。
>>176 英語だけど
「Advanced ActionScript 3 with Design Patterns」
はいい本だぜ
>>181 テキストフィールドに記述した文字列を
読み込むファイル名に指定するとかできないの?
184 :
Now_loading...774KB :2009/02/17(火) 13:32:30 ID:8QUL+1yf
>>183 ちょっとユーザーに負担は減るかもしれないけど50歩100歩ですよね。
もしFlashで製作中にファイル開こうと思って
テキストフィールドに文字列を記述して
ファイル名を読み込む製品だったとしたら…。
>>181 普通にAirならできるんじゃない。
AS3 Air ファイルの操作でググレばいっぱい出てくると思う。
>>178 >>182 どうもです
知ってはいるけど今やることもないかな…とか業務に忙しいとかでしょうかね
今後as3に見られるようにもっと言語が固くなってくとしたらやっといたほうがいいのかなと思い始めてまして。
英書あるんですね!読んでみます。
187 :
Now_loading...774KB :2009/02/18(水) 00:03:37 ID:TYhwfq5U
addChildAt()の使い方で困っています。 環境は、WinXP-ProでFlashCS3-ProのAS3.0です。 1秒毎にMC内に別MC(HaikeiStar)を子としてランダムな位置に500個設置するため、 for (id=0; id<500; id++) { var tmpMC0:MovieClip=new tmpClass0 as MovieClip; // //ここでランダムな位置と大きさと透明度を設定 // this.addChildAt (tmpMC0, id+1); //配置インデックスは1より } を書きました。目標としては1秒毎に再描画され、この500個を前とは別の位置等で出現させたいの ですが、時間経過と共に子が増えていく一方です。 本などでは、addChildAt(mc, 100)などとインデックス位置を指定すると、既に100番目に別の子供 が居る場合には前の子が消されて新しい子が配置される(上書き?)ということですがその通り になりません。 考えられる原因と対策をお願いします。 なお別案として、一旦全部消して再配置する意味で for (var id=0; id<500; id++) { this.removeChildAt (1); //配置インデックス1を500回消す } を試しましたが、これだと RangeError: Error #2006: 指定したインデックスが境界外です。 になります。
>本などでは、addChildAt(mc, 100)などとインデックス位置を指定すると、既に100番目に別の子供 >が居る場合には前の子が消されて新しい子が配置される(上書き?)ということですがその通り >になりません。 ならないと思った。ずれるんじゃない?
AS3.0 コンテクストメニューで「画質」▼→低中高。 これと同じ動作をカスタムメニューに入れたいんだけどどうやればいいか ヒント下さい。(二段階にメニューを構築したい) カスタムメニューは自分で作る事は出来ます。
>一旦全部消して再配置する意味で この消し方だとforの最後に残るのがインデックス0の要素だから removeChildAt(1); しても、1番目は空っぽだよ、というエラーではないかと。 for (var id=0; id<500; id++) removeChildAt(0);
>>188 すいません。勘違いしていました。
既にある場合は後ろにずれます。
>>190 あー確かに。でも、インデックス0には共通のオブジェクト(絵)を配置しているので
これは消せないです。
今やったのですが、一旦全部消すことをせずに this.getChildByName(名前).x
などでプロパティ変更することでOKでした。
有難うございます。
>>192 インデックス0が対象外なら
for (var id=1; id<500; id++) removeChildAt(1);
for (var id=0; id<=500; id++) removeChildAt(1);
for (var id=499; id>0; id--) removeChildAt(i);
とかさ。
あんましよくないけど。
AS2での深度とAS3での表示リストは全く違う 深度管理では空きの深度があるけど、表示リストの場合は自動的に 前つめになる(空きは無い) for文で削除が関与するときにnumChildrenを使うときは要注意
>>179 FileReferenceオブジェクトを作ってリスナーを登録
FileReference.browse()
FileReference.load()
イベントリスナーでコンプリートきたら
FileReference.data
にByteArrayで入ってるからそこから読めばおk
197 :
Now_loading...774KB :2009/02/18(水) 17:11:09 ID:5JjW5ZLS
環境:WinXP-ProでFlashCS3-ProのAS3.0です。scaleXとscaleYが作用せず困っています。 ステージに配置したMCインスタンス(名前:shipM ←Matrixクラスでの変形対象)の大きさをムービー 開始時に1/10に変更しようとコンストラクタで public function AS3_ShipForm_01 () { this.shipM.scaleX=0.1; this.shipM.scaleY=0.1; // //Matrix操作 //mtr = shipM.transform.matrix; // ・・・ としたのですが、大きさが変化しません。 試しに、this.shipM.scaleX=1000; としてもX方向の寸法はそのままです。 どうすべきでしょうか? Matrixクラスを併用するとMCプロパティ設定(インスタンスの大きさ設定)は 無効になるのでしょうか?
>//mtr = shipM.transform.matrix; って何?順番変えてみれば?
今晩は。質問失礼いたします。 外部から画像を読み込んでいるのですが、それを ステージに既に配置してあるテキストボックスの下で、 なおかつ 既にステージに配置してある背景画像よりは上に出したいのですが、 表示順序が上手くいじれず呼び出した画像が一番上にどうしても表示されてしまいます。 どう書けば上手く行くか分かる方はいらっしゃるでしょうか…!
ASのバージョンはいくつさ
201 :
199 :2009/02/18(水) 18:47:57 ID:m4fsEnEs
失礼いたしました、ASは3です! 因みに画像呼び出しは var img1:Loader = new Loader(); img1.load(new URLRequest("画像アドレス")); addChild(img1); という感じで書いてます。 宜しくお願いします。
>>198 あー、すいません。説明不足でした。
mtr = shipM.transform.matrix; のmtrとは、コンストラクタの前で var mtr:Matrix; と宣言
したものです。本来 var mtr:Matrix = shipM.transform.matrix; と一気に書きたいのですが、
これだとエラーになるので分離して書いています。
this.shipM.scaleX=0.1; を mtr = shipM.transform.matrix; の後の方に書きましたが変化
はありませんでした。また、Event.ENTER_FRAME の関数内に置いても駄目でした。
どうしたものでしょうか?
>>201 addChild(img1);
の後で
addChild(テキストボックス);
で深度を調整してやればいけんじゃないかな
204 :
199 :2009/02/18(水) 19:59:13 ID:m4fsEnEs
>>203 おお…!有難うございます、助かりました!
>>202 です(自己レス)
小細工的ですが、 mtr.scale(0.2, 0.2) で縮小できました。ただし、これだと
MCの基準点縮小ではなくMCの左上を基準に小さくなりましたので、mtr.translate();
で場所を調整しました。
scaleXは色々試しましたが駄目でした。
206 :
Now_loading...774KB :2009/02/18(水) 23:40:15 ID:RDxLiEQ0
質問です AS2で書いてます。 setTimeout()で仮に下記のような場合、 ID=setTimeout(hogeFuntion,3000) hogeFuntionに引数を渡した状態でhogeFuntionを呼び出すにはどうすればいいでしょうか? たとえば、hogeFuntion(hoge)みたいな感じにです。
>>206 FLASHのヘルプって、結構、役に立つんだぜ。まずはヘルプ検索。
functionReference:Object - 実行する関数の名前。引用符や括弧を使用しないでください。また、呼び出す関数にパラメータを指定しないでください。たとえば、functionName を使用します。functionName() や functionName(param) は使用しないでください。
delay:Number - 関数が実行されるまでの遅延時間 (ミリ秒単位)。
args:Object - 関数に渡すゼロ個以上の引数 (複数の引数はコンマで区切ります)。
var my_timedProcess:Number = setTimeout(my_delayedFunction, 2000, "two second delay");
function my_delayedFunction (arg1) {
trace(arg1);
}
208 :
Now_loading...774KB :2009/02/19(木) 00:03:21 ID:lFwRciuU
>>208 モーショントゥイーンかな。
もっと細かく制御するなら、MC(ムービークリップ)を複数個置いて、それらの
透明度alphaを0にしてMC間を結ぶ線を引く。そして、MCを振動させれば線自体も振動する。
つまり右の感じ: ○━━━━━━○
>>208 これはね、script制御ではないよ。
文字のラインがflashのペンツールで書いたっぽい雰囲気だから
3,4フレームくらい使って微妙にずれた文字を手書きしてるだけだね。
それらのフレームを往復再生させるか、
フレームを反転させてケツにくっつけるだけ。
シェイプトゥイーンを使ってるかも知れない。
処理の一般的な名称は聞いたことない。
ぶるぶる文字でしょう
213 :
Now_loading...774KB :2009/02/19(木) 07:38:35 ID:2bW4/+2R
>>209-212 ありがとうございました。
なるほど。ズレた画像をコマ送りしているんですね。
214 :
Now_loading...774KB :2009/02/19(木) 08:48:06 ID:l+ZvQ4gp
>>207 おお!ありがとうございます。
助かりました。
これからはヘルプできるだけ参照するようにします。
215 :
Now_loading...774KB :2009/02/19(木) 14:46:29 ID:F8oIDZWf
「もし、変数 val1〜val100までの変数が、全部trueだったらファンクションAを実行」 という条件分岐を最も簡潔に書くとどうなりますか。
>>215 その前に変数val1-100は配列にしようぜ
配列にする forループでfalseがあったらbreakかreturn
>>178 残念ながらシングルトンに関しては
もちろん作れなくは無いが、C++のようにSingletonテンプレートクラスが
作れないので、クラスごとにシングルトンのコードをコピペしなきゃならない。
それはそうと、privateやprotectedのコンストラクタが認められないのは何か理由が
あるんだろうか?
219 :
Now_loading...774KB :2009/02/19(木) 16:37:58 ID:dYT4F0qQ
WinXP-ProのFlashCS3ProのAS3.0です。 (何か余計なキーを押したらしく)ASファイルのコーディングで上の自動フォーマットボタンを押すと、 次の行の近くに自動フォーマットのエラーがあります ・・・〜・・・ のメッセージが出ます。 しかし、この周囲を見渡しても特に間違いはなく、念のため「・・・〜・・・」の行の周囲の行を含めて 消して再度自動フォーマットボタンを押しても、消した次の行で同じメッセージが出ます。 考えられる原因は何でしょうか? 過去に作った問題ないASファイルでも同じメッセージが出ます。
220 :
Now_loading...774KB :2009/02/19(木) 16:45:59 ID:F8oIDZWf
>>219 自動フォーマットなんかに頼ってることが一番の問題の原因だと思います
>>215 arrayに変数を入れといて
var i:int = 0;
for each(var val:Boolean in array) i += val;
if (i == array.length) functionA();
223 :
Now_loading...774KB :2009/02/19(木) 17:42:06 ID:F8oIDZWf
Boolをオートキャストで加算って、、、 しかも変数2つって、、、 必ず全てのインデックス分加算処理を行ってから判定するなんて、、、
無駄なレスより役に立つ
一行 if (array.sort()[0]) functionA();
>>226 それは気づかんかったわw
まあ、オーソドックスな方法は
var exe:Boolean = true
for each(var val:Boolean in array)
if ( !val ){ exe = false;break;}
if (exe) functionA();
こんなところでしょうなあ。
行数稼ぎたいのか処理速度を稼ぎたいのかで変わってくるよね。
>>222 型変換のコスト
>>226 ソートのコスト
>>227 forループ内でifするコスト
俺なら速度重視で
Booleanじゃなくてintかuintのvector配列
intかuintの1か0でtrue/falseを表す
配列要素をループで加算
総和で判定
ってするだろうけど、ごめん、vector使った事無いんでサンプル書けない。
for(var i:Number = 0;i < array.length;++i) { if(!array[i])break; } if(i == array.length) { funcA(); } 無難かな……ちょっとiのスコープに自信ないが確かいけたはず
>>229 Numberのカウンタは効率が悪いとどこかで見た気がする。
intにできるところはintにすべし、とのことだった。まああたりまえだが。
>>226 はネタとしては面白いけど毎回ソートするってのはどうも・・
それに配列の順番も変わるという副作用つきだ。
232 :
Now_loading...774KB :2009/02/19(木) 23:31:01 ID:l+ZvQ4gp
>>219 全角スペース入ってるかも。
俺もたまにそれやるから、エラー出た行を
一旦全部消して書き直すと出なくなること多い。
Numberは遅いね。あと、
var len:int = array.length;
for(var i:int = 0;i < len; i++)
みたいにarray.lengthを移した方が速いです。
>>230 やってみないとわかんないなぁ、やれってか?
100個ぐらいのループだと差が出なさそうだなぁ、PC速いし。
ユーイント使え
stopAllSounds(); で止めた音楽を再び再生するにはどうすればいいですか?
AS3で外部画像を読み込んで座標を指定して表示させているのですが、同じ画像を違う座標でいくつも表示させたくて、でも座標をずらして記述しても、前述のものが上書きされてしまうようで複数表示が出来ません。 なので今は表示させたい個数分だけ変数を作り、Loaderで都度画像のアドレスを読み込んでいます。 どうにかうまいやり方はないでしょうか。 宜しくお願いいたします!
>>230 やってみた。
// array
var a:Array = new Array();
for (var i:uint = 0; i < 100; i++) a.push(i&1);
var sum:uint = 0;
var st:uint = getTimer();
for (i = 0; i < 100; i++) sum += a[i];
var et:uint = getTimer();
if (sum == 100) trace("execute funcA()");
trace("dt = " + (et - st));
// sort
var s:Array = new Array();
for (i = 0; i < 100; i++) s.push(i&1);
sum = 0;
st = getTimer();
var ret:uint = s.sort()[0];
et = getTimer();
if (ret) trace("execute funcA()");
trace("dt = " + (et - st));
手元のPCではarray足し算だと0ミリ秒、sortすると2ミリ秒。
>>226 みたな記述は面白くて好きだけど遅いですね。
ちなみに要素数を1000だと195ミリ秒。
ただ、この例だと配列の中身は0101010...なんだけど、0だけとか
1だらけにするとsort()も数ミリ秒レベルになったけど、
前半500要素を1、後半500要素を0のデータにしたのをsortしたら350ミリ秒に。
>>236 静止画像だよね?
var bmd:BitmapData = new BitmapData(loader.width,loader.height);
bmd.draw(loader); //Bitmapデータに変換
var s0:Shape = new Shape();
var s1:Shape = new Shape();
//Shapeに画像を描きこむ
var g:Graphics = s0.graphics;
g.beginBitmapFill(bmd, null,false,true);
g.drawRect(0,0, loader.width, loader.height);
g.endFill();
g=s1.graphcis;
g.beginBitmapFill(bmd, null,false,true);
g.drawRect(0,0, loader.width, loader.height);
g.endFill();
これで静止画を表示するふたつのShapeができるから
座標を適当に設定してaddchildすればよい。
ただし、オリジナルの画像ファイルをネットからツモってくる場合はこの方法は使えないことがある。
240 :
237 :2009/02/20(金) 00:48:51 ID:n0EDCyUp
vector初体験。 // vector var v:Vector.<uint>; v = new Vector.<uint>(); for (var i:uint = 0; i < 1000000; i++) v.push(i&1); var sum:uint = 0; var st:int = getTimer(); for (i = 0; i < 1000000; i++) sum += v[i]; var et:int = getTimer(); if (sum == 1000000) trace("execute funcA()"); trace(et - st); // array var a:Array = new Array(); for (i = 0; i < 1000000; i++) a.push(i&1); sum = 0; st = getTimer(); for (i = 0; i < 1000000; i++) sum += a[i]; et = getTimer(); if (sum == 1000000) trace("execute funcA()"); trace(et - st); // array boolean var ab:Array = new Array(); for (i = 0; i < 1000000; i++) ab.push(true); // 最悪ケース st = getTimer(); for (i = 0; i < 1000000; i++) if (!ab[i]) break; et = getTimer(); if (i == ab.length) trace("execute funcC()"); trace(et - st); vectorだと11ミリ秒でarrayだと43ミリ秒。booleanで15ミリ秒。ちゃんとテストするなら何十回か繰り返して平均取るとかしないとダメなんだけど。true / falseの型変換とかif文でのチェックとかがもう少し重いかと 思ったけど、arrayの加算より速いのはなんで??なんか間違えてる?
forとfor eachの使い分けはみんなどうしてる? for(var i:int=0; i<arr.length; i++) for each(var i:int in arr)
>>240 arrayより遅かったらvectorの存在意義がないじゃないか。
arrayの実体は要するにStringをキーとするマップだからね。
もうちょっと効率のいいコレクションクラスを作れってんで
後からできたのがvectorてことじゃないかな。
243 :
237 :2009/02/20(金) 01:44:52 ID:n0EDCyUp
>>242 vectorが速いのは文句ないのです、気に入りました。
みんなPLAYER10をさっさと入れろと思いました。
arrayをuintで入れて加算するよりも、booleanをifで条件分岐
する方が速いのが妙だと思ったんですが、なるほど、arrayは
連想配列だから、uintからなんか変換&変換&算処理より、
booleanからの変換&ifのがコストがかからないってことかな。
244 :
236 :2009/02/20(金) 06:20:48 ID:IEsg0YTc
>>238 なるほど、こうするのですね。とても参考になりました。
有難うございます!
配列の中の数字が一番多いものから順に 並び替えをしたいです。 配列三つ作って、ひとつずつ中身を取り出して もし最初の数値より大きい数字だったら配列0の中身を置き換え… というのを配列の数だけfor文でまわしています。 もしかしてこれ、もっとあっさりかけますか? AS3です。
AS3です。 変数名自体に変数を使う、というのは不可能なんでしょうか。 また、 if(…){ }else{ } のような文で、ifとelseの中に同じ変数名を定義したら重複した名前の変数があるとエラーが出ますがこれは一体どうしたら…
>>246 >変数名自体に変数を使う、というのは不可能なんでしょうか。
配列アクセス演算子で検索
>一体どうしたら…
変数を if 文の外で宣言する
var a:uint;
if(…){
a = 1;
}else{
a = 2;
}
248 :
246 :2009/02/20(金) 10:11:50 ID:Np/QkVRd
>>247 やり方があるんですね、調べてみます。
定義を変数外でやれば良かったんですね、重ね重ね有難うございます!
>>245 配列3つってよくわからんが、配列の要素を並べ替えたいならsort
250 :
Now_loading...774KB :2009/02/20(金) 16:17:04 ID:ZHrNnPb7
FLASHから、getURLとかで別のフラッシュを開くときにフルスクリーンにしたいときってどうすればいいですか? ジャバスクリプト呼び出さんとだめなんですか?
自分自身ならフルスクリーン化可能 別のフラッシュをフルスクリーンで開くのは多分無理 フルスクリーンじゃなくて画面いっぱいのウィンドウでいいならjs
actionscriptにマウスを操作するようなライブラリ(JavaのRobotみたいなもの) ってありますか?どなたかご存知でしたらお願いします。
253 :
Now_loading...774KB :2009/02/21(土) 00:15:41 ID:u1qaRBAT
OS:WinXP-Pro,Mem=3GB,ソフト:FlashCS3-Pro(Player9.0,AS3.0) ステージ上に適当に重ねられた複数のMCをムービー開始時にswapChildrenAt()で(あるいは 他の方法で)自動的にソートするにはどうしたら良いでしょうか? 現在の例ならば、上からmc4, mc2, mc1, mc5, mc3 と5個無造作に重なったものを上から mc1, mc2, ・・・とソートする感じです。 よろしく願います。
>>253 ソートするルールを決めて
ソートするスクリプトを記述する
上記の例ならば、各mcのインスタンス名にある数値を取得して
その数値順に配置し直すスクリプトにすればよい
>>252 サイト開いたらflashで勝手にカーソル動かされて
変なとこクリックさせられたら怖いよねぇ
そういうのを望んでるのかな?
>>254 有難うございます。addChildAtの性格が分かれば、さほど難しくはなかったです。
for (var id=0; id<5; id++) {
this.addChildAt (this["mc"+(id+1)],0);//thisはステージ
}
を実行するとmc1が0に位置に行き、同じくmc2も0・・・ で、下への滑り込みを
繰り返して並べることが出来ました。
>>255 結構制約が厳しいからねえ。
絶対そんなライブラリないだろうし、作れないだろうと思う。
258 :
Now_loading...774KB :2009/02/21(土) 06:25:14 ID:Amk0DNZ1
よろしくおねがいしますーー classの中に自分で関数を定義して、使うのはできるのですが、Key.DOWNの中から 呼び出すと、undefinedになってしまいます。どうすれば、イベントリスナの中から 呼び出せますか?
259 :
Now_loading...774KB :2009/02/21(土) 06:36:53 ID:Amk0DNZ1
>258続き class Menu1 { static function main () { var app:Menu1 = new Menu1(_root); } function Menu1(path) { var keyListener_obj:Object = new Object(); keyListener_obj.onKeyDown = function() { switch (Key.getCode()) { case Key.UP : hoge(); break; } }; Key.addListener(keyListener_obj); } //関数 function hoge():Void{ return s; } }
260 :
Now_loading...774KB :2009/02/21(土) 10:42:38 ID:eJq84mWd
AS3.0、Flash・cs3です ブラウザサイズ変更時に、画面中央にムービークリップを常に置いておく方法で 中央配置したいムービークリップをmcとして stage.addEventListener(Event.RESIZE, r); private function r(event:Event):void { if(stage.stageWidth > 600) { this.x = stage.stageWidth / 2 - mc.width / 2; } if(stage.stageHeight > 600) { this.y = stage.stageHeight / 2 - mc.height / 2; } } この様にしていたのですが、この方法だとマウスでブラウザサイズを変更した瞬間から常に中央位置へとmc動いてしまいます よくflashサイトで見かける動作で、ブラウザサイズを変えている(マウスドラッグ移動でブラウザを広げor縮めている)間は 中央に配置しているオブジェクトは動かず、サイズ変更が終わった(マウスの移動を止めた)時点で画面中央へ オブジェクトが移動して来るというのを見かけます あれはどうやって指定してあるのでしょうか?宜しくお願いします。
>>258 2.0だとその辺はDelegate使うのが一番楽じゃないかな
import mx.utils.Delegate;
class Menu1 {
//コンストラクタ
function Menu1() {
var keyListener_obj:Object = new Object();
keyListener_obj.onKeyDown = Delegate.create(this, function () {
switch (Key.getCode()) {
case Key.UP :
hoge();
break;
}
});
Key.addListener(keyListener_obj);
}
//関数
function hoge():Void {
trace("hoge");
}
}
>>260 タイマーでやってみたらどうですか?
timer = new Timer(500);//マウスでリサイズ後に呼ばれる用タイマー(数値はお好みで)
timer.addEventListener(TimerEvent.TIMER, onTimer);
stage.addEventListener(Event.RESIZE,onResize);
private function onTimer(e:TimerEvent):void {//リサイズ後
timer.stop();
//リサイズ処理
}
public function onResize(ev:Event):void{//リサイズ中
timer.reset();//タイマーリセット
timer.start();//タイマースタート
}
>>262 >public function onResize(ev:Event):void{//リサイズ中
FDで自動生成したらpublicになっちゃったけどprivateでおkです
private function onResize(ev:Event):void{//リサイズ中
>>260 javascriptのonRisizeイベントハンドラーは反応遅いから、それつかったらどうだろうか
こんな感じ
.js-------------
window.onresize = function() {
flashID.reSizeHandler();
}
ちょっと、困ってます。 FirefoxのFlashTracerが動かなくて困ってるんです。 こんなエラーが出てます。 flashlog.txt file does't exists. Open settings dialog first. mm.cfgはこんな感じ ErrorReportingEnable=1 TraceOutputFileEnable=1 flashlog.textにはちゃんとtraceログが出力されてるけど、 Tracerに表示できないって感じです。 よろしくお願いします。
266 :
264 :2009/02/21(土) 15:01:23 ID:2HywzxUv
>>265 最初にflashlog.txtがある場所を指定しないといけないんじゃなかったっけ
>>267 なんとなく原因がワカタ
C://直下に「flashlog.txt」をコピペしてみて、試したら。読み込んだ。。。orz
原因はたぶんパスが
C:\Documents and Settings\日本語\Application Data\Macromedia\Flash Player\Logs\flashlog.txt
ってなってて、日本語があるからかも。。
どうしろと。。。
269 :
265 :2009/02/21(土) 15:52:17 ID:2HywzxUv
271 :
Now_loading...774KB :2009/02/21(土) 17:36:40 ID:cFPSqgTs
質問です。 AS2.0で書いてます。 重力表現で、完全に動きが止まってから、mcのonEnterFrameを削除したいのですが、 if文をどう書いたらいいかわかりません。 どうしたらいいでしょうか。 var gravity:Number = 9; var bounce:Number = -0.7; var vy:Number = 0; function mc_Gravity(mc:MovieClip, Bottom:Number):Void { var radius:Number = mc._height/2; mc.onEnterFrame = function():Void { vy += gravity; this._y += vy; if (this._y+radius>Bottom) { this._y = Bottom-radius; vy *= bounce; } }; }
1フレームごとの移動量を別途計算して 一定移動量以内の場合停止したと見なせばよい
>>272 それだとバウンドした後の頂点で止まってしまう。
バウンドのvy *= bounce; 後に
vyがある小さな値(0.01とか)より小さいかどうか判定すればいいんでないか?
ただし、vyは正負が反転してるので、
絶対値をとるか、-0.01より大きくなったらとするか、
そんな感じかね。
一つ一つ順を追って解決していけばいいだけの話 いっぺんに行なうから混乱するんだ
>>274 混乱なんてしてないが?
完全に動きが止まるのは必ずバウンドの際。
反発の速度が極小になったかどうかを判定するだけだから、
概念としてもわかりやすいと思うが?
276 :
Now_loading...774KB :2009/02/21(土) 19:13:01 ID:cFPSqgTs
>>273 さんのアドバイスをもとに、ちょっとコード変えたら何とか出来ました。
スマートじゃないですけどw
ありがとうございました。
var gravity:Number = 9;
var bounce:Number = -0.7;
function mc_Gravity(mc:MovieClip, Bottom:Number):Void {
var radius:Number = mc._height/2;
var vy:Number = 0;
//追加した部分
var old_y:Number;
//-------------
mc.onEnterFrame = function():Void {
vy += gravity;
this._y += vy;
//追加した部分
if ((old_y-this._y)-(this._y-old_y)==-10.5) {
delete this.onEnterFrame;
}
//-------------
if (this._y+radius>Bottom) {
this._y = Bottom-radius;
vy *= bounce;
old_y = this._y;
}
};
}
if ((old_y-this._y)-(this._y-old_y)==-10.5) {
を数学的に式の展開とかしたら
if (old_y-this._y == -5.25) {
になると思うんだが、それはともかく。
いくつか問題がある。
まず、Numberは一定の値と比較するのはまずい。
必ず誤差がが含まれる。
-5.250000000000000001みたいなことがあり得る。だから
==で比較しちゃダメ。
あと、
>>273 がいう
>>272 がまずい点は、跳ね返りのタイミングで
移動量が0や小さな値になる場合があるってこと。
1フレ目:| ←○
2フレ目:| ○→
跳ね返って来た場所が1フレ前と距離○1個分だけど、移動した距離は
左側の板まで行って帰ってきた分だから単に位置の差だと正しくない。
278 :
Now_loading...774KB :2009/02/21(土) 21:06:34 ID:Amk0DNZ1
>>261 ありがとうございました。きっかけはわかりました。
mtascでやっているので、delegateクラスをみつけてきてやっているのですが
まだできていません。
>>278 delegateを使う必要があるの?
class Menu1 {
static function main () {
var app:Menu1 = new Menu1(_root);
}
function Menu1(path) {
var keyListener_obj:Object = new Object();
var me:Menu1 = this;
keyListener_obj.onKeyDown = function() {
switch (Key.getCode()) {
case Key.UP :
me.hoge();
break;
}
};
Key.addListener(keyListener_obj);
}
//関数
function hoge():Void{
trace("hoge");
}
}
280 :
252 :2009/02/21(土) 23:43:20 ID:Po/XtmxO
>>255 >>257 ありがとうございました。Flashで入力支援みたいなことってできるかなーと。
最近Flashでけっこういろいろやってみるのが楽しくなってきたのでw
多くの人がVM(というかFlashPlayer)は持っているのでアプリ配布しやすいですしね。
281 :
Now_loading...774KB :2009/02/22(日) 00:56:59 ID:XWXx11pz
環境:WinXP-ProでFlashCS3-ProのAS3.0です。 外部よりLoader(var swfLoader:Loader)で読み込まれたSWF内のフラグの参照がうまく 行かず困っています。 これは、アパートの部屋に引越して来た住人の旗の上げ下げを管理人の子供(mc1)を 使って確認するというものです。 入居する外部SWFを「external_1.swf」として、このフラグ(nextSeenF)の真偽はexternal_1.swf 内のMC(nextB)をクリックすることで切り替えます(入居人の子供で切り替わる)。 ASファイルでは、 var swfLoader:Loader = new Loader(); var loadEvt:Event; と宣言して private function initLoad_on (loadEvt):void { trace ("nextSeenF= "+loadEvt.target.content.nextB.parent.nextSeenF); } の場合は初期値のfalseが表示され参照出来るのですが、その次の記述では下のようになります。 private function mc1_click (loadEvt):void{//mc1を押す trace ("nextSeenF= "+loadEvt.target.content.nextB.parent.nextSeenF) // TypeError: Error #1010: 条件は未定義であり、プロパティがありません } まとめると、入居者が引っ越した瞬間はフラグ確認できるのですが、その後に管理人の子供 からは確認できない状況です。 どなかたアドバイス願います。
??おかしな点が色々あるような・・・? まずvar loadEvt:Event; この宣言は意味がないのでは? 察するにコードのどこかに (nextBのオブジェクト).addEventListener(MouseEvent, mc1_click); があるんですよね。ならば private function mc1_click(e:MouseEvent):void { trace(e.currentTarget.parent.nextSeenF); } でうまくいくと思いますが・・・
(nextBのオブジェクト).addEventListener(MouseEvent.CLICK, mc1_click); 失礼。訂正。
>>282 レス有難うございます。今回の模式図(?)は下のような感じです。
入居者SWF ・・・ ( ● ) 子供MC「●」を含んでいる
管理人SWF ・・・ [ ★ ] これも子供「★」をを含んでいる
これらは、外部SWF読み込みで
[ ★ ( ● )] の形になり、●(nextB)を押して入居者フラグをtrueにする → ★(mc1)を押して
管理人側から確認
という流れです。(nextBのオブジェクト).addEventListenerに関して言えば、これは●自身の
タイムラインに
this.addEventListener (MouseEvent.CLICK, this_click);
function this_click (mouseEvt:MouseEvent) {
MovieClip(parent).nextSeenF=true;
}
と書いてあり、mc1の動作とnextBの動作は完全に独立しています。
とりあえず、「var loadEvt:Event; この宣言は意味がないのでは? 」ということなので、
ここから修正してみます。
ああ、なるほど。ちょっと勘違いしていたようだ。 private function mc1_click (loadEvt):void{//mc1を押す trace ("nextSeenF= "+loadEvt.target.content.nextB.parent.nextSeenF) // TypeError: Error #1010: 条件は未定義であり、プロパティがありません } 多分、loadEvt.targetがswfLoaderと一致しないんでしょう。 trace(loadEvt.target as Loader);はnullとなるはずです。 private function mc1_click (loadEvt):void{//mc1を押す if (loadEvt.currentTarget!=swfLoader) return; trace ("nextSeenF= "+loadEvt.target.content.nextB.parent.nextSeenF) ; } としてみては?
286 :
Now_loading...774KB :2009/02/22(日) 06:46:46 ID:/E35eGfO
>>279 ありがとうございました。 あっさりできました。
var me:Menu1 = this;
>>285 どうも。
if文の中に trace ("不一致: "+loadEvt.currentTarget); を1行入れて試したところ、
エラーは何も出なかったですがフラグ情報も出ませんでした。
(追加のtraceでは 不一致: [object MC1] と出ます)。
別案として、var loadEvt:Event; の代わりに var loadEvt1:Event; を置いて、
private function initLoad_on (loadEvt:Event):void {} の中で loadEvt1=loadEvt; として
管理人の子供クリック private function mc1_click (mouseEvt:MouseEvent):void {}
で trace ("nextSeenF= "+loadEvt1.target.content.nextB.parent.nextSeenF);
とするとOKでした。
つまり、イベント情報オブジェクトを移し変えて参照する形です。
(余りスマートでは無いかも知れませんがw)
288 :
260 :2009/02/22(日) 22:46:58 ID:/uwA99JQ
>>262 >>263 教えて頂きありがとうございました。処理方法でちょっとこんがらかってしまって未だに実装できてませんが
javascriptで指定されてる可能性もあったんですね、そちらの方も調べてやってみようと思います
289 :
Now_loading...774KB :2009/02/22(日) 23:27:35 ID:DDcHG7iJ
フルFlashサイトとか作ってると、いつもメニューボタンのイベントハンドラメソッドに、 サイト内のあらゆる挙動のコードが集中してしまうんだが、 そんなもんかな? 俺の作り方間違ってる?
間違ってる
attachMovieでランダムに配置したMCを削除してから 別のフレームに飛にはどうしたらよいのでしょうか。 現状、attachMovieで配置したMCと 飛んだ先に配置してあるMCがステージ上で重なってしまうのです。 removeMovieClip();をどのように記載すればよいのか、教えて頂けますでしょうか? 作業環境:MAC OSX FLASH8
292 :
Now_loading...774KB :2009/02/23(月) 02:47:39 ID:6FUYdN4Q
attachMovieで作成したもんを配列に入れたらいい 削除はこんな感じ for each(var obj:Object in objArr ){ removeChild(obj) } 巻き添え規制食らって、携帯で打ってるから 辛いぜ
293 :
nagisa :2009/02/23(月) 04:21:23 ID:eS5s4xpt
質問です!Flash8使っています。フルスクリーン表示でステージがリサイズされたときの右上位置固定についてですが、その場合、MC名を仮に Migi とした場合で最右上から縦横に10pxの隙間をあけた位置で固定するには下記コードにどのように追加すればよろしいでしょうか? -------------------- myStageHeight = Stage.height; myStageWidth = Stage.width; resize(myStageHeight,myStageWidth); Stage.scaleMode="noScale" Stage.align = "TL"; myListener = new Object(); myListener.onResize = function() { myStageHeight = Stage.height; myStageWidth = Stage.width; resize(myStageHeight,myStageWidth); } Stage.addListener(myListener); function resize(H,W){ Line._width = W; Title._y = 123; Title._x = 166; parH = H/647; parW = W/1200; if(parH < parW){ haikei._yscale = parW * 100; haikei._xscale = parW * 100; }else{ haikei._yscale = parH * 100; haikei._xscale = parH * 100; } } --------------------
>>289 Flashに限らず、大概のプログラムでは、プログラムの挙動を制御するメソッドを集めたクラスを作って
メニューのハンドラからそれを呼び出す形にしたほうがいいね。こうすると、ツールボタンからも利用できるし
外部のプログラムコードから利用できるように改良することも容易になる。
それってもしやインターフェースのこと?
296 :
Now_loading...774KB :2009/02/23(月) 07:59:26 ID:vU0j0VHD
>>294 答えてくれてありがとうです。
そうすることでサイトの高速化がはかれたりするもんですかね?
297 :
Now_loading...774KB :2009/02/23(月) 10:06:31 ID:vU0j0VHD
質問す。 3つ以上の変数に同じ数字がかぶらないように、 乱数代入するにはどうすればいいんでしょうか? 自分は3つ変数作って、 変数AはMath.randomで乱数入れて、変数Bには変数A+1を、変数Cには変数B+1を代入して、 +1することで乱数の上限以上になった場合は1を代入する方法を取ろうと思ったのですが、 これでは完全な乱数ではないので、 なにか良い方法はないでしょうか?
黙っててもMath.randomが同じ値を引く確率はかなり低いと思うよ。 ちなみに乱数の上限は1だから、1を加算した時点で上限突破確実だよ?w
>>297 まあ、乱数自体が被ることはそうないと思うが、
整数に直した値が被って欲しくないとかならこういう手。
var i:int;
var ran:int;
var a:Array = new Array();
a[0] = Math.floor( Math.random() * 11 ); // 例えば0〜10なら。
for( i=1 ; i<3 ; )
{
a[i] = Math.floor( Math.random() * 11 );
if( a[i-1] != a[i] ) i++;
}
>>297 トランプのようにあらかじめ決められたカードを
十分にシャッフルして、上から3つとるなどすれば同じカードはでない。
1〜10の中から重複しない値を3つランダムなら、
[1, 2, 3, ...10]を十分にシャッフルして
[10, 2, 5, ...3]みたいにして、先頭から3つ[10,2,5]とすれば重複しない。
>>299 1つ前のとしか比較してないから、2つ以上前のとかぶる可能性アリ
整数のつもりなら
>>300 のやり方が一番スマートだと思う
302 :
Now_loading...774KB :2009/02/23(月) 16:45:47 ID:/vteKmUy
>>278 もう見てるかわからないけど・・・。
class Menu1 {
//コンストラクタ
function Menu1() {
var path:Object = this;//クラス内で変数にパス入れておく
var keyListener_obj:Object = new Object();
keyListener_obj.onKeyDown = function() {
path.hoge();
}
Key.addListener(keyListener_obj);
}
//関数
function hoge():Void {
trace("hoge");
}
}
}
多分これが一番簡単。
303 :
299 :2009/02/23(月) 19:25:57 ID:KIUz/Y0p
>>301 あー。ほんとだ。これはひどい。すんません。
直すとこんな感じですかね。(AS3前提)
var i:int;
var max:int = 10 + 1; // 例えば0〜10なら。
var a:Array = new Array();
var check:Array = new Array( max );
for( i=0 ; i<3 ; )
{
a[i] = Math.floor( Math.random() * max );
if( check[ a[i] ] == undefined ){
i++;
check[ a[i] ] = a[i];
}
}
>>300-301 > 十分にシャッフルして
具体的にはどうやるんでしょうか。思いつかないので教えてもらえると嬉しいです。
var a,b,c:Number; var loop:Boolean = true; while (loop) { a = Math.random(); b = Math.random(); c = Math.random(); if (a != b && b != c && c != a) loop = false; }
>>303 「Fisher-Yates」で検索
>>304 while(loop) → while(true)
loop = false; → break;
の方が自然
306 :
Now_loading...774KB :2009/02/23(月) 21:12:57 ID:2FYZSbIn
環境:WinXP-ProでFlashCS3-ProのAS3.0です。 外部よりLoader(var swfLoader:Loader)で読み込まれたSWFのフレーム操作が出来ず 困っています。 現在2つのSWF(AとB)があり、A→BでB[A]の形で読み込み、AのフレームをBより操作 しようとしています。つまり、B[A(1)] → B[A(2)] の形です。 ASでは、var tmpMC0:MovieClip=new MovieClip; として、これにイベント情報のオブジェクト var loadEvt1:Event; を tmpMC0=loadEvt1.target.content; で代入しています。 ここで trace ("totalFrames= "+tmpMC0.totalFrames); とすると、設定したフレーム数(5個) が表示され、正しく属性を見ていることが分かります。 しかし、 var frameNum:uint=1; tmpMC0.gotoAndStop (frameNum++); では確かにframeNumは増加しますが、Aのフレームが2に移動しません。 どうしたら良いでしょうか?
tmpMC0.gotoAndStop (++frameNum);
>>307 有難うございます。
前方でインクリメントをするんですね。
3個以上という前提を無視w
311 :
Now_loading...774KB :2009/02/24(火) 06:19:55 ID:IWbryFo0
MC内のダイナミックテキストで質問です。
WinXPでAS3.0(CS3)です。
http://uproda11.2ch-library.com/src/11161649.jpg のように長方形オブジェクトの
上のレイヤーにダイナミックテキストを置き、このMC自体を this.buttonMode=true;
で選択できるようにしました。
ところが、マウスを上に重ねるとダイナミックテキストの部分でマウスの指マークがテキスト
選択の縦棒(| テキストカーソル?)になり見た目に都合が悪いです。
どうしたら良いでしょうか?
小細工的にダイナミックテキストの上のレイヤーに透明グラフィックを置きましたが改善
されませんでした。
>>308 >>310 変数を配列にして、for文とかでループで100回させればおk
loopの値判定もな
要求にもよるが、例えば0-1000のランダム値を100個得たいとすると 1)1-1000を配列に格納して最低でも1000回のrandom呼び出しして頭から100個(安定) 2)ランダム値を100個分の配列に重複チェックしつつ格納(不安定) のどっちかになるんじゃないかな
1)はシャッフルの時のランダム呼び出しね
316 :
Now_loading...774KB :2009/02/24(火) 11:56:31 ID:hm5M2EDb
XP CS3 AS2.0で製作しているflashについて質問があります。 _root上のタイムラインに関数を作っているのですが それを1階層下のボタンインスタンスから呼び出す事が出来ません。 _root上から関数の実行は出来るのですが1階層下のボタンインスタンスから on(press)で実行させようとすると実行できません。 以下コード ============タイムライン上の関数======================= System.useCodepage = true; function funk(yomi) { _root.rink_mov.loadVariables(yomi); _root.rink_mov.onData = function() { dina_txt.htmlText = str; dina_txt.textColor = 0x0000AA; }; ===================================================== -------------ボタンインスタンスのコード------------------ on(press){ funk("rink.txt"); } いろいろ試してみたのですがどうも関数が実行されていないようなのです。 何故なんでしょうか?教えていただける方がおられましたら 教えていただけると嬉しいです。
>>361 on(press){
_root.funk("rink.txt"); // _rootが抜けてる
}
>>317 ありがとうございます!
動きました・・・・orz
319 :
Now_loading...774KB :2009/02/24(火) 17:45:50 ID:lt2Pia6E
suzukaというソフトがあるようだが、それで作ったのでは?
stage.displayState = StageDisplayState.FULL_SCREENに設定したとき、 stage.fullScreenSourceRectと実解像度のアスペクト比誤差によって上下(または左右)にバーが出ますよね? このバーの色を再生時間に応じて動的に変えたいのですがどうすれば良いでしょうか? 環境はFlexSDK3.3.0(AS3)、FlashPlayer10.0.12.36。IE7/Firefox3/Opera9.6/Safari3.2で表示出来るようにしたいです。
322 :
Now_loading...774KB :2009/02/24(火) 18:55:11 ID:rLlko2TG
初歩的な質問かと思いますがお願いします。actionscript3.0です。 配列に入っている物をランダムに取り出したいのです。 array[0] = "abc"; array[1] = "def"; array[2] = "ghi"; array[3] = "jkl"; この4つの中身を、 for(i=0; i<4; i++) for文で4回取り出す処理を繰り返し、array[?]が3→2→0→1や1→3→0→2とか、順番はランダムでも取り出す対象は重複しないようにしたいのです。 Math.floor(Math.random()*4)を使ってみてますが、他にそういった処理をしてくれる関数や方法などありませんでしょうか?
>>322 ちょっと前のレスに似たような質問が・・
てかこっちの方が簡単。取り出し順配列を作ってシャッフルするだけ。
>>315 ありがとうございます。選択不可でテキストカーソルは回避できました。
しかしながら、オブジェクト上の文字列にマウスがさしかかると指マークから
通常の矢印マークになります。
欲を言って申し訳ないですが、指マークのままにするにはどうしたら良いでしょうか?
>>322 こんな感じ?
//ランダムで取り出す用
var targetRandomArray:Array = new Array;
function setRandomArray( arr:Array ):void {
targetRandomArray = arr;
}
function getRandomArray():String {
var i:int = targetRandomArray.length;
var r:int = (Math.random()*i ) >> 0;
var retString = targetRandomArray[ r ];
targetRandomArray.splice( r , 1 );
return retString;
}
まうすもーどおんでいいのよ さあおいでおにいちゃん
>>323 ありがとうございます、読み直したら297の方の辺りで似たような内容であったようですね、失礼しました・・・。
>>325 ありがとうございます、書いて頂いたソースはまだ上手く認識できていませんが
これから調べながら参考にさせて頂きます、ありがとうございました。
>>327 あ、忘れたよ
setRandomArray(array);
trace(getRandomArray());
trace(getRandomArray());
trace(getRandomArray());
trace(getRandomArray());
こう使うのよ
329 :
Now_loading...774KB :2009/02/25(水) 03:19:02 ID:XxM0/nBg
環境:WinXP-ProでFlashCS3-ProのAS3.0です。 以前作ったFlash(メインのタイムラインフレームは1個のみ使用)にオープニング画面用 のフレームを前方に1個付けたところ、今まで正常に動いていたものがコンストラクタで 「TypeError: Error #1009: null のオブジェクト参照のプロパティまたは メソッドにアクセスすることはできません。」 のエラーが出ます。 なお、ASはドキュメントクラスとしてステージにリンケージしています。 デバッグモードで調べたところ、ステージ上に置いているMC(dispM)の行が問題を起こし ていることが分かりました。この行は、this.dispM.buttonMode=true; の書式でボタンモード を指定している箇所です。しかし、この行は以前の段階では何も問題を生じていません。 こういう場合(前方にフレームを付けた場合)どうすべきでしょうか?
>>329 第一フレームにオープニング用のMCが、
第二フレームにdispMがあるわけですね?
だとすると、ドキュメントクラスのコンストラクトの段階ではまだdispMオブジェクトが作られていないはず。
第二フレームに移った瞬間にdispMが作成されるはずなので、その時に、buttonModeを指定するよう
にする必用があると思います。
333 :
Now_loading...774KB :2009/02/25(水) 10:16:11 ID:xpJXXZ1K
あるムービークリップの中身を任意に差し替えるという関数もしくは クラスを作成しようとしています。(winxp+cs3+as2) 1) 外部から複数の画像(a.jpg, b.jpg, c.jpg)をloadmovieで配列に格納します 2) (1)で格納する際、画像処理を施します 3) 新規に空のMCを作成し、その中に(1)で読み込んだ任意の画像を表示する 4) 任意のタイミングで表示する画像を切り替える 漠然と上記のようなことをしたいのですが、実際にどう書いたら良いか 分かりません。(1)だけ考えても、loadmovieで読み込んだMCを配列に入れる際 ターゲットパスに表示されてしまいます。配列にだけ格納して「ライブラリ」のように 使いたいのですが、このような仕組みを実現するにはどうすれば良いでしょうか。
質問はもっとしぼって 実際に試してみたコードを記述
>>330 ,332
なんでー?
>>325 が大正解に見えるんだけど、他にやり方あるの?
AS1.0の潮気を抜いて静的関数にしろとか?
>>336 わからん。合ってる気がするけど。
どこが問題?
338 :
Now_loading...774KB :2009/02/25(水) 14:04:51 ID:l96E+MRq
>>337 まず関数の意味を使う意味を覚えて来い・・・。
あらら誤魔化しちゃった。 思い違いなら認めようよ。
>>325 、
>>328 の問題点
・ローカル変数にアクセサを定義する意味不明さ
・ディープコピーのつもりなんだろうが、setRandomArray()でやってるのはシャローコピー
・寡聞にして右に0ビットシフトというテクニックは知らない
・getterで特に必要もないのに、spliceを使う行儀の悪さ
・getRandomArray()でStringを返すセンスの無さ
・シャローコピーとspliceのコンボにより、
>>328 の後、元の配列は完全に破壊される
元配列破壊してどうすんだよw
>setRandomArray()でやってるのはシャローコピー やっぱそうなのか。 AS3.0詳しくないから、もしかしたら3.0では挙動が変わったのかと思ってしまった。
えっ?
>>331 そうです。dispMは第2フレに置いてあり、このフレで有効です。
ASファイルのコンストラクタの記述を丸ごと第2フレのフレームアクション欄に
移動したら上手くいきました。
有難うございます。
それシャローコピーにも至ってないよ 参照まるごと他の変数に代入してるだけ シャローコピーとかディープコピーとかは別の話
「関数の意味を使う意味」を覚えないとダメらしいぜ
package //namespace { public class RandomIndexProvider { private var _remains:int; private var _ar:Array = new Array(); public function RandomIndexProvider($size:int) { for (var i:int=0;i<$size;++i) _ar.push(i); _remains = $size; } public function getNextIndex():int { if (_remains==0) return -1; var i:int = Math.random()*_remains; var a0:int = _ar[i]; var a1:int = _ar[_remains-1]; _ar[_remains-1] = a0; _ar[i] = a1; --_remains; return a0; } public function reset():void { _remains = _ar.length; } } } 重複なしのランダムなインデックス数列を取り出せるクラスを作ったほうが汎用性があるので、このように つくってみた。
で、これがテストプログラム。 var n:int = 10; var rip:RandomIndexProvider = new RandomIndexProvider(n); var s:String =""; var i:int; for (var u:int=0;u<10;++u) { for (i=0;i<n;++i) { s+=String(rip.getNextIndex()); s+=" "; } trace(s);rip.reset();s=""; }
実行結果。まあ、よさそうな感じ。
4 0 5 3 6 7 8 9 1 2
0 5 8 2 3 6 1 4 7 9
3 8 9 7 0 5 6 4 2 1
9 8 0 1 3 5 7 4 2 6
1 4 5 7 8 0 2 6 9 3
8 7 0 2 9 4 1 5 3 6
6 4 7 3 1 5 2 8 9 0
言い忘れたが、これは
>>322 に対するレスね。
array[0] = "abc";
array[1] = "def";
array[2] = "ghi";
array[3] = "jkl";
var n:int = array.length;
var rip:RandomIndexProvider = new RandomIndexProvider(n);
for (var i:int=0;i<n;++i)
trace( array[rip.getNextIndex()] );
350 :
Now_loading...774KB :2009/02/25(水) 23:00:55 ID:vRu4XfiR
AS2.0で検索機能を作ろうと思っているのですが、 テキスト入力で検索したい文字を打ち込んで、検索ボタンを押すと、 外部テキストから読み込んで、その打ち込んだ言葉がテキストエリアに出力されるようにしたいのですが、 どうすれば実現できますでしょうか? 例 [ a ] 検索ボタン [ aia aaa axa ] などといった感じです。
まずは作ってみて わからない部分を質問
352 :
Now_loading...774KB :2009/02/25(水) 23:48:01 ID:vRu4XfiR
>351 作ってみて、外部テキストの読み込みとボタンを押して 外部テキストの表示は出来るのですが、検索のやり方だけは分からないんです
>>352 検索の対象は何?
読み込んだ外部テキスト?
それとも検索語にマッチした名前のファイルを読み込むの?
そのへんももっと具体的に。
354 :
Now_loading...774KB :2009/02/25(水) 23:58:42 ID:vRu4XfiR
>353 外部テキストです。 先に、外部テキストに何か文字を入れておいて 例(aa) 検索でaを検索とすると、aという言葉が入っている言葉を表示されるようにしたいです。 もちろん、aだけではなく、bを検索とすると、bが表示といった感じです。
1.外部テキストの各文字を配列に入れておく 2.配列内で検索条件に合う文字列の要素を取り出す まずはここからやってみて
>>347-
>>349 なんでこんな訳わからんモノ作っちゃうんだよ…
別に何の汎用性も無い使いにくいクラス設計するより
配列シャッフルする関数一つ実装した方が遥かにシンプルで汎用性あるんだよ
>>300 でとっくに答えが出てるって早く気づいた方がいい
じゃあ簡単なシャッフルのスクリプトを書いてみよう!
358 :
325 :2009/02/26(木) 01:13:31 ID:emsJd76P
>>340 改良してみました。
var arr:Array = new Array("abc","def","ghi","jkl");
var randomArr:Array = getRandomArray(arr);
for each( var obj:Object in randomArr ){
trace(obj);
}
function getRandomArray( arr:Array ){
var retArr:Array = new Array();
var tempArr:Array = new Array();
//配列を入れなおす
for each( var obj:Object in arr ){
tempArr.push(obj);
}
//tempArr→retArr
var r:int
for (var i:int = 0; i < arr.length ; i++){
//右に0ビットシフトして整数をとりだす。(Math.floorより早いらしい。)
//
ttp://actionscript.g.hatena.ne.jp/ConquestArrow/20070621/1182359767 r = (Math.random()*tempArr.length ) >> 0;
retArr[ i ] = tempArr[ r ];
tempArr.splice( r , 1 );
}
return retArr;
}
というよりは、まさにシャッフルするためのコードなんだが。 例えば、1000個の配列から重複なしで任意の個数を取り出したいときなどを考えればいい。
昔作ったポーカーゲーム用のシャッフルルーチン多分解りやすいと思う これは1回しかシャッフルしてないけどたくさんしたければ、下の方のfor文を何回か行えばいい package { //0から指定数値-1までの値をシャッフルした配列を返す public class Shaffle{ function Shaffle(){ } public function makeShaffle(maxS:uint):Array{ var sar:Array = new Array(maxS); var keep:uint=0; var terg:uint=0; for (var i:uint=0; i<maxS; i++) { sar[i] = i; } for (i=0; i<sar.length; i++) { keep = sar[i]; terg = Math.floor(Math.random() * sar.length); sar[i]=sar[terg]; sar[terg] = keep; } return sar; } } }
指定された値までのシャッフルされた配列が返るので、 それの頭から使えばいい
ソースを読んでいてアレ?って思うようなソースは書いてはいけない 最適化を行う前に解りやすいソースを書くことを心がけるべきだし、 変に早くなるとか誤解してコンパイラの最適化を阻害するようなことをしてはいけない
意地悪なのかバカなのかわからんなもうw //シャッフルする関数 function shuffle(arr:Array):Array { var cnt:int = arr.length; while (cnt) { var i:int = Math.random()*cnt; var o:* = arr[--cnt]; arr[cnt] = arr[i]; arr[i] = o; } return arr; } //取り出す順用の配列を作る関数 function createOrder(arr:Array):Array{ var cnt:int = arr.length; var order:Array = []; for(var i:int=0;i<cnt;i++)order.push(i); return order; } //元の配列 var arr:Array = ["A","B","C","D","E"]; //取り出す順を管理する配列作ってシャッフルしておく var order:Array = shuffle(createOrder(arr)); //取り出す for(var i:int=0;i<order.length;i++)trace(arr[order[i]]); trace(arr,"@",order);
ajaxやってるとArray.prototypeに仕込んで使いたがる人も多いかな 「Array.prototype.shuffle」でぐぐればなんぼでもでてくるよ
>>358 そんな小手先の整数変換の最適化うんぬんの遥か以前に、
無駄に配列作ったり、コピーしたり(しかもシャローコピー)、spliceしたり
してる部分の方がよっぽどボトルネックになってるんだってば。
色々テストしたけど、シャッフル部分の速度はどれも大して変わらんな。 spliceは激遅だが。 intとかuint型でfloorとか右シフトって必要あんの?
>>365 おのおのコンセプトが違いますからね。悪いコードとはなから切り捨てず、ソースからそのコンセプトを読み取るのも大事。
たとえば、10000個の集合から10個程度の要素をランダムに取り出すことを考えた場合、
>>365 のコードはいちいち10000個すべてシャッフルするので無駄が多すぎる、
という観点から書いたのが、
>>347 のコード。もちろん、すべてシャッフルする場合は
>>365 には劣るが
かといってそれほど非効率というわけでもく、リシャッフルの実行コストもほぼ皆無、という具合。
部分シャッフル、全シャッフルのどちらにも対応できるので汎用性はより高いだろう、
と判断したわけです。
>>368 半分はプログラマの自己満足かもね。
なんか質問者そっちのけ思わぬシャッフル祭りになってしまったな。 しまいにゃ、プログラム板行けよ、て言われそうだ。
>>368 右シフトはCでプログラムやってる人は定石のように使う手だからなぁ。
最近はそこまでカチカチにチューニングすることも少なくなってきたけど。
>>369 そんなケースなら大抵、randomを10回呼ぶだけで済むでしょうがw
10000個から10個を絶対に重複を許さずにランダムに取り出すなんて特殊ケースは
全く別に考えるべき問題で、汎用的というよりはただの中途半端だと思うんだけど。
>>371 右シフト自体のことじゃなくて、
int型で「
>>0 」って何か意味あるの?
>>372 ひとつのクラスで両方カバーできた方が良い、というのが私の考え。
用途の応じて個別に作った方が良い、というのがあなたの考え。
どちらも否定はできないでしょ。
ただ、randomを10回呼べばいい、というのは何かの冗談か?
375 :
Now_loading...774KB :2009/02/26(木) 03:53:59 ID:p1Stiz2i
>>373 すまん、よく見てなかったが
>>358 のことなんだな。
int型の変数に渡す前に明示的に型キャストしてるんだろ。
ASで変数名のアタマに$をつけるのって始めて見たけど、そういうものなの?
>>347 のコードじゃあ100個のうち10個取り出そうと思ったら、0〜9の位置にあるものをランダムな順番で取り出すだけじゃん
>>376 いろんな言語やっててごちゃ混ぜにしてるんだろw
JavaやASでの推奨ではないよ
変数や関数名に$つけてもコンパイル通るのか知らんかったw 上の人の$はごちゃ混ぜじゃなくて独自のコーディング規約でしょ Java+Eclipseあたりだと引数の変数名にはちゃんと色が付くけど FlashやFlexのコード色付けは貧弱すぎて 一風変ったコーディング規約が生れても納得せざるをえない
>>377 いや、ちゃんと0〜100の間の数字をランダムに10個取り出せるよ。
var rip:RandomIndexProvider = new RandomIndexProvider(100);
にして、rip.getNextIndex();を10回呼び出せばよい。
381 :
Now_loading...774KB :2009/02/26(木) 12:35:37 ID:Vx58Gms7
>>302 遅くなったけどみてますよーー!
ありがとうございます。
>>374 それぞれの問題に適した解法・アルゴリズムを選択するってのは、プログラミングの基本じゃないの?
効率を求めてるんなら、それこそ個別に作るべきだし、
効率を求めないんなら、
>>365 のシンプルなアルゴリズムで十分で、こっちの方が汎用性も高いでしょ。
10000個から10個選ぶにしても、
重複無しが好ましい(最悪あってもよい)程度なら、random10回呼ぶだけで済むし、
それほどのばらつきが必要で無いんなら、0〜999、1000〜1999、…、9000〜9999から1つずつ選択するだけで
わざわざ要素10000の配列を作って保持するまでも無かったりする。
あと、上の状況では
>>365 のアルゴリズムは非効率的で無駄が多いみたいなこと言ってるけど、
どんな状況でも1つの解法で対処しようとするあなたの考えが招いた問題なだけで、
そういう状況の時、普通は
>>365 のアルゴリズムで解こうとは思わないから、何の問題にもならないと思うよ。
普通は問題にならないことが問題になるってことが、あなたの考え自体の問題点。
どっちの考え方も正しいと思うよ。
>>322 は利用状況まで書いてないし。
>>382 たぶん、あなたはクラスライブラリなどを作ったことが無いのでしょう。
ひとつのコードを書いたら、使い捨てにせず、汎用性と拡張性を付与したライブラリとして
資産化する、というのは広く受け入れられている考えです。
すべて対処療法的に解決する、というのもひとつの考えで否定する気はありませんが、
すくなくとも一方を間違っていると切り捨てるのは閉鎖的な考え方でしょう。
正規化と非正規化の話か どっちがいいかは状況によるね
まあ、そうだね。
>>380 あーあー、100個キープして都度1個選んでるのか。なる
速度いらないカードゲームとかならそっちのが良さそうだね
2周目の手札とかも行けるわけだ
>>382 そもそも
>>322 の依頼文を読んで、なぜ
A 配列の個数はそれほど多くなく
B 頻繁にリシャッフリングすることもなく、
C シャッフリングされた要素はすべて利用する
D 確率が低ければ重複も大目に見る
などと勝手な仮定をするんだ?詳しい利用状況は何も指定されてないんだ。
配列の個数が膨大で、頻繁にリシャッフリングする必要があり、シャッフリングがされた要素は数個しか利用せず、
重複はいかなる場合でも許さない、というユーザーの要求であれば、
>>365 は絶望的に効率が悪いものになる。
>>347 のコードは
A 多くても少なくても同じように利用できる
B 頻繁でもそうでなくても良い。
C 一部でも全部でも良い。ただし一部の場合は特に効率的。
D 重複は絶対にない
というように、どのような利用状況においても効率的に無駄なく処理する解決策を提供しただけだが、
その何が気に食わない、というのか。
逆に伺いたいが、
>>347 のコードが
>>365 のコードにくらべて劣っている点は具体的に何だ?
配列と同個数のインデックス配列を作らなければいけない点は
>>365 も同じはずだ。
リシャッフリングするたびにインデックス配列を作らなければいけない
>>365 とは違い、
>>347 は配列の作成は一回だけだ。
・・Dについてはちょっと見当はずれか・・。
>>365 も重複はないわけだからね。
別にライブラリとかのアイデアを否定してるわけじゃなくてさ…
単純に中途半端な「配列のインデックスを重複無しに取得するクラス」が必要?ってだけの話。
>>322 の依頼文なんて明確に詳しい利用状況を書いてるじゃないw
この依頼文を読んで、
>配列の個数が膨大で、頻繁にリシャッフリングする必要があり、シャッフリングがされた要素は数個しか利用せず、
> 重複はいかなる場合でも許さない
ようなことが必要になりうる要求と解釈する方が変じゃない?そちらの方こそよっぽど勝手な仮定をしてるでしょ。
まぁ、
>>347 が有用なクラスだと思って使う人がいるんならそれでいいだろうけどね。
インデックスを取得するメソッドで-1を返したり、メモリ効率の悪い、
用途が非常に限定された、少機能なクラスを、わざわざ使おうとは自分は思いませんけど。
個人的には、RandomIndexProviderなんて、 いちいち中身読まなきゃ何するクラスか分からないオレオレクラスよりも、 シャッフルメソッドorシャッフル関数の方が名前だけで理解できて好きです。
392 :
Now_loading...774KB :2009/02/26(木) 21:12:38 ID:p1Stiz2i
なんか面倒くさい人がいるなぁ。質問者が解答で得たものを 自分に合った形で使えばいいだけだろが。
393 :
325 :2009/02/27(金) 00:37:00 ID:GC2/NxSi
なにこのシャッフルスレwww もしかして俺のせいで、お前らのプログラミング魂に火をつけた?ww
プアなかまってちゃんがうざいのでシャッフルの話はこの辺で終りにしましょう
誰かが物凄い勢いで解答するスレで 拡張性とか正規化とかいらないだろ 仕事じゃねーんだからw サクッとアルゴリズムがわかればいいだけ。 優劣つけるなら、処理速度とか、コードの短さとか 単純にわかるものでやってくれ。
きちんとしたソースを提示すべきだし、いろいろ議論していんじゃね 糞ソースさらすとみんなに叩かれて勉強になるしねw
すみません、2個質問です。 var array:Array = new Array ( ) ; for ( var loopa:Number=0; loopa<10000; loopa++ ) { array[loopa] = new Sprite ( ) ; array[loopa].addEventListener ( MouseEvent.MOUSE_DOWN, function ( event:MouseEvent ):void { ? } ) ; } ; 無名関数の中での、自分自身(array[loopa])へのアクセスの方法。 無名関数の中で、自分に振られた添字(loopa)を知る方法。 Spriteに固有名を着ければいいんですが、数が多いので悩んでいます。 よろしくお願いします。
(a)無名関数の中での、自分自身(array[loopa])へのアクセスの方法。 (b)無名関数の中で、自分に振られた添字(loopa)を知る方法。 それぞれ無名関数内で以下の記述を行なえば上記(a),(b)になる (a)array[loopa] (b)loopa
あぁ、ごめん無理かも
(a)は event.target で拾えるかな (b)は Spriteがdynamicクラスではないから、そのままでは無理かも MovieClipなら array[loopa] = new MovieClip( ) ; array[loopa].num = loopa; として event.target.num で取得できる。
>>397 >自分自身(array[loopa])へのアクセスの方法
これはイベント処理みたいだからイベントオブジェクトのtargetでいけるよ
>自分に振られた添字
添字というか、ちょっとした値ならクロージャ使って保持しとけばいけるけど、そもそもSpriteの数が多いなら、イベントリスナに割り当てる関数は無名関数じゃないほうがいいんじゃないかなあ
100個のSpriteに100個の無名関数割り当てるより、100個に1個割り当てた方がやさしいでしょ
一応はこんなでいけるけど、ちょっと気持ち悪い。処理によってはイベントオブジェクトだけで何とかなるんじゃない?
それか保持したい情報持ったクラスを作っちゃった方がすっきりするかもね
var spriteList:Array=[];
for(var i:int = 0;i<10;i++)spriteList.push(addChild(createSprite(i)));
function createSprite(index:int):Sprite{
var sprite:Sprite = new Sprite();
//イベントオブジェクトとクロージャで保持しておいた値を利用
sprite.addEventListener(MouseEvent.CLICK,function(event:MouseEvent){
trace("このスプライト:"+event.target,"インデックス:"+index);
})
//ここから表示用の処理
sprite.graphics.beginFill(0xFF0000);
sprite.graphics.drawRect(0,0,20,10);
sprite.x = Math.random()*stage.stageWidth;
sprite.y = Math.random()*stage.stageHeight;
return sprite;
}
event.targetで自身へアクセスできるお EventListener10000個w
404 :
397 :2009/02/27(金) 15:22:09 ID:KukOrLtv
うぉ、みなさん素早くて助かります。 理解しました、ありがとうございました。
もしそのspriteを全部同じ親にaddChildするつもりなら、イベントのバブリングを利用して、 sprite10000個にリスナを追加せずに、親に1個リスナ追加するだけで済むと思うよ。 状況によって大量のイベントリスナはかなり動作を重くする可能性あるし。 //spriteの親の表示オブジェクトparentに対してリスナ追加 parent.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void { trace(e.target); }); //e.targetで個々のspriteを参照できる
AS2.0 よろしくお願いします。 comboboxに 0|明日 1|俺は 2|チヌ の値で、5秒毎に0→1→2と自動で選択させるにはどうしたら良いのでしょうか?
>393 氏ねゆとりウザい 俺もウザい 仲間だな
408 :
324 :2009/02/28(土) 05:44:12 ID:ww3w27Kd
どなたかお願いします。 タイトルテキストを持つMCに対してマウスオーバーしてもマウスの 指マークをテキストの範囲でも維持したいです。
>>408 MCのmouseChildrenをfalseにしてイベントフロー切っちゃえばいいんじゃね?
410 :
324 :2009/02/28(土) 23:05:07 ID:71v/M6uu
411 :
324 :2009/03/01(日) 01:14:03 ID:w8zM0vMX
(連投すいません)
>>409 container.mouseChildren = false; でマウスへの反応が改善しました。
感謝します!
AS3.0 numChildrenで返す値って0から? 表示オブジェクトがひとつなら0。2つなら1。で合ってる? あと、表示オブジェクトのプロパティを変更したいんだけど、 var mc_obj:Object; mc_obj="abc"; mc_obj.visible=true; これでabcと言う名前を付けたインスタンスのプロパティを変更出来る? abcの値はその都度変更して、様々なインスタンスを表示/非表示を 切り替えたいだけど…。
> numChildrenで返す値って0から? 聞く前に試した方が早いのに・・・1からです。
さんきゅ。trace();が何故か出来ないので、質問させてもらいました。
何故できないか調べない奴らは高卒に多い 学ぶ力が欠如しているからだ。この業界はこういうやつが腐らせる
417 :
412 :2009/03/02(月) 13:09:04 ID:iPM9+m9a
空のフレームにtrace(abc);ってやっても変数abcは出力されない。
なんで?
>>415-416 ここで「調べてから」って発言は、荒しと同じだよ。
調べたって判んないから聞いてるんだし、「調べる=ここで聞く」
って感覚でも良いと思うんだけどね。
それを理解した上で、答えてくれる人が答えるスレでしょ?
答えられないんだろ?
更に言わせてもらえば、業界って何?
俺は遊びでフラッシュやってんだけど。
>>417 ASスレだし、教えて君なら基本的スレ池
>>417 質問者が調べているかどうか
回等側から見るとまるわかりだよ
ググれといわれるのは大抵質問内容が悪い
そして回答者は
調べてわかるものに関しては「ググれ」と言うのではなく
スルーするのが一番。荒れるから
ググれと言われ
>>417 のような反応もありふれたもの
>空のフレームにtrace(abc);ってやっても変数abcは出力されない。
その空のフレームが実行されていないか
出力ウインドウが開いていないか
abcが空文字状態、あるいはabcが存在しない
ウィンドウが開いてなかった。サンクス。
>>418 質問の程度はどうあれ、ここはASの質問スレだろ?
お前が難解と思える質問意外しちゃいけないのか?
AS関係なかったね
Flashの超基本的な質問はここでしろ! part39 492 名前:Now_loading...774KB :2009/03/02(月) 00:36:39 ID:mYZgW6XG ググらない奴らは何なんだ?阿呆にしては最近多すぎるぞ ActionScript 誰かが物凄い勢いで解答するスレ 22 415 :Now_loading...774KB:2009/03/02(月) 00:31:49 ID:mYZgW6XG 何故できないか調べない奴らは高卒に多い 学ぶ力が欠如しているからだ。この業界はこういうやつが腐らせる どこで聞いたって一緒だろ?
>421 結果論だろ?
>>420 >ウィンドウが開いてなかった。サンクス。
せめて教本の1冊ぐらいやってから来てくれ
俺が買った本には書いてなかったな。 というか、trace();って1からあるから、3.0の本には基本過ぎて書いてない。 俺自身、こういう簡単な事で躓く以外、出力で確認しようと思わないから 今まで使った事無かった。 答えない(答えるつもりが無い)奴はスルーしろよ。 このスレだってテンプレに「初歩的な質問でもなんでもおk」って書いてあるぞ。 上の残った質問、インスタンス名を変数で処理する仕方、誰か知らない? nameは、予めステージに配置したので使えない。
>>425 >上の残った質問、インスタンス名を変数で処理する仕方、誰か知らない?
みんな知ってるしw無能でタカビーな奴に答えたくねーだけだよw
>>425 3.0なら
var str:String = "インスタンス名";
getChildByName(str)
でいけるんじゃないかな
429 :
Now_loading...774KB :2009/03/02(月) 16:10:35 ID:9s69T6kt
写真を読み込んで、フェードインさせる仕組みがうまくいきません。 一枚目は読み込み終了後にアルファ0から100にとぅいーんしてくれるのに、 二枚目以降はとぅいーんしてくれないんです…………………………………………………… WHY? 以下ソースです。 var setPhoto=function(){; var photoMedia:MovieClip = _root.container.mass.createEmptyMovieClip("photoMedia",_root.getNextHighestDepth()); var myListener:Object = new Object(); objMCLoader.addListener(myListener); photoNum = Math.floor(Math.random()*10+1); objMCLoader.loadClip("photo"+photoNum+".jpg",photoMedia); // 読み込みを開始; myListener.onLoadStart = function(target_mc) {; photoMedia._alpha=0; }; // 読み込み完了; myListener.onLoadComplete = function(target_mc) {; Tweener.addTween(photoMedia,{_alpha:100, time:3, transition:"line"}); objMCLoader.removeListener(myListener); }; }; btn.onRlease = setPhoto;
>>423 こちとら、ASに問題が無いことは自明なんだよwww
質問者の俺が主役なんだよ。質問した時点で何処に問題があるかなんて
判んないから、質問してんだよ。
>>427 追記
getChildByName()は、パラメータがname:Stringで、動的に追加しないと
機能しない、先のnameプロパティと同義だった。
でも助言は助かった。
432 :
Now_loading...774KB :2009/03/02(月) 16:44:58 ID:9s69T6kt
あ、じこかいけつしちゃいました。 removeMovieClip(_root.container.mass.photoMedia); を先頭に書けばOKでした。
FlashCs3のAS3で、シンプルボタンを作って、ボタンの中にMCを挿入した場合、 そのMCにアクションスクリプトからアクセスするにはどうしたらいいですか? シンプルボタンには、通常インスタンスや変数を持つことができない ようですが、FlashCs3を使うとMCを挿入できるので、何かアクセスできる 方法もないかと疑問に思っています。
>>431 ぶっちゃけ使ってる用語がムチャクチャすぎて
君が何をやりたいのが正確に理解できないから
みんなエスパー回答するしかないんだよ
>>433 いちおう
simpleButton.downState
とかで「ダウン」の時の絵というかインスタンスというかにはアクセスできるよ
ただ、そこからいわゆるインスタンス名を使ってアクセスはできないかな
(simpleButton.downState as MovieClip).m.getChildAt(0)
みたいな感じではいけるけど、ちょっと使いにくい。
マウスイベント使って、ボタンと同じ位置に何か表示するとかのが簡単かもね
あれ >(simpleButton.downState as MovieClip).m.getChildAt(0) じゃなくて (simpleButton.downState as MovieClip).getChildAt(0) ね
>>434 答えてくれた人はみんな判ってたよ。的を射た回答だった。
判んないからって拗ねるなよ。
じゃあレスを見る限りでは君の問題は全部解決してるようだね、ならいいけど
うん。みんな、ありがとう。
441 :
Now_loading...774KB :2009/03/02(月) 20:55:44 ID:1rp63mcx
CS4はAS3に対応してますか? それともまたASのバージョン上げましたか?
>>441 当然対応しています。
ASは3が最新です。AS4とか出すなよ、絶対に出すなよ!>ADOBE
443 :
Now_loading...774KB :2009/03/02(月) 21:31:02 ID:1rp63mcx
>>442 ありがとうございます。
確かにオブジェクト指向だしこれ以上バージョン上げられては困りますよね
>>443 でも『完全な』オブジェクト指向ではないんだなあ。ではどの辺が
完全ではないのかは知らないけどw
Cで出来たツールなら数秒で終わる処理が AS1だと「実行速度が遅く」がでて実用度がゼロなんだけどどうにかしたい AS3なら処理速度ってよくなるもの?forをスゴイ勢いで回さないと行けないんだけど
AS1より100倍は速いがそれでもまだまだCよりは全然遅いレベル
ありがとう、やっぱり早いんだね導入考えないとダね。つか必須なのか。
質問させてください。 (1)MovieClip.loadMovie(); で読み込んだjpg画像のサイズを取得する方法はないでしょうか? 空のMovieClipに、jpg画像を読み込んで、そのMovieClipの_width、_heightを参照しましたがダメでした(width、_heightはゼロのまま) (2)また、MovieClip.loadMovie()でjpg画像を読み込んで、これをjpg画像ごとBitMapDataにコピーする方法はないでしょうか? BmpData.drawで 新規作成したBmpData.draw(jpgを読み込んだMovieClip,,theMatrix, theColTrans,"normal",BmpDataのrectangle); という具合に書いてみたのですが,MovieClip.loadMovie()で読み込んだjpgがない状態のMovieClipしかコピーされないのです。 最終的な目的は、外部ファイイルのjpg画像を、BitMapDataとして扱うことです。
追記。環境を書き忘れましたFlash8、AS2.0、WinXPです。
>>448 loadMovie()した直後は0になるよ
読み込み完了してから、_widthと_heightを参照してる?
2でやりたいこと自体は可能だけど、
>>448 の場合はどこかに間違いがあるんだろう
いま眠いんで、すまんが推測とかできないや
とりあえずMovieClipLoader使いなよ
サイズを参照するのも、BitMapDataにコピーしたのもLoadMovie()直後でしたので、 おそらくご指摘の通りタイミングが合っていないせいだと思います。 MovieClipLoaderを組み込んでみます。 ありがとうございました。
AS2です。質問させて下さい。 外部XMLファイルをFlashに読み込み、パースしています。 配列「S_JrWord」にXMLの要素を格納して、ダイナミックテキスト(変数名S_00〜S_06)に読み込んでいます。 for( var i = 0; i<S_Jr.length; i++ ){ S_JrWord.push(S_Jr[i].firstChild.firstChild.nodeValue); //配列 S_JrWord にWordを格納する文 } _root.S_00 = S_JrWord[0]; _root.S_01 = S_JrWord[1]; _root.S_02 = S_JrWord[2]; _root.S_03 = S_JrWord[3]; _root.S_04 = S_JrWord[4]; _root.S_05 = S_JrWord[5]; _root.S_06 = S_JrWord[6]; ここまでは成功しています。 そこで、読み込むべきXMLの要素が見つからなかった場合、 Flash上のダイナミックテキストが表示されないようにしたいのですが、どうすればいいでしょうか。 今は「undefind」と表示されますが、その表示すら消えるようにしたいんです。 以下のように試しに書いてみましたが、上手くいきません。 if(S_Jr[1] = undefined){ S_01._visible = false; } どうかよろしくお願いします。
うーむ、ダメでした。 **************** this.createEmptyMovieClip("picGetMc", this.getNextHighestDepth()); my_mcl = new MovieClipLoader(); my_mcl.loadClip("pic.jpg",picGetMc); mclListener = new Object(); mclListener.onLoadComplete = function(target_mc) { trace(picGetMc._width); trace(picGetMc._height); } my_mcl.addListener(mclListener); やはり出力結果は0,0でした
>>452 if(S_Jr[1] = undefined){
↓
if(S_Jr[1] == undefined){
とか?
>>453 onLoadComplete
↓
onLoadInit
457 :
Now_loading...774KB :2009/03/03(火) 18:35:55 ID:uka1KAN9
AS3+FlashDevelop でオチゲー作ったのですがCS3を最近導入したので新たにまた作ろうと考えてます。 作ったasファイルはCS3でも上手く利用できるんですか?
>>456 なんだそれ、編集してUpまでしろってか、ただ働きさせるにもほどがある。
代償としてエロ画像100枚Upしろ。
修正方法
(1) タイムラインのacrionscriptレイヤーに書かれている内容を[全選択]→[切り取り]
(2) メモ帳とかのテキストエディタを起動し、[貼り付け]する。そして、
flaやhtmlと同じフォルダにBrainfuck.asというファイル名で保存する。
(3) FLASHのメニューから、ファイル→パブリッシュ設定→Flashタグ→スクリプトの
ところの設定...ボタンをクリック
(4) ドキュメントクラスのところにBrainfuckと入力
※(3)と(4)は、FLASHの何もないトコをクリックしてからドキュメントのプロパティで
クラスのところに入力してもよい
以上。
>>457 もしembedとか使ってたらそこだけ修正すればおk
>>455 ありがとうございます。目的通り動作しました。
サイズの取得もBitMapDataへのコピーもonLoadInit内で行ったら正常に動作しました。
461 :
Now_loading...774KB :2009/03/03(火) 21:10:01 ID:IMY//xCI
WinXP-ProでFlashCS3-ProのAS3.0を使っています。 MCマウスを重ねてそのMC内のフレームを移動した後、MOUSE_OUTしても フレームが元に戻らない場合があり質問です。 MC(mc1, mc2, ・・・mc10 )があり、それぞれがマウスへの反応として、 [フレーム1] ←重ねるor外れる→ [フレーム2] →クリック→ [フレーム3] ○ ← → ● → ◎ (MCの変化) をするようにしています。下はマウスを重ねたとき外れたときのASです。 [フレーム1] this.buttonMode=true; this.addEventListener (MouseEvent.MOUSE_OVER, this_onOver); function this_onOver (mouseEvt:MouseEvent) { this.gotoAndPlay (2); } [フレーム2] this.addEventListener (MouseEvent.MOUSE_OUT, this_onOut); function this_onOut (mouseEvt:MouseEvent) { this.gotoAndPlay(1); } ※それぞれのフレームには this.stop (); を入れています。 上の記述だと各MCは凡そ期待通りの変化をしますが、時々マウスが外れてもフレーム2 のままになる場合があります。一応、再度マウスを重ねるとフレーム1に戻りますが操作上 都合が悪いです。 考えられる原因は何でしょうか? 「AS3 MOUSE_OUT フレーム」などで検索しましたが分かりませんでした。
462 :
Now_loading...774KB :2009/03/04(水) 02:24:01 ID:KLvpxgVZ
これはよくあること。
できれば他の方法でやるべきだと思う。
>>461 のやり方はあんまり推奨できない。
あとできればgotoAndPlay(label1)
したほうがいいと思います。
463 :
Now_loading...774KB :2009/03/04(水) 02:27:53 ID:Ss/ZauCb
WinXPでCS3のAS3.0です。 rootのフレーム2と3にMCを置いていますが、フレームを移動すると、フレーム3に 存在するMC(A_Key)がNullになり扱うことが出来ません。検証のため、traceで trace(getChildByName("A_Key")+", "+MovieClip(root).getChildByName("A_Key")); とすると、null, null が出力されます。MCのA_Keyは確かにフレーム3に有るのですが・・・ どうしてでしょうか?
未来のコンテンツを参照しようとしても無理だべ
>>464 早速すいません。
このtraceはフレーム3に書いているのですが、それでもNullになります。
クラス名とインスタンス名が同じとか
XPSP3上でCS3(AC3)を使ってるのですが。
CGIから変数を取得してダイナミックテキストに文字を入れ、
それの行数と文字数を取得したかったのですが。
traceすると、行数を取得するはずのnumLinesの結果は1、
文字長を取得するはずのlengthの結果は0になります。
ダイナミックテキストを上書きした値は取得できないのでしょうか?
(デフォルト値は空なので、その値を取ってきてる?)
そもそも、こういった使い方は出来ないのでしょうか?
どなたかご教授下さい。よろしくお願いします。
//フレーム・アクション
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest("
http://www.hoge.jp/cgi/hoge.cgi "));
trace('タイトル0(行数) :' + title0.numLines);
trace('タイトル0(文字長) :' + title0.length);
function completeHandler(event:Event):void{
var vars:URLVariables = event.target.data;
title0.text = vars.title0;
}
▼trace結果
タイトル0(行数) :1
タイトル0(文字長) :0
▼CGIが吐くデータ
title0=あいうえおかきくけこさしすせそ&title1=たちつてとなにぬねの ……
>>467 なんでcompleteメソッドでtraceしないの?
申し訳ない。ちょっとよくわからない。 ヘルプでcompleteを検索して、なんとなく下記のように書き換えると、 trace('タイトル0(行数) :' + title0.numLines); trace('タイトル0(文字長) :' + title0.length); trace('コンプリートした?:' + Event.COMPLETE); ▼trace結果 タイトル0(行数) :1 タイトル0(文字長) :0 コンプリートした?:complete にはなった。
何でcompleteHandler内でtraceしないのかと 読み込み完了した時点で確定するんじゃねーの
やってみた。complete と返ってくる。 ▼trace結果 タイトル0(行数) :1 タイトル0(文字長) :0 コンプリートした?:complete コンプリートした?(completeHandler):complete
>>472 私にはもうわかんない。
ちなみに、CGIから取得した文字列は、ステージに表示はされているんですよ。
ダイナミックテキストにハードコードした場合にはlengthもnumLinesもOKなんですが、
ダイナミックテキストをスクリプトから書き換えると、見かけ上のテキストは書き換わってもlengthやnumLinesの
値は、ハードコードのものを引っ張ってくるようなんですわ。
見出しが2行になった時に、次の記事を1行分下げるっていう処理をしたかったんですが。
改行数を動的に取得できないのであれば、ダイナミックテキストをステージ一杯に拡げて、
XHTMLのリストタグを垂れ流したほうが速いかな……。
別の方法を探ってみます。
ありがとうございました。
それ全然やってみてないんじゃねーのw こういうことでしょ completeイベントに関連付けた関数の中で処理しないと意味がない function completeHandler(event:Event):void{ var vars:URLVariables = event.target.data; title0.text = vars.title0; trace('タイトル0(行数) :' + title0.numLines); trace('タイトル0(文字長) :' + title0.length); trace('コンプリートした?:' + Event.COMPLETE); //これ定数だからいつでも「complete」確認に使えない }
476 :
Now_loading...774KB :2009/03/04(水) 19:20:31 ID:Ar1DsBPL
すいません。FlashPlayerが閉ループに入って作業が進みません。 CS3(AS3.0)をWinXPで使っています。 Stage上にMC(stepsBord)を置いて、この中に子として7個のMC(stepBtn1〜stepBtn7) をボタンを押してfor文とaddChildAtで縦に配置しようとしています。 その際、for (var id=0; id < 7; id++) のある途中の条件の場合(idが2とか5)でstepBtn 内のフレームをgotoAndStopで変えてstepBtnのフレーム3版(1.5倍ほどY方向に長い) を配置します。 この場合、プレビューでstepBtnのフレーム2版だとOKなのですが、フレーム3版だと FlashPlayerが閉ループに入って(凍って)しまします。考えられる原因は何でしょうか? 下はfor部分の抜粋です。 for (var id=0; id < 7; id++) { var tmpMC:MovieClip=new tmpClass as MovieClip; if ((id+1)==1) {//試しにidが0の時 tmpMC.gotoAndStop (3);//ここがgotoAndStop (2)ならOK } tmpMC.name="stepBtn" + (id+1); tmpMC.y=(id+1)*30 this.addChildAt (tmpMC, id+1);//0層には既に別のオブジェクトがあるので1から } なお閉ループに入った場合は、エラーメッセージは何も出ません。
477 :
Now_loading...774KB :2009/03/04(水) 19:51:13 ID:mt+PTzTP
>>457 の者ですが、オチゲーなどのゲームをCS3を用いて作る利点とかありますかね?
478 :
Now_loading...774KB :2009/03/04(水) 22:20:03 ID:YXcFQhXO
通報しますた
481 :
Now_loading...774KB :2009/03/05(木) 16:48:58 ID:cxb5gwV0
TextFieldで文字を表示させているんですけど、どうも読みにくいです。 アンチエイリアスはアドバンスにしてあって、文字サイズは11-13ぐらい。 色を真っ黒にし指定しても灰色になっちゃいます。 PDFは綺麗なのにActionScriptは・・・ 何か良いTextFieldでの設定か、別の方法があったら教えて下さいませ。
>>481 fontが細すぎてアンチエイリアスかけるとボヤけるってこと?
483 :
481 :2009/03/05(木) 17:24:21 ID:cxb5gwV0
>>482 さん
ヒラギノ明朝のW3使っています。
細くなるし、ボケボケです・・・
これの対策ってあるんでしょうか?
埋め込まないと駄目だよ クソ重いムービーになるけど
485 :
481 :2009/03/05(木) 17:40:17 ID:cxb5gwV0
>>484 埋め込みはしてあります。
ローカル用なんで重さの問題はあんまり無いんです。
文字が痩せるのも気になりますが、一番解決したいのは、色が黒なのに灰色になってしまい事です。
こればっかりはどうにもならないのでしょうか・・・
TextRendererクラスあたりを使って調整してみたらどう? 希望の結果がどういう物か分からないので、自分で調整してみてちょうだい
>>485 12ptだと明朝の横棒が細すぎるからしょうがないっちゃしょうがない気がする。
y座標の値を0.1px単位で動かしてみると少し見え方が変わる。
あとはカスタムアンチエイリアスで調整するとか、FONTの太さを変えるとか。
ActionScript3.0で質問です。 マウスが画面外に出ている場合でもマウスの座標を取得する方法ってあるんでしょうか? 画面外だとMOUSE_MOVEが来ないし、MOUSE_OUTとかもダメのようです。 stage.mouseXも更新されないですし。 よろしくお願いします。
489 :
478 :2009/03/05(木) 23:26:39 ID:rnZYCU1q
>>479 そういうものがあったんですね。
ありがとうございました。
490 :
Now_loading...774KB :2009/03/06(金) 01:36:45 ID:9YqQersX
df
as3です。 シューティングゲームを作りたいのですが、 当たり判定を取るのに最も高速な方法は何でしょうか?
492 :
Now_loading...774KB :2009/03/06(金) 02:04:05 ID:WbEdREUG
>>488 ないあきらめろ
>>491 private function onEnterFrame(event:Event):void
{
var dx:Number = ball2.x - ball1.x;
var dy:Number = ball2.y - ball1.y;
var dist:Number = Math.sqrt(dx * dx + dy * dy);
if(dist < 80)
{
trace("ヒット");
}
}
}
}
あービットマプははえーぞー
494 :
Now_loading...774KB :2009/03/06(金) 02:18:36 ID:BTocpkss
初歩的ですがオブジェクト(2つの絵)同士の衝突を判定するにはどうすれば良いですか?
すいません、
>>476 をお願いします。
エラーメッセージさえ出れば何とか手の打ち様があるのですが、
毎回凍ってCS3を再起動しています。
>>495 flashのプレビューならデフォルトで15秒で処理が止まってエラーが出る。
グーグルマッポの最新版を使いこなしまくりたいので CS4(CS3)からFlexに移行しようかと思ってますが 注意点とかありますでしょうか
>>496 476のfor文は別MCを押して実行させるのですが、15秒ルールの前に
tmpMC.gotoAndStop (3); で一瞬にして固まります。
インスタンス生成が間に合ってないんでしょ タイムライン持つMovieClipにはよくあること いわゆるdoLater的な関数作って1フレーム待って実行するのが確実なんじゃないの
それよりもボタンの外観変えたいだけなら、ボタン用のクラスに表示する絵をスクリプトで指定した方がスマートなんじゃないかな 3パターンあるなら、3つクラス作っても構わない 生成と同時にgotoAndStopしようとするのがちょっと無理がある
質問させてください MCを作成してフレーム1にテキストフィールドを配置したあとに、フレーム2、フレーム3とコピーしました。 この状態でステージにこのMCを配置して、テキストフィールドに値を設定しました。 その後gotoAndPlay()を使いMCのタイムラインを動かすとテキストフィールドの値が消えてしまいました。 どうやら各フレームのテキストフィールドは別々の変数として存在しているようなのですが、これを外部もしくは同じMC内の違うフレームからアクセスすることはできないでしょうか。 フレームを動かした後にmc.textField.text="";と実行すると、「null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」という警告がでます。 環境はFlashCS3 AS3.0です
502 :
481 :2009/03/06(金) 19:05:14 ID:y3nZzr7v
>>486 ,487
有り難うございます。
アドバンスでthicknessとsharpnessを調整してみました。
結果、玉砕。
文字サイズが小さすぎますね。
サブピクセルレンダを手動で設定出来ない事には、日本語は無茶でした。
文字サイズ大きくして出直してきます。
>>492-493 ありがとうございます
すみません、ビットマップを当たり判定に用いるには
どのようにしたらよいかご教授いただけませんでしょうか?
504 :
492だよ。 :2009/03/06(金) 19:29:31 ID:WbEdREUG
>>501 できない。無理だ
>>503 hittestpointだな。
簡単なのは。でもこれは....
492は理解できなかった?
できなかったらもっと詳細にソースを書くよ
>>504 ご親切にありがとうございます。
492で書いていただいたコードは理解できます。
当たり判定は、オブジェクトをhitTestしたり
492のように座標で判定したりといった方法があると思いますが、
ビットマップで判定というのははじめて聞きました。
ぜひともご教授いただけませんでしょうか?
506 :
488 :2009/03/06(金) 20:05:52 ID:360ZQLfo
>>492 さん
ありがとうございます、残念ですが諦めます。
質問です FlashCS4で新しくでたVectorクラスをFlashCS3で使いたいのですが、 何か方法をご存じの方いらっしゃいませんか? Vectorクラスのためだけに何万円も払うのはさすがにあれなんで...
>>502 文字列が固定でスクリプトから変える必要がないのなら、
ちょいと面倒だけどその文字を画像として書き出して
それを表示するのでもいいかもね
509 :
Now_loading...774KB :2009/03/06(金) 22:25:54 ID:BTocpkss
CS3でインスタンス名とシンボルに変換するときの名前はどんな違いがあるんですか?AS3と関連付けて教えて下さい。 かなり初心者です。
510 :
Now_loading...774KB :2009/03/06(金) 22:45:44 ID:WbEdREUG
>>509 インスタンス名がプログラムでいろいろ操作したりするときに使う。
シンボルに変換するときの名前はライブラリ(Ctrl+Lキーででてくる画面)で管理しやすいように作る名前。
だから後者はAS3とは無関係
大量のシンボルを、シンボル名からの変換でクラスに一気に名付けすることもある。
514 :
Now_loading...774KB :2009/03/07(土) 08:05:49 ID:DRMYDxek
ブラウザのサイズが変わって、Flashの大きさも変化しちゃったときに Flash内にある特定のMCの縦、横のピクセルを保持したまま サイズを変化させたくないのですが、どうすればよいですか? 個人的にはstage.stageWidthから、Flashの現在のサイズを取得して そこから、大きさを変化させたくないMCのサイズをどの程度変更させれば 見た目の大きさが変わらないか計算するという方法を考えたのですが もっと効率のいいやり方はありますか??
515 :
Now_loading...774KB :2009/03/07(土) 19:18:06 ID:ieZImuV0
ところでみんな使ってるMCって何ですか?
MCコミヤ
中卒氏ね 考えろ お前の意見を言え阿呆
おまえをムービークリップにしてやろうか
じゃあ、お父さんはスプライト飲んじゃうぞw
じゃあボクは苺シェイプ
521 :
Now_loading...774KB :2009/03/08(日) 16:34:06 ID:ptTiMv1h
では私はミリンダで。 と言いつつ、AS3.0,WinXP-Pro,FlashCS3です。 Stage上のMC(frameEndB)にマウスポインタが重なったら、その領域の中でだけ マウスポインタが別のMC(txtMouseM)に置き換わるASを書いていますが、領域に 入って以降、txtMouseMと通常のマウスポインタ矢印が交互に(フレームレートの 間隔で?)点滅するように現れてしまいます。 txtMouseM.visible=false;//最初はMCを隠す addEventListener (Event.ENTER_FRAME, onFrame); function onFrame (frameEvt:Event) { txtMouseM.x=stage.mouseX; txtMouseM.y=stage.mouseY; } frameEndB.addEventListener (MouseEvent.MOUSE_OVER, txtMOUSE_rollOver, false, 0, true); function txtMOUSE_rollOver (mouseEvt:MouseEvent) {//領域内で置き換える Mouse.hide (); txtMouseM.visible=true; } frameEndB.addEventListener (MouseEvent.MOUSE_OUT, txtMOUSE_rollOut, false, 0, true); function txtMOUSE_rollOut (mouseEvt:MouseEvent) {//マウスポインタを元に戻す Mouse.show (); txtMouseM.visible=false; } どう手直しすべきでしょうか?
523 :
Now_loading...774KB :2009/03/08(日) 19:41:08 ID:xhIDKCgc
>>522 いいよね。
このサイト。
お気に入りに入れております
>>521 ちゃんと調べてないけどEvent.ENTER_FRAMEだから?
MOUSE_MOVEよりENTER_FRAMEのが処理が軽いんだけど、タイミングが微妙に違う。
525 :
521 :2009/03/08(日) 22:45:53 ID:AdyoNKkF
>>522-524 有難うございます。
Event.ENTER_FRAMEを使うとどうも動作がおかしくなる(領域内で
マウスポインタが止まったり)ので、紹介サイトの通り、MouseEvent.MOUSE_MOVE
とupdateAfterEvent();を使い目的の動作が出来ました。
ちなみに、30fpsです。
flash cs3持っていますが、cs4ってなんであんなに高いんですか? 3000円ぐらいでcs4にする方法はありませんか?
>>526 Adobeに聞いてください
スレタイと
>>1 を読んでから書き込みましょう
AS3.0 flashCS4(体験版) AS1.0では、MCをattachMovie()で作った後、MCの変数を外から定義していました。 それをAS3.0で書くとどうなるのでしょうか。 つまり、 var MC = attachMovie("mc", "mc0", 0); MC.hensu = 1; MC.onEnterFrame = function(){ this.hensu++; }; というAS1.0のコードをAS3.0に直すとどうなるのか教えてほしいです。
WinXP flashCS3 AS2.0です。
最近よくみかけるフラッシュで
フルスクリーンモードと通常モードを切り替えるものがありますが、
あれってどうやってるんですか?
たとえばこのサイト↓
ttp://www.ceranco.com/ 右下のボタンを押すとフルスクリーンになって
「フルスクリーンモードを終了するにはESCキーを押します」って
メッセージがでるようなものです。
スクリプトの書き方を教えてください。
わかりやすい解説しているサイトでもいいです。
fscommand(fullscrean,trru); 自動でescの案内は出る仕様。 あの〜trace();が出来ないんですけど、どうやるんですか?
>>531 出来ればActionScript2.0だと嬉しいのですが・・・。
でもいろいろ勉強になりそうなサイトなのでありがとうございます。
一応自分なりに調べてみて
flash側に
btn.onRelease = function() {
Stage["displayState"] = "fullScreen";
};
html側に
<param name="allowFullScreen" value="true" />
で、フルスクリーンにするところまでは出来たんですが、
フルスクリーン状態の時に同じbtnを押して通常モードに戻ることができません。
ひとつのボタンで切り替えができるようにするにはどうすればいいのでしょう?
>>532 おっとAS2か。見落としてた。
onClipEvent(load){
var flag = 1
}
on (release) {
if(flag == 1){
Stage.displayState = "fullScreen";
flag = 0
}else{
Stage.displayState = "normal";
flag = 1
}
}
試してないけど。onClipEventとかなつかしいな。
>>533 どうもありがとうございます。
ばっちり出来ました!!
関数の引数の数が動的であるので、任意の引数番を確認するにはどうすればいいでしょうか? お願いします。
>>535 actionscript 可変引数
でググれ。
おっと、AS2とAS3では書き方が違うから注意な。
537 :
Now_loading...774KB :2009/03/10(火) 15:55:43 ID:pZ2Bi7jJ
as2.0です。 MovieClipLoaderで画像をロードした後に縦横のサイズを取得しようとすると0が帰ってきます。 ロードした画像のサイズを知るにはどうしたらいいんでしょうか?
538 :
Now_loading...774KB :2009/03/10(火) 16:03:17 ID:pZ2Bi7jJ
mcLoader.onLoadComplete = function(target_mc:MovieClip):Void { trace( target_mc._width); trace( target_mc._height); }; ロード時の処理はこんな感じです。
OMG どうも><
541 :
Now_loading...774KB :2009/03/10(火) 19:23:21 ID:SSwPPt18
AS3で、テキストフォーマットを適応したテキストフィールドに ENTER_FRAMEで指定した関数で値を代入しているのですが、値を代入した瞬間からテキストフォーマットの効果が消えてしまうので function enterFrameFn():void { textField.text = num.toString(); textField.setTextFormat( textFormat ); } 値を入れるのと一緒にテキストフォーマットをセットしてという方法をしてますが、flashが極端に重たくなったような気がします この処理方法で他にもっと良い処理の仕方はありますでしょうか?
>>541 書式変えなくていいならdefaultTextFormatプロパティを使うと行けるんじゃないかな
545 :
541 :2009/03/10(火) 23:56:58 ID:SSwPPt18
>>542 返信ありがとうございました
enterFrameFn()の移行前に
textField.defaultTextFormat = textFormat;;
と指定してenterFrameでの処理を省く事ができました
ありがとうございます!
546 :
Now_loading...774KB :2009/03/11(水) 14:15:55 ID:jWU3YmnR
CS4 AS3.0について質問です。 AS2.0でオフイメージ描画を --------------------------------- var bmpData:BitmapData; /* bmpDataに色々書き込む処理 */ mc.attachBitmap(bmpData, 0); --------------------------------- といった形でやっていたのですが、AS3.0ではattachBitmap()がムービークリップからなくなってしまったようです。 コンパイル時にその旨の警告が出ます。 代用の処理は何かないでしょうか?
オフイメージというのが何なのかしらないけど、3.0で画面に何か表示したい場合にはaddChildメソッドを使えばいいよ ビットマップを使いたい場合はBitmapクラスを使う そのコードの流れだとmc.addChild(new Bitmap(bmpData))かな 一度きっちりヘルプの「表示のプログラミング」あたり読んでおいた方がいいんじゃね?
ありがとうございます。 ご教示いただいた方法でうまくいきました。
549 :
Now_loading...774KB :2009/03/11(水) 15:48:56 ID:0kBJEOZw
すみません!超初心者です。急遽仕事でcs4を使用していますが、全くスクリプトが理解できなくて困っています。
誰か教えてください。
今現在、親flaのムービークリップの上に座標指定をしてswfを読み込みました。
読み込まれたswfは画像扱いか、ムービークリップになってしまっているのか・・・??
swf単体では、リンクが貼られて普通に飛んでくれるのですが、読み込むと飛んでくれません。
親fla
on (press) {
_root.halloween_mc.loadMovie("keijiban_note.swf");
_x=30;
_y=40;
}
読み込みたいswfファイルは、一番下のレイヤーに画像、その上のレイヤー3つを
作成して、各レイヤーにムービークリップを作りリンクを貼っています。
on (release) {getURL("
https:// ●●●●","_self");
}
こんな具合です。読み込んだswfのムービークリックを押すと、リンク先に飛ぶようにしたいのですが
どうしたらよいですか?
どなたかお願いします!!
550 :
Now_loading...774KB :2009/03/11(水) 17:20:14 ID:A3/sXqfV
ActionScript3.0 + FlashDevelopで開発してるのですが どの名前空間からも使用できるグローバル変数ってどうやって定義するのですか? ドキュメントクラスがあるフォルダにGlobal.asを作って package { var GLOBAL:int = 1; } ってやっても何処からも使えません・・・。
551 :
Now_loading...774KB :2009/03/11(水) 17:30:53 ID:A3/sXqfV
あ、すみません public var GLOBAL:int = 1;でもできないんです。
552 :
Now_loading...774KB :2009/03/11(水) 18:00:10 ID:A3/sXqfV
すみません死んできます。 もしかして1packageにつき1public・・・
553 :
Now_loading...774KB :2009/03/11(水) 18:11:06 ID:A3/sXqfV
>>550-553 無視してください。
解決しました。
他の人のために一応解説を。
ActionScript3.0ではpackageを無名で宣言するとグローバルスコープとなる。
しかしひとつのpackage内で宣言できるpublicな変数や、関数、クラスは一つのみである
したがって下記のコードのコメントを外すとエラーとなる。
package
{
public globalValue1:int = 0;
// public globalValue2:int = 0;
}
グローバルな変数をたくさん定義したいのであれば
packageを無名で宣言し、クラスをpublic宣言。
そのあとクラスの中にstaticな変数を定義することで
どの名前空間からでもGlobal.hoge; のようにして使えるようになる
package
{
public class Global
{
public static const hoge:int = 10;
}
}
554 :
Now_loading...774KB :2009/03/11(水) 22:34:55 ID:O8mMeIsp
【メモリについて質問です】 言語:actionscript3.0 開発環境:Flex 2 png画像(約30KB)を多数Bitmapデータで生成しているのですが ビルド後、1MB程度の swf ファイルが出来上がり ウェブにアップして swf 開くとメモリ使用量が200MB位になります。 メモリ使用量を減らしたいのですが解決策はないのでしょうか?
ガシツヲサゲル
そのアドバイスはないわ まずBitmapDataを大量に作ってるのが原因だろ その場合、一つのBitmapDataから複数のBitmapを作ればおけ
>>554 他にリスナーを弱参照にしてガーベージコレクション(GC)対象にするってのは?
その際にはremoveEventListenerとペアにする。
import flash.system.*; の System.totalMemoryをEvent.ENTER_FRAMEで使うと
随時使用メモリーがチェックできる。
>>553 >ActionScript3.0ではpackageを無名で宣言するとグローバルスコープとなる。
>しかしひとつのpackage内で宣言できるpublicな変数や、関数、クラスは一つのみである
なんかすごく間違ってる気がするがw
>>554 new pngのやつ(0,0);
を使うたびにメモリが食われる。
561 :
Now_loading...774KB :2009/03/12(木) 10:05:48 ID:dOMvP/kR
549です。だれかおしえてくださーい!!
562 :
Now_loading...774KB :2009/03/12(木) 16:01:28 ID:ftaKmXSw
>>559 どう間違ってるのか教えてください><
ところでもう一つ質問させてください。
AS3+FlashDevelop+ProgressionでHP作ってるのですが
TextFieldにcssとhtmlをセットして使ってるのですが
<p>
詳細情報
<p>なんちゃら〜</p>
</p>
みたいにタグが入れ子になったときに
詳細情報
なんちゃら〜
って表示するようにしたいのですが
TextFieldがDIVみたいなボックス(?)をサポートしてないので無理なんですかね?
563 :
Now_loading...774KB :2009/03/12(木) 16:08:57 ID:8BTCDvMv
AS3.0,WinXP-Pro,FlashCS3です。タイマーが動作しません。 Stageに置いたMC(mc1)のフレームアクションとして、この1フレーム目にSWF開始後 100msec経過時に1回実行するようなASを書いたのですがtraceが出ません。 var timerObj:Timer=new Timer(100, 1); timerObj.addEventListener (TimerEvent.TIMER, doLater_on); function doLater_on (timerEvt:TimerEvent) { trace ("100msec"); } どうしたら良いでしょうか?
start汁
>>564 startしてなかった・・・
ごめんなちゃい。
>>561 ヒント:それよりもなぜ答えてくれないかを考えた方がいいよ。
567 :
Now_loading...774KB :2009/03/13(金) 01:59:06 ID:u36zRRxy
FlexBuilderでmxml+ActionScript3でアプリケーションを作っているのですが コンストラクタ的な処理をしたい場合どうすればよいのでしょうか。 mxmlのなかにfunction アプリケーション名()を作ると コンストラクタを複数定義するんじゃねぇ!と怒られます どなたかご教示ください。宜しくお願いします
568 :
Now_loading...774KB :2009/03/13(金) 05:12:11 ID:7VPNICRZ
AS3.0,WinXP-Pro,FlashCS3です。Stageに置いたMC(boardM)に子として追加した MC(rootから見て孫)のフレーム番号が参照できず困っています。 これらの孫MCは7個あり、それぞれフレーム1かフレーム3で最初に設置されます。ところが プレビューではフレーム2と3しかなく、1への移行は予め記述した置いたMCのフレーム アクション MouseEvent.MOUSE_OVER で初めて変化します。 原因を探るため、取りあえずMC(boardM)にaddChildAtで子として追加する時点での フレームを番号を知ろうと思い、仮MCを var tmpMC:MovieClip=new tmpClass as MovieClip; として、 trace ("frame= "+tmpMC.currentFrame); を書きましたが何も出力されません。また、 getChildByName(インスタンス名).currentFrameでも何も出ません。 フレーム番号を参照できない原因は何でしょうか?
as3 box2dを使ったswfでCPU使用率40%アップしてしまうのですが、(メモリは空いてる) ・ビット演算使えるとこあれば使うなど、適切なアルゴリズムでコード最適化する ・アルファ控える ・mcの数抑える 何か他に一般的な策ありますか?とても力を入れて作ってきた作品なのでなんとか見て貰いたいです…
>>568 var tmpMC:MovieClip=new tmpClass as MovieClip;
ここで変換に失敗してnullが入ってるのかも?
>>569 まずどこのコードが一番実行されているか調べるんだ
大抵メインのループで全体の8割くらいの負担がかかってる
そこをとにかく最適化
まぁ物理エンジン使ってるからCPU40%はしょうがないと思うけど・・・w
簡単なプログラムなら物理エンジン使わないで自力で実装っていう手もあるよ?w
>>567 コンストラクタではないけど、creationCompleteイベントでいいんじゃない?
572 :
Now_loading...774KB :2009/03/13(金) 12:41:27 ID:u36zRRxy
>>571 なるほど、creationCompleteイベントで代用できそうです。
ありがとうございます。
あれ〜なんでビット演算するとうまくいくの こういうの苦手
あ〜こうするのと同じって事か int(Math.random() * 25) + 65
Zがかわいそうですw
あれ、intって切り捨てか。 でもビットマスクでも切り捨てになるんじゃね よくわかんね。
演算子|はそれぞれをintに切り捨てしてからORするから、切り捨て用だけに使ってるんだろね
579 :
くるりん子 :2009/03/14(土) 20:59:00 ID:g/QhtvfZ
オブジェクト obj が属するクラスの Class オブジェクトを取得するには どうしたらいいでしょうか? 下記の Java コードと同等のことをしたいのですが。 if (obj.getClass() == obj2.getClass())
質問させてください。 サーバーからロードしたjpgを複製する方法ってあるんでしょうか? as2でもas3でもいいです。 昔のloadMovieでは無理そうですが、 MovieClipLoaderとかLoader classでは可能なのでしょうか?
質問させてください。 MovieClipの輝度を、ActionScriptで変更したいのですが、 どうすればよいでしょうか?
582 :
580 :2009/03/15(日) 00:45:38 ID:yBA/8rwl
自己解決しました。 as2でもBitmapDataをゴニョゴニョやったらなんとかできそうです。
MovieClipクラスのインスタンスは宣言せずとも勝手にプロパティを作れますが、Spriteクラスのインスタンスはできません。 myMovieClip.hogehoge = 1; mySprite.hogehoge = 1; //エラーがでる この違いはなぜなのか、また、代入される値が型指定されてなくても良いのはなぜか、がわかりません。教えてください
584 :
Now_loading...774KB :2009/03/15(日) 01:30:36 ID:cbuNy40O
AS3.0,WinXP,FlashCS3 Loader()とloader.contentLoaderInfo.addEventListener()を使ってDLプログレスバー(プリローダー) を作ろうとしていますが、書籍にある記述では試作用Txtファイルの読み込みでエラーになり 出来ません。以下は書籍の記述の抜粋です。 loader.load(new URLRequest("u4714.jpg"));//DRC.txtだと不可 holder_mc.addChild(loader); function progressHandler(event:ProgressEvent):void { var ratio:Number = event.bytesLoaded / event.bytesTotal; progressBar_mc.scaleX = ratio; } 3.4MBのJPG:"u4714.jpg"では問題なく動作するのですが、これだと一瞬でロードが終わって しまいますのでもっと重い"DRC.txt"(26MB)で試すため、loader.load(new URLRequest("DRC.txt")) にしたところ、 Error #2044: ハンドルされていない IOErrorEvent : text=Error #2124: 読み込まれたファイルの形式が不明です。 という表示になります。パスもファイル名も確認したのですが・・・ 原因は何でしょうか?
Loader使うならNextかBulkLoader使った方がいいんじゃないかな
>>585 さんきゅうです。
>>586 CS3のヘルプを見ましたが、NextとかBulkLoaderというクラスは見当たりません。
ごめんGoogleCodeにあるAS3用ライブラリだよ、ぐぐるといいよ BulkLoaderは複数のファイルをアップロードしやすくて Nextは変態的なコードでアップロードできる
アップロードじゃなくてロードだね、ごめんよごめんよ Loaderでやるより分かりやすくロードできるからお勧めだよ
>>583 Spriteは普通のクラスでMovieClipはダイナミッククラス。
ダイナミッククラスは基本的に処理が遅い、エラー発見しにくいので
可能ならSpriteを使うと良い。
>>590 ありがとうございます。ダイナミッククラスというのを初めて知りました。
SpriteよりMovieClipが遅いといわれるのはタイムラインの有無が〜、と参考書で読みましたが、
このダイナミッククラスかそうじゃないか、もかなり影響してそうですね。勉強になりました。
>>581 HSBに変換して明度とか彩度いじって戻す
>>583 Spriteはdynamicでないから
リテラル以外は型指定必要だけどデフォルト設定なら型指定しなくてもエラーでないかも
>>584 テキストファイルはURLLoaderなんじゃね
コンピューターサイエンスをきちんと勉強した人じゃないから にわか知識だけど コンパイル時に名前の解決ができるクラスは メソッドやプロパティの呼び出しをアドレスの参照に置き換えてるから 早いんじゃないかな。 逆に動的に名前解決するいわゆるDynamicなクラスは 動作中に名前とアドレスの一覧を作って、その一覧の中から実際の アドレスを指すからその分だけコストがかかるんじゃない
ttp://www.flashiroha.com/script/as8.html ここのサイトの慣性効果付加型の追加のFlashを見て思いついたのですが
・星は1つだけで、マウスには追従せず位置は固定
・星にマウスが触れたとき、マウスの動きに合わせて星が伸びたり、元の大きさに戻ったりする
・ある程度伸びた後(マウスが星の固定位置からある程度離れた時)星は固定位置に戻るように伸縮運動をする(↑のサイトの慣性効果のように)
このような動作を表現したいのですが、どのように記述すれば良いですか?
最近ActionScriptの勉強を始めたばかりです。 例えば、 sendMessage("ああ"); ↑の処理を単純に無限ループさせたい場合はどのように記述すればいいのでしょうか? もしくは、一定間隔で繰り返しです。 条件などはないのです
596 :
Now_loading...774KB :2009/03/16(月) 00:01:09 ID:N5pMcpWw
音の動的生成を使おうと考え、
import nu.mine.flashnet.sound.core.*;」で外部のライブラリ使っています。
ところが下記のようなエラーが出てしまいます。
「Error: インターフェイス IAudioDataProvider が見つかりませんでした。」
環境:WinXP,FlashDevelop,Flex SDK,AS3
>>595 while(true){
sendMessage("ああ");
}
で無限にループするとは思います。
でも、抜け出せません。
>>595 です
>>569 有り難うございます
色々ググったりして、そこにはたどり着いたのですが、
これを例えば3秒ごとに実行するとしたら、どうなるか教えて頂けないでしょうか?
>>596 です。
3秒ごとに一定の処理をさせるということでしょうか?
だとすると
Timerを使うと良いと思います。
コンストラクタに
var cycle :Timer = new Timer(3000);//ミリ秒単位
cycle .addEventListener(TimerEvent.TIMER, cycle_action);
cycle .start();
周期的に行う関数を
private function cycle_action(event:TimerEvent):void {
sendMessage("ああ");
}
といった感じでしょうか?
誰か間違いがあれば修正をお願いします。
599 :
584 :2009/03/16(月) 04:58:21 ID:897ZPYfd
DLプログレスバー(プリローダー)について別の質問です。 URLRequest()でSWFロードの状況を知りたいのですが、重いSWF(20MBくらい)を CS3で生成しようとするとソフトが過負荷になるせいか10MB位のSWFが上限みたい です(当方、Core2Duo[E6550]のメモリー3GB)。 仕方なくこの10MBで試したのですが、ローカル環境で転送を意図的に遅くしようと USBメモリからSWFをLoadすると、これでも1秒も経たずにロードされてしまい、プログ レスバーの変化が見れません。 そこで(変な質問ですが)ネットにUpする以外に、Loadを遅くしてプリローダーの検証 をする方法はありますか?出来れば、1MB/1秒くらいが良いのですが。
CS3でプレビューすればダウンロードのシュミレートできるよ
>>600 この場合の「プレビュー」というのは、CS3でCtrl+Enterしたときの
ムービープレビューでしょうか?
Ctrl+Enterは毎回やっていますが、速過ぎて検証できません。
>>601 Ctrl+Enterで表示したFlashPlayerのメニューにダウンロードのシュミレートってないかい?
>>602 ありました。
というか、ローカルの1/1000位の速さになりますねw
attachMovie で割り当てたムービー クリップの onLoad イベント ハンドラが 数フレーム以上経って呼ばれる事ってあるんですか?
>>605 いつ呼ばれるかは保証されてないんじゃないかな。
onLoadは何かと怪しいから使わない
×シュミレート ○シミュレート
609 :
Now_loading...774KB :2009/03/17(火) 04:18:58 ID:CLk1s3WM
StageにPDFを読み込む方法が分かりません。 FlashCS(AS3.0)をWinXPで使っています。 目的のPDFはTest.pdfという名前ですが、本に載っている方法を参考に フレームアクションに以下のように書きました。 var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, comp); loader.load(new URLRequest("Test.pdf")); function comp(event:Event):void { trace("completed"); } completedは出ますがStageに何も現れません。 アドバイス願います。
pdfに対応してるのかどうかわからんが、addChildは必要だろ
>>610 レス有難うございます。addChildということで、下のようにしましたが今度は
1067: 型 flash.net:URLLoader の値が、関連しない型 flash.display:DisplayObject に暗黙で型変換されています。
と出ます。
loader.load (new URLRequest("Test.pdf"));
placeM.addChild (loader);// ←追加した行(placeMは空MC)
function comp (event:Event):void {
JPGやSWFをロードする別のASでは問題なかったのですが・・・
この場合、どうすべきでしょうか?
>>611 URLLoaderはaddChildできません。
それ以前に、
>>609 のコードはpdfをテキストとして読み込んでいるだけなので、
単純に表示させることは出来ません。
URLLoaderでpdfを読み込み、解析し、表示させることは可能でしょうが、
pdfのファイルフォーマットについての詳しい知識が必要です。
(誰かがクラスライブラリ化してくれていたら別ですが)
また、Loaderもpdfには対応していないため、表示させることは出来ません。
Airが使えるなら、
HTMLLoaderというクラスでpdfを表示させることが出来ます。
>>612-613 さんくすです。
「Flash便利帖」(毎日コミュニケーションズ)のp044に「MX2004からPDFを
読み込めるようになりました」という一文があったのですが、最初これを誤解し
ASでLoadがOKだと思っていました。
あと、ライブラリに入れようとしたら「読み取りに問題あり」というメッセージが出ました。
やっぱり一工夫必要のようですね。
AS3です。 text.mxmlにて public function onApplicationComplete():void { var hoge:Hoge = new Hoge(); hoge.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onPropertyChanged ); } public function onPropertyChanged ( e:PropertyChangeEvent ):void { trace( "PropertyChanged" ); } Hoge.asにて [Bindable] public var bindVar:Number; を容易 これでhogeのbindVarが変更されるときonPropertyChangedが呼ばれるだろうと踏んだのですが呼ばれません。 どうすれば呼ばれるようになるのか教えて下さい。
Progressionのソース読んでたら case !!_parent && !!_parent.getSceneByName( value ) とか q &&= ( ( scenePath.indexOf( "?" ) != -1 ) ? "&" : "?" ) + q; 不思議な演算子の使いかたでてくるんだけど これ何の意味だかわかる人いる?
〜 こんな演算子も謎
AS2で_rootの1フレに書く内容を外部ファイルにしたい場合、 #include 'root.as'とかすると、 Flashのエディターで整形しようとしたときに Classファイルじゃないということで エラーになってしまいますが、全てのASを外部にしたい場合には どういう書き方をすればいいのでしょうか?
>>618 ターゲットファイルがなければエラーにならないはず
ち、マルチだったか
初歩的な質問ですが、色々ググってみても見つからないので、 こちらで質問させてください。 DateFormatterでミリ秒を表現するとき、なんという文字を使えばいいのでしょうか。 "JJ:NN:SS.ミリ秒"と表示させたいのです。 それとも、探しても見つからないということは、ないということですかね…
てすと
DateFormatterってmxのクラスかな flex_sdk_4/frameworks/projects/framework/src/mx/formatters/DateFormatter.as にあるソースもみたし、APIドキュメントも確認したけど ミリ秒には対応してなさそうだよ。 ていうか検索するまえにAPIドキュメントみるほうが早いと思うけど
ミリビョウ使われてるサイト見たことある。解析してみ
うん、Dateクラスでミリ秒まで扱えるから Dateクラス受け取ってフォーマットして返すようなクラス作るか 拡張すればいいぽ
AS3です 落下するMovieClipを作っています 加速度のプロパティを加えるにはどう書けばいいでしょうか? [Embed(source = '../lib/star.swf')] private var EmbedClass:Class; private var vx:Numbe; var star:MovieClip=new EmbedClass (); star.vx = 0;//ここの書き方が分かりません
カスタムクラス作れ
628 :
626 :2009/03/20(金) 11:33:00 ID:+/mqXFDc
>>627 カスタムクラスでやってもよいのですが
クラス分けしないでやってみたいのですが方法ってあります?
[Embed(source = '../lib/star.swf')] private var EmbedClass:Class; private var vx:Numbe; var star:MovieClip=new EmbedClass (); vx = 10; star.x = vx; こんなんじゃいかんの?
>>626 初速度0の場合、加速度aと時間tと距離Lは
L=at^2/2
物理の教科書が無ければ、微積の教科書を参照(距離の時間による2次微分は加速度)
多分、加速度じゃなくて速度ベクトルを毎フレームを微分された時間と考えて 足してやろうとしてるんだよ。
star.x += vx か もし本当に加速度をやろうとしてるなら 加速度は速度の各フレーム毎の変化だから vx += ax; star.x += vx; ActionScriptアニメーションみて確認してみたけど
AS3で初歩的な質問いいでしょうか ファミコン並の解像度のゲームを作ろうと思ったのですが サイズが小さすぎて頭が沸騰しそうです swfをブラウザ上で拡大して設置する方法は無いでしょうか ちなみにFlexSDKです
>616 上はわからん。 下は、「三項演算子」でググればたぶんわかる。 きっとURLにGETメソッドのパラメータを付与する式だろ。
>>616 >case !!_parent && !!_parent.getSceneByName( value )
気になって調べてみたら、なんでも、
if (defined(_parent) && defined(_parent.getSceneByName( value )) ) {
}
ことらしい。AS3にはdefinedないんだっけ?
636 :
626 :2009/03/20(金) 18:03:32 ID:+/mqXFDc
>>629-632 加速度は本題じゃないんです、紛らわしくてすいません。
mcに自前のプロパティを設定する書き方が知りたいんです
ちょっと別の物で書いてみたら出来ました。
当違いの検証なのかも分かりませんが
書き方以前の問題なのかな?
var mc:MovieClip=new MovieClip();
mc.cnt=0;
trace(mc.cnt);//0
>>627 仰るとおりStar.asを用意するのが慣例なんですかね
すいません、もうすこしいじってみます。
ありがとうございました。
>>636 アクサ(get/set)は? MCに独自のプロパティ(例:mc.atai とか)が設定できる。
参考: 「一週間でマスターする ActionScript 3.0」(毎日コミュニケーションズ)のp251
・・・結局はカスタムクラスを作ることになるけどw
ファイルを読み込んでアタッチしてる そのクラスのプロパティにすればいいだけじゃん。 なんで無理に動的変数を使用しようとするのか 分からない。2.0のときの癖か
639 :
Now_loading...774KB :2009/03/21(土) 10:00:26 ID:b6HCju0B
FlashCS3(AS3.0)をWinXPで使っています。
3Dライブラリ実装を勉強するため、『1ランク上の技を身につけるFlashの強化書』(毎日コミュニケーションズ)
のp108を試しに実行しまいたがエラーが出てしまいます。
本の通りライブラリとFlaファイルをprojectフォルダ内に配置し、パブリッシュ設定をしましたが、
Tweenerライブラリに限って
1046: 型が見つからないか、コンパイル時定数ではありません : Void。
のメッセージが頻発しています。
この本のこの箇所を実行された方がいましたらアドバイスを願います。なお、サポートサイト
ttp://swwwitch.com/books/mycom/theFlash を見てもトラブル対応法は分かりませんでした。
>>639 AS3なら、Voidじゃなくてvoid(全部小文字)だと思うんだけど、そんな単純な話ではない?
>>641 DLしたのってAS3用のtweener?
Box2DFlashAS3が上手く読めれていない可能性を考えたのですが、 Box2DFlashAS3に入っている『HelloWorld.fla』は、エラーが出ずに出力できました。 ただし、他の方のサイトでBox2DFlashAS3を使ったサンプルセットをDLさせていただいて その中のflaを使用した場合は、やはりエラーが出てしまいます。 エラー内容は上記と同じ、未定義関係のエラーです。 スクリプトのエラーなのか、もしくはそれ以前のファイル構造で間違いがあるのでしょうか。 アドバイスを頂けると助かります。 また、もしよければ、上記サイトのスクリプトで動かせているFlaとASをお持ちでしたら、参考にさせていただけると助かります。 図々しいお願いではありますが、どうぞよろしくお願いいたします。
そんな文誰も読みたくない 人の気持ちが分からないのは致命的 書き直してくれ
Box2Dは移植されたライブラリだから エラーでやすいね。気をつけてかかないと。 でも、その情報だけじゃ何が原因か漠然としすぎてて さっぱりだけど
プログラム解読していけば知識にもなって良いんじゃないかい?
648 :
Now_loading...774KB :2009/03/22(日) 21:07:49 ID:APdCqyAq
FlashCS3(AS3.0)をWinXPで使っています。 社内の他の人が別のソフトで作った6個のSWF(swf0〜swf6)をAS3で組んだ SWF内に入れ子としてswf0→swf6の順でLoadした際、 Branching::script:rdcmndResume = 1; deepak branching : scripteval:[object Object]; というメッセージが現れます。これは何を意味しているのでしょうか? ググりましたが分かりませんでした。
>>648 swf0-swf6内部でtrace()してる、ってわけではないんだよね?
>>649 どうも。
試しにswf0をMotionDecompiler2でデコンパイルしたところ、rdcmndResumeという
変数がありました。
しかしこれはASでtraceしている訳ではなく、Player9のデバッグ機能(?)で出力
されている模様です。
同様に考えると、「deepak branching」もこの機能で出力されているのかも知れません。
エラーとは明示されていないので、その手前のお知らせメッセージなのかも。
ただ単に書き忘れじゃねーのw
653 :
Now_loading...774KB :2009/03/23(月) 08:27:03 ID:HedBTQRa
>>651 as2.0のclassは全てdynamicだから指定する必要がないとか
654 :
Now_loading...774KB :2009/03/23(月) 08:28:30 ID:HedBTQRa
ごめん、object classの間違い
655 :
651 :2009/03/23(月) 09:18:31 ID:psz/3AYi
ありがとうございます。 書き忘れかなとも思ったのですがネット上のリファレンスもCS3のリファレンスも同じだったので意図的なのかなと思いました。 2.0だとプロトタイプベースでclassは中身の規則が1.0のまま。 dynamicは単にプロパティを後で追加できるかどうかのフラグにすぎない。 Objectクラスは例外でプロパティを後で追加できる。 3.0だとクラスベースなのでclassの規則は絶対。 dynamicを指定するとclassの属性そのものが異なる。 Objectクラスも例外ではない。 ってことかなあと予想してます。
見当違いだと思うけど、 Objectをdynamicにするとそれを継承する全クラスがdynamic属性になっちゃうとか
657 :
Now_loading...774KB :2009/03/23(月) 11:56:50 ID:N0Ra0SgM
progression + FlashDevelop + AS3 で開発してるのですが アクセス者のIPアドレスを取得することはできますか? 「こんにちは!またお会いしましたね」 とかやりたいのです。
そういうのはSharedObjectかcookieでやりゃいんじゃね?
659 :
651 :2009/03/23(月) 23:55:38 ID:psz/3AYi
ローカル環境にてプロジェクタファイル?(exe)を動作させています。 環境はMacromedia Flash Professional8 (AS2.0)でOSはWindows Vista 32bitです。 やりたいことは画面の更新タイミングとflashの同期を上手くとることなのですが。どうしても上手くいきません。 現在Flash側の設定をフレームレート100 ディスプレイのリフレッシュレートを100にして動作させています。解像度は1280*1024 動作させるとどうしても画面の切れ目と言いますか下から上へと書き換えていくような部分が見えてしまいます。 そこでディスプレイの垂直同期信号のようなものを取得する方法はないでしょうか? または、上手く同期をとる方法がありましたらアドバイスをお願いいたします。
as3です 1フレ: ドキュメントクラスとしてMain.asを読み込み Main.as gotoAndStop(2); textField.text="hi"; 2フレ: textFieldを配置 当然1フレからtextBoxを参照できないのでエラーです Main.asにactionscriptをまとめて書くにはどうやって書けばいいのでしょうか? よろしくお願いします
as3+flashCS3です。連投すいません。 外部クラスファイルから、ステージの幅を取得するにはどうすればいいのでしょう? ステージサイズは400x600にしてあります 1フレ var main:Main=new Main(); Main.as package { import flash.display.Sprite; import flash.display.Stage; public class Main extends Sprite { function Main():void { trace(this);//[object Main] trace(stage.stageWidth);//エラー } }} //TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 とエラーになってしまいます よろしくお願いします
>>661 フレームカウントはナンボなん? フレームをカウントする変数(var count:uint)とかを
置いて count>0 は?
>>662 root参照にMovieClip(root)は?
664 :
Now_loading...774KB :2009/03/24(火) 20:34:06 ID:KyfJPKIe
環境)WinXP-Pro,FlashCS3-Pro(Player9.0,AS3.0) 外部SWFを親SWFに入れ子として読み込んだ際、そのサイズ(幅)が記述の仕方によって 異なるので悩んでいます。 var swfLoader:Loader = new Loader(); swfLoader.contentLoaderInfo.addEventListener (Event.INIT, initLoad_on); で trace ("swfLoader= "+swfLoader.contentLoaderInfo.width); ・・・ @とすると、 これは swfLoader= 40 になります。 ところが、 function initLoad_on (loadEvt:Event):void { trace ("loadEvt= "+loadEvt.target.content.width); ・・・ A } では loadEvt= 24.75 となり、幅が違います。 @とAではどちらが正しいのでしょうか?(何故違いが生じるのでしょうか?)
>>664 外部SWFとやらのサイズが1フレ目とそれ以降で変化してないか?
>>666 それで、外部SWF本来の大きさは40と24.75のどちらなの?それともそのどちらでもないの?
668 :
667 :2009/03/25(水) 00:19:13 ID:gAHRjt4M
外部SWF読み込みプログラムを書いてたところだからついでにテストしてみた。
loaderObj = new Loader();
var url = new URLRequest("sub.swf");
loaderObj.load(url)
trace ("swfLoader= "+ loaderObj.contentLoaderInfo.width);
ここでのtrace()は無意味。ロードも何も動いてないからサイズは不定。
そもそもFLASHの出力ウィンドウに
Error: Error #2099: 読み込み中のオブジェクトは、十分に読み込まれていないので、その情報を表示することができません。
っていうエラーが表示されているはず。
loaderObj.contentLoaderInfo.addEventListener(Event.INIT, initLoad_on);
function initLoad_on (loadEvt:Event):void {
trace ("loadEvt= "+loadEvt.target.content.width);
}
ここでのサイズは正しい。
ついでに
loaderObj.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedSWF);
これでも試したけど、当然、同じサイズになる。
よくわかんないのが、
>>664 の@の記述なんだけど、それだけだとロードしないよね?
669 :
Now_loading...774KB :2009/03/25(水) 01:17:39 ID:NgKxofqa
AS3において、 FlashDevelop CS3 Flex Builder この環境が今あるのですが。みんなどんな感じに組み合わせてますか? 例えばCS3でやっててASはFlashDevelopで書くって人いますよね
金持ってるな羨ましい。
FlexSDKとcmdとwonderflでやってる
なんでwonderflのスレがないんだろう
673 :
Now_loading...774KB :2009/03/25(水) 07:05:27 ID:jqbChLig
AS2について質問です。 TWEENERというライブラリを使用しているのですが1フレ目でMCにトゥイーンさせて、トゥイーン中にGOTOとかで別のフレームに飛ばすとトゥイーンの無限ループにハマります。 何をつけたせば脱出できますかね。
>>669 エディタは軽い方が好きなのでCS3とjEditでやってます
FlashDevelopは入れてあるけど使ったことないな
やっぱりIDE使ったほうが効率は良いもの?
>>674 Flashdevelop
変数やカスタムクラスが入力候補に表示される
プロジェクト管理
スニペット
jEditは使ったこと無いけどAS3の補完機能ついてるの?
676 :
662 :2009/03/25(水) 11:05:05 ID:TlJcB1Wk
>>663 アドバイスありがとう
>root参照にMovieClip(root)は?
nullになってしまいました。
もう少しシンプルにしたものです。
フレームアクション。ムービークリップCatをリンケージ
var myCat:Cat=new Cat();
addChild(myCat);
Cat.as
function Cat():void {//コンストラクタ
var myroot:MovieClip=this.root as MovieClip;
trace(myroot);
trace(MovieClip(root));
trace(this.root);
x=stage.stageWidth/2;
y=stage.stageHeight/2;
}
全部nullとエラーでした
addChild(myCat);が実行される前なのが原因でしょうか?
画面中央に配置するにはどう書けばいいのでしょう?
x=stage.stageWidth/2;
y=stage.stageHeight/2;
>>676 引数で渡すのがベストでしょうか?
var myCat:Cat=new Cat(stage.stageWidht/2,stage.stageHeight/2);//フレームアクション
function Cat(x:Number=0,y:Number=0):void {//Cat.as コンストラクタ
>>674 jEditは基本的にカラーリングのみ
プラグイン追加でもうちょっと機能追加出来るとおもうけど
サクサク使いたくて選んだからほとんどそのまんま使ってる
FlashDevelop高機能だね
ちょっと試して実感してみることにするよ、ありがと
モッサリしてないといいな
>>676 addEventListener(Event.ADDED, initialize);
でinitialize関数の中でならstage参照出来た
681 :
657 :2009/03/25(水) 13:31:48 ID:HXZ1hbj4
>>658 やはりActionScript3.0では無理ですか。
Flashvarsでswfにipアドレスを渡そうかなと考えたのですがどう思いますか?
もっと効率いいやり方とかあったらアドバイスよろしくお願いします。
682 :
662 :2009/03/25(水) 13:32:01 ID:TlJcB1Wk
>>680 Event.ADDEDで調べたら参考になるサイトがものっそ出てきました
色々と納得できて満足です
ありがとう
>>681 無理じゃなくって、やりたいことはipアドレス必要としないんじゃないの?って
話だと思うんだが。
そりゃサーバ介してipアドレスチェックとかは出来るだろうけどさ。
>>681 FLASHでIPを受け取って、それでどうやって再訪問チェックするつもり?
658の回答で十分。IPなんて取る必要ない。
てかsharedobjectについて調べてもないだろ?
>>685 textMateは日本語使えないからダメ。
無理矢理使う方法あるけどイマイチ。
IPアドレスだったらPHPで簡単に調べられるよ。 Flashはクライアント側で動くからIPアドレスは取得できないぽいよ。 IPアドレスを取得できるのはサーバー側だよ。
IPアドレスは固定とは限らないのに、それを識別に使ってもしょうがないだろ SharedObjectで充分
AS3です。 NetStreamを使ってmp4を再生しているのですが、seekした直後にノイズ(というか前の位置の音)が一瞬だけのってしまいます。 seek前にボリュームを0にすると消えるのですが、seek後に再度ボリュームを戻すとやはりノイズがのってしまうようです。 ボリュームを戻すタイミングをseek直後、NetStream.Seek.Notify、NetStream.Buffer.Fullなどいろいろ変えてみたのですが無駄でした。 とりあえずTimerを使って250ミリ秒後にボリュームを戻すようにすると、ノイズ部分は回避できたのですが、他にスマートな方法はないでしょうか? よろしくお願いします。
>>667 すいません。ご指摘の
swfLoader.contentLoaderInfo.addEventListener (Event.INIT, initLoad_on);
と
trace ("swfLoader= "+swfLoader.contentLoaderInfo.width); ・・・ @
は直に繋がっていません(誤解を招いてしまいました)。
今回のコンストラクタ以降の記述を抜粋してレスしようと思いましたが、2chブラウザ(Live2ch)が
エラー表示するのでサイズ調整用のJPGと共にZipでUpします。
http://uproda11.2ch-library.com/167970yCh/11167970.zip (何故かDL-Keyが設定されました。キーは 1 です)
自作のサイズが明確なSWF(160x160) ext1_1.swf では、swfLoader1= 160,loadEvt1= 173.4
swfLoader2= 160,loadEvt2= 173.4 となり、loadEvtが大きな値を与えます。
以上は解決の糸口になりますでしょうか?
contentLoaderInfo.width ロードされたコンテンツの規格幅 content.width ロードされたコンテンツのルート表示オブジェクトの幅 らしいから、例えば、ロードされたときにコンテンツを拡大したりするとcontent.widthの値は変わってくると思う
>>692 Upローダから拾ってきてテストしてみた。メインのasは
var smpl = new AS_Wink_02();
これだけ。AS_Wink_02.asには手を加えてない。
一緒に入っていた画像で試したら、
swfLoader1= 428
loadEvt1= 428
swfLoader2= 428
loadEvt2= 428
ってなる。元の画像と同じサイズだから問題なし。ここまではいいよね?
もしこの時点で428じゃない数値になっているのだとしたら、Upローダに上がってる
AS_Wink_02.asと違うことしてない?
外部SWFでも試したけど同じだった。
ただ、あえて違うようになる外部SWFを作る事は簡単で、外部SWF側で、
this.width *= 2;とか、外部SWF内部で表示しているMCをSWF外に
移動させたりすると(mc.x = -100とか)、外部SWF自体の大きさが変化するので、
それを読み込むローダ側でもサイズが違ってくる。
もし、Event.EnterFrameを設定してサイズをtrace()で表示してみるといいかも。
1フレ毎にサイズが変化してるかもしれない。
695 :
Now_loading...774KB :2009/03/26(木) 11:33:54 ID:OMYXNhPK
FlashDevelopでAS3を実行するときってプルダウンからと Ctrl+F8 しか無理? 実行アイコンが欲しいな
F5
AS3.0です shift-jisのxmlの読み込みが安定しません。 typeエラーがでる・・・3回に1回ぐらい・・・ System.useCodepage = true; あたりがおかしくなっていると思うんですが
ものすごく初歩的な質問になってしまうのですが、 getURLとstop()を同時に使おうとすると自動リピートになってしまいます。 クリックしたらいつでも違うページに飛ぶようなアイコンをフラッシュで作りたいのですが、 なんでstop()入れているのにとまらないかわかりません。。。 対策はありませんか?
699 :
Now_loading...774KB :2009/03/27(金) 00:19:05 ID:p0VLxbLZ
PhotoShopで作った画像をCS3にそのままドラックしたら変なフォルダまで付いて来たのですが、そのフォルダを消すと画像まで消えます。 フォルダを消して画像だけをシンボル化したいのですが無理ですかね?
>>693-694 どうも。
Loadされたものを特に拡大・縮小していないのですが・・・
とりあえず、実際に表示された外部SWFは元のサイズの
ままなのでこれで大丈夫だと思います。
有難うございました。
質問なのですが、ブログパーツ形式のFlashを作っております。 ExternalInterfaceを使ってjsと連携をとっているのですが、下記エラーが出て煮詰まっています・・・。 uncaught exception: Error calling method on NPObject! [plugin exception: Error in Actionscript. Use a try/catch block to find error.]. 色々試しているのですが、どれもうまく行かなくどうすればいいでしょうか? どなかた教えてください・・・。
701です。 エラーを吐き出してるのは、Firefoxのfirebugです・・・ ActionScriptは2です・・。 よろしくお願いします・・・。
>>698 stopさせるmcの階層が違うとか。
>>699 フォルダ?ライブラリに?フォルダ内の画像だけ外に出せば?
>>701 as側でのエラーで大体そのメッセージが出る。
何かの参照が切れてるとかそんなのが多いのでtraceしまくれ。
質問です。FlashCS3で、as3をやっています。 Flashオーサリングツールで、2つレイヤーを用意し、 上のレイヤーに掛け布団、下のレイヤーに敷布団のムービークリップを配置。 そこにnewで人間インスタンスを生成、addChildすると、 人間は一番上(掛け布団の上)に出てきますよね。 掛け布団と敷布団のあいだに人間を挟みたい場合はどうすべきでしょうか。 自分なりに考えると、上下レイヤーのあいだに3番目のレイヤーを作り そこに空間インスタンスを配置。空間.人間 という階層構造にすれば意図した表示になりそう。 ですが、これが一般的な方法なのかどうかがわかりません。 asからレイヤーの順序をいじったり、指定したレイヤー上にインスタンスを乗っける方法はあるのでしょうか。 それとも、レイヤーというのはオーサリング上の概念であって スクリプトからはコントロールできないものなのでしょうか。 長文すんません。
>>704 配置したMovieClipにインスタンス名をつければasからいじれる
addChildした順に表示されるから
敷き布団
人間
掛け布団
の順にaddChildすればうまくいく
またはaddChildAtで重なり順を指定して表示することができる
詳しくはリファレンスみろ
>>703 返信ありがとうございます。
同じサーバー内だと正常に動くのですが、ブログパーツ形式なので、違うドメイン先での動作が必要となります。
その際に、先ほどのエラーが発生します・・。
Security.allowDomain("*");やswfobjectのso.addParam("allowScriptAccess", "always");などは設定しているのですが…。
なかなか解決方法が見出せません…。
>>705 ん〜、なるほど
ただの絵と思わずに、布団にも名前をつけるとコントロールできるんですね。
ありがとうございました!
>>706 crossdomain.xmlが原因?
709 :
Now_loading...774KB :2009/03/27(金) 18:47:17 ID:YBKdph9d
>>688 ありがとうございます。
Javascriptかperlでip取得してswfにflashversで送る手法でやってみます。
再訪問を確認するには、訪問者IPをXMLかなにかに記憶して、そのIPリストに同じIPがあれば
ってかんじで実現しようとしてました。
>>709 どうしてそこまでIPアドレスにこだわるの?
どうしてSharedObjectに関するレスはことごとくスルーなの?
IPが同じだって、別の人の可能性もあると思わないの?
それとも他のID情報かなにかと関連づけしてあるの?
でもちゃんとやるなら PHPかCGIでログインページ作って DBにユーザー名とパスワード入れるのが あとあと機能の追加などしやすいかも
自分の理解した方法しか頭にないんだろうな。 Shared Object?何それ?分かんないからipが同じかチェックした方が簡単じゃん。 そんな風に思ってんじゃない?
713 :
Now_loading...774KB :2009/03/28(土) 07:05:47 ID:TzSVBD2k
3Dゲームとアニメを作ろうとしているのですが、FlashがいいかShockwaveがいいか迷ってます。 どちらがいいでしょうか?
Shockwaveってなんで開発放棄されたの?
Directorはまだ開発されてるみたいだけど ShockWaveって消えたんだ
SWFProfilertという、グラフ状でメモリ監視できるライブラリを知って使ってみたのですが、 自分の作ってるflashで使って見ると、最初のスキップできるオープニングでアニメーション等をやって、 オープニングが終了した時点で、その時に作った&使ったSprite等を全て消した時にGC機能を使ってからメモリ使用量のグラフを見ると、 GC前はグラフ表示が上端にあったのが、表示の中央ぐらいの高さまでしかグラフは下がりませんでした。 これは消そうにも消されてない記述ミスがあるから消えてない物が残ってるのでしょうか? テストで新しいflaファイルを作って、200枚のスプライトを作って消して、GC機能を使ってグラフ表示を見ると、 GC前はグラフ表示が上端にあったのが、グラフ表示の下端、監視開始した瞬間程の高さまでグラフは下がっていました。 どれ程の作業や作った物等があっても、それらの物を全て消した場合、このようにメモリ使用量が監視開始程まで少なくなるのが正常なのでしょうか? それとも、作業をした後に全て消してみても処理の残骸?みたいなのが残って、メモリは消費されたままという事もあるのでしょうか?
717 :
Now_loading...774KB :2009/03/29(日) 11:30:23 ID:8xPHgamY
as2(Flash cs3)について質問です。 同階層にmc_1〜mc_100の100個のmcがあったとして、 配列Hairetsu[i](iは1〜100)の値が真なら対応する番号のmcを表示、というスクリプトを作りたいんですが、 ターゲットパスの一部に変数を使いたいばあいはどう記述すれば良いのでしょうか?
以前書いた、Progressionにおける SceneObjectクラスの220行目になどで使われている case !!_parent && !!_parent.getSceneByName( value ) : { throw new IllegalOperationError( ErrorMessageConstants.getMessage( "ERROR_9004" ) ); } !!という演算子の使用ですが、 JavaScriptのライブラリJQueryのソースにて is: function( selector ) { return selector ? jQuery.multiFilter( selector, this ).length > 0 : false; }, と以前は書かれていた関数が、以下のように変更になっている事より理解できました。 is: function( selector ) { return !!selector && jQuery.multiFilter( selector, this ).length > 0; } 演算子!!はselectorがundefinedであった場合も確実にfalseが返る事を担保するために 使用されていたのですね。 冷静に考えると単純な事でなんですぐに気づかなかったのかという感じですが。 ご参考までに
722 :
718 :2009/03/30(月) 01:09:47 ID:HQdm+WAC
>>719 ,720
ありがとうございます!解決しました。
actionscript3でランダムで色指定したいんですが 取得したいのが0x666666とか0xAAAAAAとかのゾロ目のグレー系です Math.random()を使った計算でグレー限定取得なんてできるでしょうか?
>>725 var c:uint = Math.random() * 0xf;
c |= c << 4;
var color:uint = c << 16 | c << 8 | c;
こんなんでどう?
FLVでプログレッシブダウンロードで 10分の動画の3分から開始したいんですが どうやるか情報ないですか?
>>726 スクリプトありがとうございます
処理の詳細は私の頭ではまだ理解できていませんが・・・何度か試した所ランダムでグレー表示がされました
ありがとうございます!
>>727 netStreamのplayで開始時間指定できないか?
>>728 まず0x0〜0xFの値をランダムで選ぶ 例として、0xFが選ばれたとする
c |= c << 4 は c = c << 4 | c と同じ
0xFを2進数で表すと1111なので、4ビット左にずらすと11110000つまり0xF0となる
0xF0 | 0x0F で 0xFFとなり、ゾロ目の2桁ができる。
c << 16 | c << 8 | c
で 0xFF0000 | 0x00FF00 | 0x0000FF となり 0xFFFFFF 各成分全て同じ値のグレーになる
>>729 FLVPlaybackコンポートを使っていてまだその辺り勉強できてませんでした
ヒントありがとうございます
また3分から5分まで再生して一度プレイヤーを消してボタン出しそれを押すと
5分から最後まで再生したいのですがこれも可能でしょうか?
自分自身のムービーを切り替えるボタンを含んだムービーで 呼びだされるムービーへ変数を渡したい場合 自分が消えるので普通の方法だと難しいと思い GETメソッドを使って次のムービーに変数を渡そうと考えました 1,2,3というムービーがあり、ボタンを押すと1>2>3>1と切り替わる場合で 元はボタンのon(release)イベントでthis.LoadMovie("2.swf")するだけで動いたのですが 今再生中のムービーのフレーム位置を次のムービーに引き継ぎたいと思いました そこで on(release){ level0.frame=_currentframe; this.loadMovie("2.swf","GET"); } にして 2.swfにて1フレーム目に this.gotoAndPlay(_level0.frame); と書いたのですが上手く動きませんでした FlashPlayerだとGETメソッドは送れないのでしょうか? WindowsXPにてFlash CS4を利用していますがActionScriptは2.0です
732 :
731 :2009/03/31(火) 09:51:44 ID:a/VBj/Ts
level0.frame=_currentframe; は _level0.frame=_currentframe; ですね、表記間違えです 下のでも上手くいきません
ActionScript3.0 1. あらかじめムービークリップhogeAをステージ上に配置します 2. タイムラインから別のムービークリップhogeBをステージ上に動的に配置します(addChild(hogeB)) 3. ムービークリップhogeBからムービークリップhogeCをステージ上に動的に配置します(stage.addChild(hogeC)) 4. ムービークリップhogeCからムービークリップhogeAの座標を参照したいのですが、どうすればいいか分かりません MovieClip(root).hogeAとする →強制型変換に失敗しました。flash.display::Stage@384df99 を flash.display.MovieClip に変換できません。と出る Object(root).hogeAとする →flash.display.Stage にプロパティ hogeA が見つからず、デフォルト値もありません。と出る AS2.0なら_root.hogeAだけで良かったのに……なんでこんなわけ分からんことになってるのか意味不明です。 どうやったら出来るでしょうか。ご教示下さい
>>732 面倒だから、ベースswf作って、そこに読む込むようにしたら?
>>730 できるから頑張れ
>>733 俺はAS2がわからないからどう意味不明なのかわからないけど、
表示オブジェクトのツリー構造と、rootがどういうものなのかを意識すればわかると思う
まず、flashの表示オブジェクトの親は必ずStageになっている
次に、flashをロードするとドキュメントクラスというものがStageの下に追加される
ドキュメントクラスはflashで一番最初に読み込まれる場所のことで、タイムラインで作っているなら、メインタイムラインがドキュメントクラス
ドキュメントクラスを自分で指定してクラスベースで作っているなら、そのクラスがドキュメントクラスとしてStageの下に追加される
そんで
>>733 の説明順に配置していくとこうなる
1. Stage-----ドキュメントクラス(メインタイムライン)-----hogeA
2. Stage-----ドキュメントクラス(メインタイムライン)-----hogeA
おっと途中送信w 1. Stage-----ドキュメントクラス(メインタイムライン)-----hogeA 2. Stage-----ドキュメントクラス(メインタイムライン)-----hogeA | -----hogeB 3. Stage-----ドキュメントクラス(メインタイムライン)-----hogeA | | -----hogeC -----hogeB こんなツリー構造になってる で、この状態から、各表示オブジェクトからrootとやるとどこを示すのかってのが問題なんだが、 Stage以下からrootとやると、Stageを示すが、ドキュメントクラス以下からrootとやるとドキュメントクラスを示すことになってる その状態で、MovieClip(root).hogeAとすると、StageはMovieClipにできないのでエラーがでる Object(root).hogeAとしてもStage直下にhogeAはないのでエラーがでる なので、hogeCをドキュメントクラス以下に置くか、stage.getChildAt(0)とかでドキュメントクラスの参照をとってくるとかすればいけると思う
AS2では_rootはムービークリップだからね
738 :
Now_loading...774KB :2009/03/31(火) 22:37:46 ID:ga3JpuEz
3.0です。 下記のように引数を関数に渡しているイベントが removeEventListenerで削除できません。 なにか良い方法はないでしょうか? //イベント追加 for(var i=0;i<4;i++){ moveBtn[i].addEventListener(MouseEvent.ROLL_OVER,directOver(i)); moveBtn[i].addEventListener(MouseEvent.ROLL_OUT,directOut); } function directOver(myNum:Number){ return function(evt:MouseEvent){ evt.target.parent.gotoAndStop(myNum+2); } } function directOut(evt:MouseEvent){ evt.target.parent.gotoAndStop(1); } //イベント削除 for(var i=0;i<4;i++){ //↓引数を渡したイベントは削除できてない moveBtn[i].removeEventListener(MouseEvent.ROLL_OVER,directOver(i)); //↓このイベントは削除できてる moveBtn[i].removeEventListener(MouseEvent.ROLL_OUT,directOut); } よろしくお願いします
>>736 うへー、なるほど、よくわかりました。ありがとうございますー
Stage=メインタイムラインだと思ってました…っ
もう頻繁に「そいつは見つからん」とか言われてドコーって感じだったんですが、そういうことだったのですねえ
740 :
Now_loading...774KB :2009/04/01(水) 00:38:19 ID:ymbm7Z+M
AS3.0,WinXP-Pro,FlashCS3です。
(
>>733 さんの質問に関連してるかも知れませんが)AS3.0でのプロパティ参照で質問です。
Stage上にMC(Slider,インスタンス名:sliderR)を置いて、この子のMC(Grip,インスタンス名:grip)
を配置しました。ライブラリのGripにはASファイル:Grip_01.asが関連付けされています。
プレビューしてRootのタイムラインからGrip_01の変数colorVal(var colorVal:uint=255;)を sliderR.grip.colorVal
で参照しようとしたところ、
#1069: Grip_01 にプロパティ colorVal が見つからず、デフォルト値もありません。
というエラーが出ました。これは sliderR.getChildByName("grip").colorVal としても同じでした。
そこで、colorVal をオーサリング画面のシンボル定義(Gripのタイムライン)で再定義したところ、この
エラーは消えました。
ASファイルでの定義とタイムラインでの定義では変数の認識の仕方が違うのでしょうか?
(タイムラインの方が優先でしょうか?)
よろしく願います。
741 :
731 :2009/04/01(水) 01:17:47 ID:8gKFgV+C
どのswfから再生しても動くという条件なので親swfが使えないんです 理屈的にはこの方法で次のムービーへ変数が渡せそうなんですが _level0にある変数が送られるという認識でしたが GETメソッドの使い方が間違っているんでしょうか?
>>741 どのswfからでも再生する設計を変更はできないのかな。
とにかく、loadMovieした時点で_level0にある変数はクリアされるから
今の方法じゃ無理じゃね?
クエリーつければ渡せたと思うが、そのへんうろ覚えなんで間違ってたらすまん。
あるいは、_globalに定義すればいけたかな?
そうでなきゃ、_level1に読み込みして_level0に変数保持するとか、
現在のフレーム情報を保持するためのクラスを作るとか。
あとね、AS2.0ならMovieClipLoader使うのが吉。
743 :
731 :2009/04/01(水) 03:24:39 ID:8gKFgV+C
GETメソッドはURLに追加で書き込めるのでロードムービー側で this.loadMovie("2.swf?frame="+_level0.frame); にしてみて2.swfの1フレーム目のスクリプトを this.gotoAndPlay(_level0.frame); disp.text = _level0.frame; に書きかえて disp というTEXTを画面に貼ってみましたところ 渡したい現在のフレーム番号自体は次のムービーで表示されていました となると this.gotoAndPlay(_level0.frame); がうまく動いてないということなのでしょうか? Flashは5以来のアップデートなのでMovieClipLoaderについては ちょっとググって勉強してきます
flvを画面いっぱいに表示して縦横比を維持したままリサイズできるように したいのですが、stageを参照しようとすると未定義のプロパティstageへのアクセスです。 とエラーになります。どうしてもわからないのでアドバイスください。 よろしくお願いします。 private function initStream():void { _netStream = new NetStream(_connection); _movieObj = new Video(); var customClient:Object = new Object(); _netStream.client = customClient; _movieContainer.addChildAt(_movieObj,20); _movieObj.x = 0; _movieObj.y = 0; _movieObj.width = stage.stageWidth / 2; _movieObj.height = stage.stageHeight / 2; _movieObj.attachNetStream(_netStream); _netStream.play(_movieURL); _netStream.addEventListener(NetStatusEvent.NET_STATUS , onMovieProgress); if ( _waitForComplete ) { return; } executeComplete(); }
>>743 1フレーム目にthis.gotoAndPlay(_level0.frame)を書いたところで、
読み込みが完了していなければ、移動は出来ない。
だから、MovieClipLoaderを使って読み込み完了を確認し
onLoadInitあたりで、飛ばしたいフレームへのgotoアクションを
設定しておく。
746 :
731 :2009/04/01(水) 06:21:35 ID:8gKFgV+C
ググってみたのですがMovieClipLoaderで自分自身を消して置き換えるようなswfを作れるか 今一わからなかったのでちょっと泥臭いですが ムービーの1フレーム目を空白にしてそこに loaded = _root.getBytesLoaded(); total = _root.getBytesTotal(); if ( loaded < total ) { _root.gotoAndPlay ( _root._currentframe - 1 ); }else{ _root.gotoAndPlay ( _level0.frame ); } と書き、なぜか2フレーム目に飛ぶときがあったので2フレーム目にも _root.gotoAndPlay ( _level0.frame ); と書いたところ思っていた動作になりました あまり納得がいかないソースになりましたがとりあえずこれで 暫く使ってみようと思います
747 :
Now_loading...774KB :2009/04/01(水) 14:21:30 ID:m+DDdjkw
WinXP-Pro,FlashCS3-Pro(Player9.0,AS3.0)
AS2.0の色取得関数getRGB()の機能をAS3.0のColorTransformクラスで再現しようと
していますが上手くいきません。
ttp://www.adobe.us/livedocs/flex/2_jp/langref/migration.html によると、「RGB カラー値
には ColorTransform クラスの color アクセサプロパティを使用してアクセスできます」
とのことなので、MC(canvas1←色の変更が随時可能。最初は黒)のカラー値を取得するため、
下記のようにしました。
var getColor:ColorTransform = new ColorTransform(canvas1);
canvas1.buttonMode=true;
canvas1.addEventListener (MouseEvent.CLICK, canvas1_click, false, 0, true);//クリックして色を取得
function canvas1_click (mouseEvt:MouseEvent) {
trace ("カラー値: "+getColor.color);
}
これだとエラーは出ず初期設定の0(黒)が出るのですが、canvas1の色を変えても0のままです。
どうすべきでしょうか?
748 :
Now_loading...774KB :2009/04/01(水) 14:55:53 ID:jLvz8uHB
AS3 駆け出しの初心者です。 addChildでステージ上に貼り付けたMCって、 以下の記述だと、どういうパスになるんですか。 for(var i:Number=0;i<5;i++){ var objBase:MovieClip = new objBase(); testStage.addChild(objBase); }
>>748 試しにtrace (this.parent); をやってみたら?
750 :
Now_loading...774KB :2009/04/01(水) 15:11:50 ID:jLvz8uHB
>>749 [object MovieClip]
ってでてきます。
さっぱりです。
751 :
Now_loading...774KB :2009/04/01(水) 15:18:21 ID:jLvz8uHB
念のため、ソースも出しておきます。 for(var i:Number=0;i<5;i++){ var objBase:MovieClip = new ObjBase(); with(objBase){ name="objBase"+(i+1); } stageMC.addChild(objBase); trace ("1: "+objBase.parent.name); trace ("2: "+stageMC.objBase1); } 出力結果が、 1:stageMC 2:undefined
>>747 var getColor:ColorTransform = new ColorTransform(canvas1);
これもfunctionの中に入れないとだめなんじゃね?
>>751 パスってどういう意味?
>>751 trace ("3: "+stageMC.objBase); これは?
754 :
Now_loading...774KB :2009/04/01(水) 15:43:12 ID:jLvz8uHB
>>753 undefinedになっちゃいます…。なぜ…?
>>752 要は、アタッチムービーみたいな感覚で、
ステージにアタッチしたムービークリップを
別のファンクションとかから呼び出したいんですけど、
そのときのパスとかインスタンス名をしりたいんです。
>>754 nameを変数名のように使ってるのが間違いじゃないか?
まずobjBase.parentを変数に入れてその変数からgetChildByNameで呼び出せばいいんじゃないかな
var parentMC:DisplayObjectContainer = objBase.parent;
parentMC.getChildByName("objBase1");
こんな感じ?試してないからできるかわかんないけど
>748 ObjBase.as内にtrace(this);でいいじゃないか
757 :
Now_loading...774KB :2009/04/01(水) 16:37:29 ID:jLvz8uHB
>756さん [object objBase] ってトレースされます。 もういちど言うと、もうしわけないですがAS3が全くの初心者です(汗) 普通AS2でトレースすると、 確か_level0.testMC.testMC2 見たいな感じで出力されましたよね。 それで、どこからでも_level0.testMC.testMC2._alpha=30; とかで、プロパティなどさわれた。 やりたいことは、簡潔に言うと、 for(var i:Number=0;i<5;i++){ var objBase:MovieClip = new ObjBase(); stageMC.addChild(objBase); } で、 stageMCの中にムービークリップを5つ作って、 その一つ一つのムービークリップにアクセスして xやらalphaやらtextなどをそれぞれ操作したいのですが…。 なにか、参考になるサイトでもかまいませんので、 おしえてくだされば幸いです。m(_ _)m
>>757 それはムービークリップを配列に入れて操作するのがいいと思うよ
759 :
747 :2009/04/01(水) 16:45:58 ID:dQGDXDfx
>>752 どうも。関数内に入れましたが変化無しです。
試しに、適当な色(紫)の別のMCに対して色の取得を試みましたが、
これも0でした。
そこで、traceのところを trace ("カラー値: "+getColor.toString()+", "+getColor.color);
としたところ、
カラー値: (redMultiplier=NaN, greenMultiplier=1, blueMultiplier=1, alphaMultiplier=1,
redOffset=0, greenOffset=0, blueOffset=0, alphaOffset=0), 0
のようになり、赤の乗数がNaNになっています。
これがカラー値=0の背景としたら何が原因になるのでしょうか?
すみませんが、よろしく願います。
760 :
Now_loading...774KB :2009/04/01(水) 16:48:07 ID:jLvz8uHB
>758さん ほんまありがとうございました(^^ ) 助かりました〜〜(TeT)
すみません、質問です。 AcrtionScript3.0で、ライブラリ内の画像データをBitmapDataに読み込みたいんですが いい方法ないですか? BitmapData.loadBitmap()は使えないですし、Loaderで読み込んだりできるんでしょうか? よろしくお願いします。
>>761 頑張って書いたんだから
>>735-736 を見てくれよw
>>762 画像データをBitmapDataを基本クラスとして任意の名前でリンケージする
例えば名前をTestDataとすると
var bmd:BitmapData = new TestData(0,0);
でBitmapDataを読み込むことができる はず
>>762 (検証してないけど)ライブラリのリンケージで flash.display.BitmapData として
var bmd:BitmapData = new BitmapData();
var bm:Bitmap = new Bitmap();
を使うのは?
詳細は、「ActionScript 3.0 逆引きクイックリファレンス」(毎日コミュニケーションズ)のp244
765 :
762 :2009/04/02(木) 05:24:41 ID:Z8LX5nLD
>>763 様, 764様
すみません、こんな時間なのに即答ありがとうございます。
出来ました!
本当にありがとうございます。
細かく書くと 例:「やらないか」って文字列から 攻撃力100,守備力300,運40って値を得たい 逆に攻撃力100守備力300運40から「やらないか」って文字列を得る方法があれば是非
>>767 switch〜case じゃダメなの?
ASCIIコードだかに分解して数値適当に計算すればいいんじゃね
別に「やらないか」じゃなくても文字列は
000Vy1hpuU5Qs01wOls01wQ6s01zvLs01yrNhpI8kb6pRmBL2019s7p01hx0jpRuWwp01gaiq01nF8q01dbP205ycyepRmSbr018CLr0187J9pi8sripuTOt5p9FYg
みたいのでも全然OK。てか↑は何?
>>769 攻撃力=いちもつの長さ 的なゲーム
772 :
Now_loading...774KB :2009/04/02(木) 23:41:58 ID:GJ5xKjmZ
FlashCS3,WinXPでAS3.0です。 MCにグラデーションが現れません。 インスタンス名がareaMというMC(最初は灰色のみ)をステージに配置して、これをクリック するとグラデーションになるようにクリック関数内で下のようにしました。 //grObjはareaMのタイムラインで宣言 lineGrad_colorArr[0]=0x0008080; lineGrad_colorArr[1]=0x0808080; areaM.grObj.beginGradientFill (GradientType.LINEAR, lineGrad_colorArr, [1, 1], [0, 255]); areaM.grObj.endFill (); trace ("grad= " +lineGrad_colorArr);//grad= 32896,8421504 になります この場合、エラーは出ないのですが何も変化しません。 問題点はどこでしょうか?
>>772 clear() してない
draw***() してない
beginGradientFill() で Matrix を指定してない
そもそも Graphics による描画は一度描画した内容を変更するものではない
areaM.grObj じゃなくて areaM.graphics だろ
これがエラーにならないのはクリックも失敗してるんじゃないのか
>>773 レス有難うございます。
う〜ん、traceは出ているのでクリック自体は問題無いと思いますが・・・
取りあえず、手元の本に線を組み合わせてMCにグラデーションを描く
方法が載っていましたのでこれで試してみます。
beginGradientFillって Matrixがnullでもコンパイラとおるけど 表示位置がデフォルトだとどこいくんだろ まったく表示されないんだっけ
ていうか、drawしてないんだから何も表示されないのは当たり前かそれ
ActionScript3 Listコンポーネントのシマシマを消すには? 「as3 list シマシマ」でググってもわかりません><
778 :
Now_loading...774KB :2009/04/04(土) 06:43:51 ID:Ejcbjt+K
AS2です。 movieClip1,movieClip2,movieClip3にそれぞれ画像を読み込ませて、 全部の読み込みが完了したらrootのフレームを次ぎに進ませたいと思っています そこで、すべてのmcインスタンスにmcアクションとして以下を記述しました onClipEvent(onLoad){ this.loadMovie("hoge1.jpg"); } onClipEvent(onData){ _root.loadNum++; if(_root.loadNum == 3){//_root.loadNumの初期値は0 _root.gotoAndStop(2); } } もっと効率的なやり方がないでしょうか?
十分じゃない? if (_root.loadNum++&&_root.loadNum==3) _root.gotoAndStop(2); って一行にも一応纏められる(ハズ)
>>778 効率的かどうかはわからんが、MovieClipLoader使う方が適切だとは思う
781 :
Now_loading...774KB :2009/04/04(土) 13:03:44 ID:Ejcbjt+K
>>779-780 ありがとうございます、おかげですっきりしました
別の質問なのですが、スロットマシーンを作るとして1リールに絵柄が10種類あり
そのリールが3つあるとします。この状況で、絵柄を外部ファイルから読み込むとき
全体としてloadMovieは30回やらなければいけないのでしょうか?
リールごとの絵柄の並びは全く別という前提で教えてください。
種類は10種類なので一度読み込んだら再利用したいんですが「画像を読み込んだ状態での
MCのduplicateは無理」なので30回かなぁと思っています
間違っているでしょうか。もしくは賢いやり方があるでしょうか。。AS2で回答お願いします。
782 :
Now_loading...774KB :2009/04/04(土) 22:52:59 ID:hf0+/JiJ
環境)OS:WinXP-Pro,Mem=3GB,ソフト:FlashCS3-Pro(Player9.0,AS3.0)
昨年の12/30に、外部テキストを読み込み時のメモリ消費を抑える方法としてURLStreamを使う
方法を前スレで教えてもらい実行したのですがエラーも何も出ません。
(すいません、3ヶ月以上も間が空いてしまいました)
元のASは、
>>923 914 sage 2008/12/30(火) 14:34:09 ID:boG7lgXO さんからのもので、
Flaファイル,読み取り対象(テスト用)Txt,Upローダーサイズ調整用JPGと共にZipにしています。
http://uproda11.2ch-library.com/11169661.zip.shtml 今回は、試しに文章中にある句読点(。)がある場合にtraceするようにしていますが、
何も出ません(特に細工した部分は無いのですが・・・)
アドバイスを願います。
zip丸投げはどうかと ごめん、余計なお世話だったね 任せた>all
>>783 私自身も悩んだのですが、どういう状況なのかを把握して頂きたく
まとめてUpしました。
でもFlaファイルまでは要りませんね(反省
AS2でアイテムの整理を配列でやってんだけど 所持リストが ItemList=[剣,槍,なし,なし,なし](←は5個だけど100個まで所持できる設定)で 例えば新しくアイテム「盾」を入手した場合、前から数えて最初の「なし」 ItemList=[剣,槍,盾,なし,なし]ってしたいのと 「槍」を売っぱらうなり捨てるなりしたとき ItemList=[剣,盾,なし,なし,なし]ってしたいのですが、どうすればいいですか? 日本語下手ですいません。
>>785 「なし」は定義しないで、
pushとspliceで追加削除すればいいんでね?
あるいはfor文とifで回して n番目が「なし」だったら置き換えてbreak とかかな
>>785 AS2わからないからAS3で申し訳ないんだけど、多分同じだと思うから
array.splice(A, B, C); // A番目から、要素をB個削除し、CをA番目に追加する
ってのがすごい便利。
new array:Array = ["剣", "槍", "槌", "弓"];
って配列があるとして、たとえば要素2:"槌"を消したいだけなら
array.splice(2, 1); // 要素2から1個削除する
ってしてやると、中身は["剣", "槍", "弓"]になる。
上の場合で、槍と槌の2つを同時に消したいなら、
array.splice(1, 2); // 要素1から2個削除する
ってやると["剣", "弓"]になる。
逆に、消すのではなく槍と槌の間に"弩"を入れたいなら、
array.splice(2, 0, "弩"); // 要素2から0個削除(=削除しない)し、その場所に"弩"を挿入する
ってやると["剣", "槍", "弩", "槌", "弓"]になる。
789 :
Now_loading...774KB :2009/04/05(日) 07:18:06 ID:8eClZp9/
Win Fla8 AS1.0です ○×判定の問題がでるゲームを作ってます。 配列に入っている20個の数字(問題番号)をランダムに重複なく10個にならべかえたいのですが 方法がわかりません。 それらしきサイトをみてみましたが技術不足で理解できませんでした。 そこで、むりやりタイムラインに for (i=1; i == 《タイムラインごとにここをどんどん増やしていく》; i++) { var rand = Math.floor(Math.random()*20+1); //重複が過去の配列とないか判定して、なければ代入する if (ques[i] != rand) { 《問題を表示するASをここに書く》 //問題を配列にして順番に番号を入れていく ques[2《現在の問題を配列に代入》] = rand; trace("rand"+rand); trace("ques"+ques[2]); } } この方法でやると、次の問題にすすまなかったり、ASが無限ループを 起こしてしまいます。 なにかいい方法はないでしょうか。 できれば前者の20個の数字を10個の配列に重複なく入れるスクリプトを書きたいです。 よろしくお願いします。
追記です タイムラインに20個の問題表示箇所をつくり、 ひとつずつ進んでいくようにしています。 《問題を表示するASをここに書く》 のMCで正解・不正解を表示させた後 _root.gotoAndStop(_root._currentframe+1); で次のフレームに飛ばしてます。
>>785 >>788 に加えて、最初の「なし」または「盾」を検索するならindexOfが使えるはず
手元にAS3のリファレンスしかないからAS2はググってくれ
793 :
789 :2009/04/05(日) 13:22:55 ID:8eClZp9/
>>791 ありがとうございます。
シャッフルという言葉は思いつかなかったですね。
いい参考サイトみつけられました。
>>792 きゃーどうも
indexOfは文字列だけじゃなかったっけな
795 :
Now_loading...774KB :2009/04/05(日) 19:46:17 ID:1smZhX4l
timezoneOffsetの使い方教えて。
796 :
Now_loading...774KB :2009/04/06(月) 15:19:19 ID:DeZ9pfZq
ブラウザのDOMの実装のバグじゃない。
799 :
Now_loading...774KB :2009/04/07(火) 05:30:40 ID:vcTrlan4
AS2、flash8です 外部テキストの読み込みについて教えてください ・外部テキストの変数と値を_rootに読み込ませるとき、全ての変数を完全に読み込んだと 判別する方法はあるでしょうか? (Movieclipに読み込ませて onDataするしかないですか?) ・読み込むデータが量が多いとき、_rootに読み込み完了前に次のフレームに進んでしまうことは あるでしょうか。 その場合、それを防ぐ方法を教えてください
801 :
Now_loading...774KB :2009/04/07(火) 15:25:06 ID:PtJG27gr
acs3でロゴタイプのアニメーションを考えています。 一筆書きのような感じをアニメーションで表現したいんですが、 直線ならまだしも、曲線で構成されたモノを描く場合、どのような やり方が考えられるでしょうか。 linto(x,y)を少しずつ繰り返して行く感じでしょうか。。 ちなみに元のロゴタイプはjpgの画像でしか存在しません。
スクリプト使わなくても消し込みで表現できる
>>802 PCへの負荷はどうだろ?
ASの方が軽い気がする(まあ、本人の意向次第だけどw)
804 :
Now_loading...774KB :2009/04/07(火) 18:48:50 ID:PtJG27gr
おーありがとう。消し込みでやってみます。
805 :
Now_loading...774KB :2009/04/08(水) 21:27:19 ID:T+aTrUe4
質問です。 現在時刻をUTCで 1970年1月1日0時(世界時) からのミリ秒数を返す方法を教えてください。
リファレンスみろカスが
ホイッ
>>806 クソがシバクゾ。
ここは質問の場だろ教えてやれよ。
だからハヤ(メ・ん・)年だよ。ASは・・
2はな
そもそも、ASの需要がそんなないから流行んないんだよ。
今時、企業サイトなんてみんなCMSなどのPHPとの連携がほとんど
さらにSEOを考えると全面フラッシュというのは選択肢として
なくなってくる。しかもJavaScriptのDOM互換性の問題も
高機能なライブラリの登場でクリアされて、例えばスライドなんかも
ここまで出来るとなると、いよいよFlash使いどころに困るというか
わざわざXMLから情報抜き出してFlashにするのめんどくさ
http://www.serie3.info/s3slider/demonstration.html
as3です mcAがgoalAに等速運動で移動しています たまに通過しても処理されない場合があります fps20で他にmcはありません。何が原因なのでしょうか? //移動前と移動後の差分の積が負になれば通過 oldX=goalA.x-mcA.x mcA.x+=10; if(oldX*goalA.x-mcA.x < 0 ){trace("通過");} こんなのよりも、他にもっと良い方法があれば教えてください よろしくお願いします
。。
>>812 >if(oldX*goalA.x-mcA.x < 0 )
if(oldX*(goalA.x-mcA.x) < 0 )
括弧忘れてました
>>813 誤信です、すいません
if(goalA.x<mcA.x) じゃ何か問題があるのか?
>>815 書き方が悪かった、ごめん
>mcA.x+=10;
mcA.x+=vx;//vxは正と負どちらでも
もちっと考えてみます。質問とりさげで、お騒がせしました。
適当コード書く前にflaうp
>>812 距離計算じゃなくてhitTestObject()じゃだめなん?
AS3 + Flash CS3 + FlashDevelop3 猫と犬が追いかけっこしてます hitTestObject(); を実行したいのですが、パスをどう書けばいいのかわかりません ファイル構成:nyanwan.fla,Main.as,DogCtrl,CatCtrl ◆nyanwan.fla ムービークリップライブラリでリンケージ設定 dog cat ◆Main.as:nyanwan.flaのドキュメントクラス var dogContainer:DogCtrl=new DogCtrl();addChild(dogContainer); var catContainer:CatCtrl=new CatCtrl():addChild(catContainer); ◆DogCtrl.as //コンストラクタ mc=new dog(); addChild(mc); addEventListener(Event.ENTER_FRAME,paku); function paku(event:Event):void{ mc.hitTestObject(★);//ここで猫を指定するにはどう書くんでしょうか? } ◆CatCtrl.as //コンストラクタ mc=new cat(); addChild(mc);
820 :
812 :2009/04/09(木) 15:11:00 ID:Fg47oFDV
>>818 812は座標だけの処理になりそうなんでちょっと保留になりました
ステージ上のmyBaseにmyLoadというMCを突っ込んでそこに写真を読み込んで表示させたいのですが XMLでパスを読み取る所までは成功しているのですが、写真が表示されません。 というか、プレビューとかswfをプレイヤーで単体で再生の時には写真が表示されるのに HTML上に読み込んで再生させようとするとmyBaseのMCだけが見える状態で、写真が読み込まれません どなたかお知恵をお貸しいただけないでしょうか・・・・。環境は WINXP + FLASH8 +AS2です var myXML = new XML(); myXML.ignoreWhite = true;//空白、改行無視 myXML.load("./photodata.xml"); //xmlのロード myXML.onLoad = function(loaded){ if(loaded){ var rootNode = myXML.firstChild; //全てのデータ内容 var pictureCnt = rootNode.childNodes.length; var currentPicture = rootNode.firstChild; for(i =0; i<pictureCnt ; i++){ var pictureUrl = currentPicture.firstChild.nodeValue; var currentPicture = currentPicture.nextSibling; f_makeAndLoad(i,pictureUrl); } }else{ trace("error occured"); } } function f_makeAndLoad(num,path){ //写真読み込み myBase.myLoad.duplicateMovieClip("myLoad"+num,num+1); //myLoad複製 v_name = eval("myBase.myLoad"+num); v_name._x = 0; v_name._y = 0; v_name.loadMovie(path); myBase.myLoad._visible = false; }
全然内容読んでないけどローカルでできるなら 読み込み待ち処理をちゃんと作っていないんだろ
>>822 おおお!!
なるほど!それだ!
ありがとうございます。
ちなみにもしよかったらどういう方法があるか
少しご指導いただけませんか><
>>823 自分も全然読んでないけど、
ローカルのHTML上でも成功しないなら
外部ファイルのパスの起点が違う
826 :
Now_loading...774KB :2009/04/09(木) 17:26:28 ID:RvrcnzJv
現在、softbankのモバイルウィジェットを作成中なんですが、 Flash側から端末の情報(今回は歩数計の歩数)を取得したいと思っています。 Flash起動時にパラメータでその時点の歩数は渡せるのですが、起動後に常に 情報を取得したいのです。 SetVariableで渡そうかと思ったのですが、どうやらモバイルウィジェットでは サポートしていないのでプリファレンスデータ経由で渡せるのかな?と思っています。 ただ取得できた値がどうやってactionscript側の変数にセットするのかが分かりません。 そもそも、こういうことは出来ないのでしょうか?
>>825 そのflaからHTML書き出せば普通に読み込むけど?
つか、外部ファイルのパスの起点が違う可能性がある、ってかいたけど
そのへん、実際はどうなの?
HTMLとswf、画像ファイル、xmlファイルのディレクトリ構造はそれぞれどうなってるの?
確認してるブラウザは何?
>>827 さん
HTMLの書き出しでやってみたところ、確かにHTMLに埋め込まれた状態での
動作を確認しました!ありがとうございます。
でも、自分のHTML上に貼り付けようとするとやっぱり上手く動かない・・・。
パスの起点については
top.html (これに埋め込みされてる)
と同じフォルダにslideShowフォルダがあって
その中に8331フォルダがあって
さらにその中に本体のslideShow_comp.swfがある状態です。
それでembed src="./slideShow/8331/slideShow_comp.swf"
と指定してHTMLプレビューをするんですけど見えません・・・。
確認してるブラウザはFireFoxとIEです。
どちらも駄目です・・・。
>>828 ASの外部ファイルを指定してる箇所で
ブラウザ経由で実行する場合は、HTML(この場合はtop.html)起点のパスを
書く必要があったと思う。
top.htmlをswfと同じディレクトリにおけば多分解決するんじゃね?
>>829 おおおお!!解決しました!!
xmlとswfをtop.htmlと同じフォルダにしたら解決しました〜!
いやー、本当だいぶ悩みました。どうもありがとうございました><
ということは、xmlを使ったスライドショーなんかを作る時には
htmlとswfファイルは常に同じフォルダに置く必要があるって事ですかね?
top.htmlと同じ階層にslideShowフォルダを置いて
その中にswfとxml、photoフォルダを作って整理とかって言う事は不可能なんでしょうか。
ずいぶんお答えいただいたのでこの質問はスルーしていただいてもよろしいです。
ID:FlREQNGrさん、本当にありがとうございました><
831 :
Now_loading...774KB :2009/04/10(金) 02:43:49 ID:W6crVFD2
WinXPでFlashCS3(AS3.0)です。ブラウザはFireFox3.08です。 「ActionScript 3.0 逆引きクイックリファレンス」(毎日コミュニケーションズ)に記載されて いるフルスクリーン時の解像度向上SWFをブラウザで実行しましたが、下記のエラーが 現れて参ってます(ローカル内で実行しています)。 Error #2044: ハンドルされていない NetStatusEvent : level=error, code=NetStream.Play.StreamNotFound 記載ASは、メインタイムラインのフレームアクションとして以下のようになっています(著作権上、 若干改変しています) var conectOn:NetConnection = new NetConnection(); conectOn.connect (null); var netStream:NetStream = new NetStream(conectOn); netStream.client = new Object(); netStream.play ("VTR.flv");//Flvの指定 var vid:Video = new Video(160, 120); vid.x = vid.y =80; vid.smoothing = true; vid.attachNetStream (netStream); addChild (vid); btFull.addEventListener (MouseEvent.CLICK, btFullClickHandler);//ボタンにリスナーを付ける function btFullClickHandler (evt:Event):void { if (stage.displayState != StageDisplayState.FULL_SCREEN) { stage.displayState = StageDisplayState.FULL_SCREEN;//フルスクリーン化 } } SWFを単独で起動した場合はエラーは出ずFlvは再生されますが、反面フルスクリーンになりません。 特にサーバーから読み込んでいる訳でなく、同一フォルダ内のFlvでエラーが出ています。 どうすべきでしょうか?
832 :
831 :2009/04/10(金) 03:01:10 ID:W6crVFD2
追記: IE6.0.29で開いた場合はエラーは表示されず、拡大補正も大丈夫でした。 これってやっぱりブラウザに起因しているのでしょうか?
834 :
831 :2009/04/10(金) 12:34:05 ID:ZAeo2fLR
>>833 さんきゅう。
てか、「外部FLVファイルを、2バイト文字が含まれないパスに配置してください」
と言われても、同じフォルダなのですが・・・
>>834 いや、だから、FLAとかHTMLとかSWFがあるディレクトリ自体が2バイトだったりするとダメ。
マイドキュメントとかデスクトップとか。
IEだと大丈夫でFireFoxだと不可ってのもイヤな条件だよなぁ。
AS2について質問です。 あるmcの自分自身のインスタンス名から値を引っ張ってきたいのですが、 どう指定していいのかわかりません。 例えば A001という名前のmcがあったとして、 色のリストになっているxmlからA001の名前があったら、 自身の色を赤に変える、といった処理をしたいのです。 よろしくお願いします。
>>836 xmlの中身がどうなってるか、いつ色を変えるかわからんけど
基本動作を書いてみた
mxlList=["B001","C001","A001"];
A001.onMouseDown = function() {
chngColor(this);
};
function chngColor(mc) {
for (i=0; i<mxlList.length; i++) {
if (mxlList[i] == mc._name) {
trace("hit");
}
}
}
838 :
836 :2009/04/10(金) 17:10:53 ID:rmCzvHZB
>>837 ありがとうございます!
_nameの存在をすっかり忘れてました。
助かります。
839 :
831 :2009/04/10(金) 19:43:14 ID:FN0sgK7d
>>834 なるほど。
FireFoxは曲者ですねw
840 :
Now_loading...774KB :2009/04/11(土) 00:00:34 ID:7RPGiLYj
tweenerやtweenmaxをAS3で使ってトウィーンさせ、そのswfファイルをブラウザで表示させて その状態でブラウザの閉じるボタンをクリックしたままにするとflashの動きが止まり、ドラッグして閉じるボタン外でマウスを離すと クリックしたままにしていた間の時間分進んだ様な状態からトウィーンが再開するのですが そのクリックしたままにしている時間の間にやっている、Spriteを作って並べているのがズレて表示されたり、 トウィーンが変な急激な動きをしたりと、不安定なトウィーン動作を起こしてしまいます 幾つかの企業サイトのflashで同じ事をしても、クリックしていた間は止まりますが、その後の動作は問題無く続いて動いているようです この問題を解決する方法ってあるのでしょうか?
841 :
Now_loading...774KB :2009/04/11(土) 00:04:58 ID:WkOkYPIO
as3で、xmlでジャンル分けできるphotoGalleryを作っているのですが、 以下のxmlのように複数のキーワードを設けて、それにヒットするもの だけを表示するようにしたいのですが、文字列操作をしない場合 どのように取り出せばいいのですか? <data> <img key="rock,jazz"> <title>あああああ</title> <url>001.jpg</url> </img> <img key="rock"> <title>いいいいいい</title> <url>002.jpg</url> </img> <img key="jazz"> <title>うううううう</title> <url>003.jpg</url> </img> <img key="jazz,classic"> <title>えええええ</title> <url>004.jpg</url> </img> </data> よろしくお願いします。
843 :
Now_loading...774KB :2009/04/12(日) 15:15:32 ID:ScpuME1J
as3です。 マウスを表示オブジェクトからロールアウトしたときに マウスポインタの下にある表示オブジェクトが何であるかを 知る方法はありますか?
>>843 eventが発生したターゲットを知るにはevent.target
function onOut(event:MouseEvent):void{
trace(event.target.name);
}
ROLL_OUTは対象mc全体を判定
MOUSE_OUTは対象mcのマウス直下のオブジェクトを判定
ここらは大丈夫?
845 :
Now_loading...774KB :2009/04/12(日) 15:35:16 ID:ScpuME1J
>>844 ありがとうございます。そのあたりは大丈夫です。
しかし今回は、ROLL_OUTが発生したターゲットではなく、
たとえばマウスポインタをボタンの外へ移動したときに
マウス直下に何があるかを知りたいのです。
説明が足りなくてすみません。
>>845 そでしたか、失礼
MOUSE_OVERを使う
判定するmcをひとつのMCにまとめる(root.bin.mc1〜mc10)
bin.addEventListener(MouseEvent.MOUSE_OVER,onOver);
function onOver(event:MouseEvent):void {
trace(event.target.name);//mc1〜mc10が返ってくる
}
847 :
Now_loading...774KB :2009/04/12(日) 16:38:29 ID:ScpuME1J
ありがとうございます。 やはり別途ROLL_OVERをつかうしかありませんか。 getObjectsUnderPointでマウスポインタの座標のしたにあるObjectを調べたりも試してみましたが ボタンからROLL_OUTのタイミングではそのボタンが返ってきてしまうようです。 もう少し考えてみます。
>>847 微妙に食い違ってる気がするけど勘違いか?
ボタンは関係なくて、ボタンの下にあるmc群にMOUSE_OVER
ボタンからROLL_OUT=他のmcがMOUSE_OVERになる
あとはmcを配列にいれて総当たり
var mcList:Array=[ball1,ball2];
btn.addEventListener(MouseEvent.ROLL_OUT,onHitTestObjct);
function onHitTestObjct(event:Event):void {
for(var i:uint=0;i<mcList.length;i++){
if(mcList[i].hitTestPoint(mouseX,mouseY,true)){
trace(mcList[i].name);
}
}
}
rolloutのタイミングじゃなくてgetObjectsUnderPointでそのobjectが存在しなくなったら、にすればいいんじゃないの
851 :
Now_loading...774KB :2009/04/12(日) 18:43:28 ID:ScpuME1J
皆さんありがとうございます。 なるほど、getObjectsUnderPointをENTER_FRAMEで繰り返し、 帰ってくるリストの中にボタンがなかったらOK という感じで行けそうです。
852 :
Now_loading...774KB :2009/04/12(日) 19:37:55 ID:ScpuME1J
あれ、ENTER_FRAMEで回さなくても 判定をROLL_OUTの中でなく別メソッドに書けばできました。
flash8 as2です。現在、外部csvから一行ずつ読み込んで配列に入れる処理をつくっていますが 期待通りに動きません (csvの構造は以下の通りです) 111,aaa 222,bbb 333,ccc // データを格納する配列 resultAry を作成 var resultAry:Array = new Array(); //一時的に入れる配列 var tempArr:Array = new Array(); // ロード完了時の動作定義(引数:ロードしたデータ) all_LV.onLoad = function(myData:String) { // 改行コード区切りで preArr を作成 _root.tmpArr = myData.split("\n").join("").split("\r"); _root.tmpArr[0] = "あいうえお"; _root.resultAry.push(_root.tmpArr); _root.hoge = _root.preArr[0]; //以下確認用 trace("myData> "+ typeof myData); >booleanを返す trace("resultArr> "+ typeof resultArr); >undefinedを返す trace("あいう> "+ typeof "あいう"); >stringを返す trace("tmpArr> "+ typeof tmpArr); >undefinedを返す trace("マイデータ> "+_root.myData); >undefinedを返す trace("resultAry> "+_root.resultAry); >undefinedを返す } all_LV.load("load.csv"); 上のスクリプトでcsvをresultAryに格納するにはどうしたら良いか教えてください。よろしくお願いします
myDataはエラー出力で、all_LVがデータ内容じゃねーの?
>>854 ありがとうございます 勘違いしてました。
resultAryを二次元配列にしたいんですが
とりあえず、resultAry[0]に別の配列を丸ごと入れたいと思っています
このときの処理は
resutlAry.push(preAry); では駄目なんでしょうか。(preAryの中身は[1,2,3])
最終的には
resultAryの中身を
[[1,2,3],[3,4,5],[6,7,8]]って感じにしたいんですが… どなたかよろしくお願いします
>>855 resultAry[i] = new Array();
初心者だけど知恵を借りたいです。 マイクで叩く音を拾って、”小さい音”と”大きい音”で違うアクションさせたい。 onEnterFrameでactivityLevelを拾って二つの閾値を if (mic.activityLevel < 20) { なんもしない } else if (mic.activity.Level <40) { アクション@ } else if (mic.activity.Level <100) { アクションA } みたいにしたんだけど、これだと 音が2フレームにまたがるとアクションがエコーするみたいに連続して起っちゃう アクションAさせたいときも@が前後のフレームで起っちゃう って問題があるんだけど、どのような対処法があるでしょうか
onClipEvent (MouseDown) { _root.attachMovie("aa", "aa", 100); コレをマウスじゃ無くてzキーを押すと実行されるようにしたいんですが どうしたらいいんでしょう・・
ttp://pc12.2ch.net/test/read.cgi/swf/1226284753/l50 よりきました。
[質問]
自動改行がうざくて、condenseWhiteをtrueにしてから、
テキストフィールド(htmlText)に適当な文字列入れたのだが、<br>が改行にならない。
[やりたいこと]
テキストフィールド(htmlText)上で、<br>のみで改行したい。
[開発環境]AS3 FlashCS3 + WindowsXP SP3
[スキル]初めて1週間
偉大な先輩方、お知恵をお貸しください、、、。
860 :
857 :2009/04/13(月) 20:47:34 ID:wrx5ZTDv
>>860 の名前間違いです。 857さんごめんなさい。
>>860 ありがとうございます、参考にしてみます。
863 :
859 :2009/04/13(月) 21:16:57 ID:wrx5ZTDv
>>859 自己未解決。
condenseWhiteをいじらないで、
1.文字列置換を行い、改行を削除
2.改行を<br>に変換
で対応しました。
チラ裏スマソ。
おまいら、質問するときはAS2かAS3かくらい書けよ。 860はAS2では動かないぞ。
ぐぐれば5分で分かる質問ばっかしだな
866 :
Now_loading...774KB :2009/04/14(火) 11:00:21 ID:a3s4vqRY
XPath4AS2でxmlを読み込んでいるのですが、 たとえばタグ内にhtmlタグがあると、そこで処理がストップされてしまいます。 (例) <tests> <test imgSrc="img/01.jpg">これはダミーテキスト</test> <test imgSrc="img/02.jpg">これは改行を含みたい<br>ダミーテキスト</test> <test imgSrc="img/03.jpg">これはダミーテキスト</test> </tests> 3つ目のimgSrcにアクセスできません…。
それはxml的に正しくないからxml扱うライブラリだと読み取れないんじゃないかな <br>でなく<br />なら認識できんじゃないかな
868 :
Now_loading...774KB :2009/04/14(火) 11:24:10 ID:a3s4vqRY
いけました!なるほど! ありがとうございます(^ ^)
なんかレベルの低い質問ばっかりだな Flashってこんなレベルでも商売になるんだな 凄い世界だ
movieClipに読み込んだ画像を別のムービークリップでも利用したいと思います MCは画像を含んだ状態で複製できないと思いますが、AS2以降でもやはり無理でしょうか? あと、外部テキストの読み込みでキャッシュの.txtを取得しないように hoge.txt?1298などファイル名の最後に乱数をつけたいんですが、そうすると自分の環境では 「外部ファイルを開けませんでした」というエラーが出ます 解決方法があれば教えてください よろしくお願いします
>>870 ビットマップデータ使えば、再利用できるんじゃね?
クエリー付けると、ローカルではエラーが出るが、サーバにあげれば問題ないはず。
>>869 いやいや、こんなんじゃ採用されないって。
jsやり込んでる層がこっちにも来てくれたらいいのにな。
俺はもうこのスレ来ないわ。
現CS3で仕事を自宅消化したりしているんですけど、 CS4はAS2.0製作に何か恩恵ありますか?
874 :
Now_loading...774KB :2009/04/14(火) 21:18:41 ID:Mp2FaZFS BE:828216656-2BP(2000)
↓のファイルの紫色の●をクリックしても反応しないのは何故でしょうか・・
http://ninjaboyde.gozaru.jp/mov.fla _rootに置いた、MCに
_root.mc_sikaku.mc_maru.onRelease = function {
trace("クリック成功");
}
と記述すると動くのですが、なぜかクリック成功とは出ずに
●の中に記述したトレースが出力されちゃいますです・・・
CS3でムービープレビューをして キーボードを押すとショートカットキーが動作してしまって Flash側でキーのイベントが受け取れないのですが、 これって何か対策がありますか
メニューから無効化できる
877 :
Now_loading...774KB :2009/04/14(火) 23:36:11 ID:nKBt5SqH
AS3.0を使っています。 外部からアルファ付のpngファイルを読み込んだloaderオブジェクトで アルファ付のマスクをかけたいと思っているのですが、うまくいきません。 マスクをかける方(loader)、かけられる方(Sprite)、ともにcacheAsBitmapはtrueにしているのですが 結果は、読み込んだ画像サイズの矩形でマスクがかかるだけです。 どなたか解決策をお教えください。
>>874 fla見てないけど、とりあえず
onReleaseはタイムラインに書くもの。
あと、function の後に()が必要。
880 :
Now_loading...774KB :2009/04/14(火) 23:50:09 ID:nKBt5SqH
877です
>>879 別サーバーではありません。
swfファイルと同じディレクトリにあるpngファイルを読み込んでいます。
881 :
Now_loading...774KB :2009/04/15(水) 00:12:06 ID:gqq7UWwH
877です。 自己解決しました。あまりよろしい方法ではないかもしれませんが・・・ loaderでマスクをかけることはあきらめて、loaderを一旦bitmapにしてから bitmapでマスクをかければうまくいきました。 loader及びloader.contentでは期待した結果が得られませんでした。
882 :
Now_loading...774KB :2009/04/15(水) 00:47:39 ID:u3K6WSYF
すいません。AS3を勉強はじめました。 いろんな本を読んでみますが、 「カスタムオブジェクト」と「オブジェクト変数」と「ハッシュ」 という概念が同じものをさしているように思うのですが、 ちがうのでしょうか? よろしくお願いします。
883 :
874 :2009/04/15(水) 00:54:57 ID:oW+Q7Hrg BE:966252375-2BP(2000)
>>878 あ、確かにそうすね・・・構文的には間違っているかもなんすけど
あの文章を入れると不思議と動き出す・・・と書きながらわかた
単に■内のMCはエラー起こして動作止まってただけぽいすな・・
んで、■のASはスルーされて中にある●のASが動いたってことか・・・
>>882 ちがう。てか、どれも概念ではないし、概念だとしてもちがう。
カスタムオブジェクト ... 古いASの記述でオブジェクトを独自に拡張させてクラスのように
動かす手段、もしくはそのようにして作成されたオブジェクト。
MovieClipを拡張したmyMcっていうオブジェクトを作ったら、myMcがカスタムオブジェクト。
オブジェクト変数 ... オブジェクトが保持している変数のこと。
myMc._xの_xのとこ。
ハッシュ ... うーん、ASだと連想配列の事かなぁ。
var ar:Array;
ar["hoge"] = 1;
みたいな、配列の要素を文字列で指定するみたいな。
うん、ごめん、オレも詳しくはないが、
そんな3つの単語の違いが混乱するような説明をしてる本はお薦めしないぞ。
885 :
882 :2009/04/15(水) 01:16:52 ID:u3K6WSYF
>>884 さん詳しい説明ありがとう。
ちなみに、
>オブジェクト変数 ... オブジェクトが保持している変数のこと。
つまりはプロパティのことですか?
>>876 どこから無効化するのでしょうか。
教えてください。 OTL
>>885 そうね。ちょっと違和感あるけど、ASではプロパティ=メンバ変数だと思っていいんじゃないかと。
>>886 ムービープレビューのPLAYERのメニューに
制御 > キーボードショートカットの無効
みたいのがあるでショ。
>>888 おおお、プレイヤーのメニューでしたか!!
ありがとうございますー!!
オブジェクト変数って何を翻訳した言葉だろう。 インスタンスに定義された変数はインスタンス変数というのが一般的で クラスにたいして定義された変数はクラス変数というのが一般的じゃない。 そうすると、オブジェクト変数というのは、動的に定義されるオブジェクトの ダイナミックな変数を指してる可能性が高いから、これは内部実装的には ハッシュと変わらないじゃないっけECMAScriptの仕様だと。 そうすると、ハッシュと同じように object["hoge"]というアクセスができるんだよね。 ここらへん、Javaぽい仕様とECMAScriptの仕様が混在してるから紛らわしいけど ダイナミックな変数はコンパイラチェックがきかないからAS3では使用を最小限に とどめる事が推奨されてるので、そんなに細かい事まで気にする事もないんじゃない
あ〜クラス変数はstaticな変数な事ね インスタンス変数もクラスに定義するから 紛らわしい書き方になってごめん。
例えば、JavaScriptでこういう感じでobjectの中身にアクセスできるのと 同じようにダイナミックな変数はアクセスできるはずだから ActionScirptでもやろうと思えばこういう事もできるよ var aSprite:Sprite = new Sprite(); aSprite.x = 500; trace(aSprite["x"]); // return 500 普通やらないけど
JavaScriptでこういう感じだった var obj = { a: 1, b: 2, c: 3 } obj["a"]
894 :
882 :2009/04/15(水) 03:01:56 ID:u3K6WSYF
ん?こういうこと? プログラムなれないんで意味わからなければ無視してください。 クラス変数 ↓(召喚) インスタンス変数(つまりはプロパティ?) オブジェクト変数 (≒名前配列みたいなもの?)
超基本的な事だと思うのでここで質問させてください><
ビデオ編集ソフトのトラックに置いて動画として使えるようなSWFはflex sdkで作成可能でしょうか?
http://www.saturn.dti.ne.jp/~npaka/flash/as30/TimerEx/index.html こちらのサイトを参考に flex sdkで簡単なアニメーションをするSWFを作成してみたのですが、
Spriteクラスを継承してタイマーイベントの度にBitmapを動かすようなSWFはフラッシュプレイヤー等で
再生すればきちんと表示されます。
そのSWFをPremiere Elementsのような動画編集ソフトのトラックに置いたり、
SWF to AVI MPEG Convert(
http://www.lumixsoft.com/ )のようなキャプチャソフトでAVIファイルに
出力しようとすると、1フレームだけのAVIが出来てしまい動画になりません。
そもそもタイマーイベントやマウスイベント等によって駆動される方式のプログラムは
実装上動画として扱えないだろうという事は想像出来ますが、ActionScriptに何か特別な記載をして
特定のイベントにてアニメーションを行うような組み方をすれば動画として扱われるのではないか?と想像しています。
しかし、どうやれば出来るのか?まったくわからないです。
ActionScriptでプログラムを書く上で、本当に基本的な事が解ってないからですよね。orz
896 :
Now_loading...774KB :2009/04/15(水) 12:40:43 ID:u3K6WSYF
>そもそもタイマーイベントやマウスイベント等によって駆動される方式のプログラムは >実装上動画として扱えないだろうという事は想像出来ますが、ActionScriptに何か特別な記載をして >特定のイベントにてアニメーションを行うような組み方をすれば動画として扱われるのではないか?と想像しています。 いや。無理かと思います。 Premiere Elementsのような動画編集ソフト用に載せたり、上記のキャプチャ ソフトでswfからムービーを取り出すには、Flash(flexじゃないよ)のメインの タイムライン上で再生されたムービークリップ(actionscriptを使わないタイムラインムービー) だけです。 もし、それでもなんとかしたいのであれば、swfを動画としてそのまま画面キャプチャ できるソフトをつかうとかすればいいと思うよ。 というか、わざわざ普通そんなことしないよ。動画ならAfterEffectを使えばいいし。
897 :
Now_loading...774KB :2009/04/15(水) 12:52:43 ID:JumY74px
こんにちは。AS3.0初心者です。 flash MXからCS3に変えて勉強中なのですが、ステージに配置したムービークリップの中からステージの別のムービークリップを制御する際に、以前は _root.hogehoge で動いていたのですが、エラーになってしまいます。 root.hogehoge と書いてもダメですし、 this.hogehoge と書いてもダメでした。 これの記述方法を教えてください。 基本的な事だからか、僕の持っている教本には書いていないです。 よろしくお願いします。
898 :
Now_loading...774KB :2009/04/15(水) 13:05:11 ID:u3K6WSYF
>897 AS3は、子のMCから、別の子のMCにメソッドできるんでしたっけ?
失礼いたします。 ActionScriptでタブの数をリアルタイムに更新ということは出来ないでしょうか。 例 DBのHogeテーブルから取り出したデータがA、B、Cの3行の時、タブを3つ作って それぞれのタブ内にデータを表示。2行の時はタブ2つ、5行の時は5つ作成したいのです。 以上、よろしくお願いいたします
900 :
897 :2009/04/15(水) 13:13:53 ID:JumY74px
・・・できないんですか? え、でもそれができなかったらどうやって操作するんだろう。
901 :
898 :2009/04/15(水) 13:47:52 ID:u3K6WSYF
>898 あ、すいません。僕は全部ルートのタイムラインに書くようにしてるので、、。 普通に疑問をもっただけす。 以下にシンタックスかえてみたらいいかも。 _root.hogehoge ↓ MovieClip(root).hogehoge
902 :
897 :2009/04/15(水) 13:57:37 ID:JumY74px
>898 ありがとうございます! 動きました。 ムービークリップの操作はできるようになったのですが、 rootのaddEventListenerは操作できないみたいです。 これのやり方もあるのでしょうか?
903 :
898 :2009/04/15(水) 14:06:53 ID:u3K6WSYF
rootのaddEventListenerの箇所のソースをみないと 何が悪いのかよくわからないかも。
905 :
899 :2009/04/15(水) 14:13:06 ID:CkLJfyDy
自己解決しました。 お騒がせしました、申し訳ない
パスをたどっていく行為がAS3(OOPのほう?)じゃ不作法なんかね? カスタムイベントが肝?
AS3では まず、クラスっていうのはオブジェクトの設計図だという例えがよく使われて。 あるクラスからオブジェクトは複数作成されても、もとの設計図は一つだから、 オブジェクトは設計図で定義されている変数を全部共通してもつ事になる。 しかし、オブジェクトはそれぞれ独立しているので変数の値はオブジェクト毎に異なる。 これがインスタンス変数。またはプロパティ変数。 クラス変数または静的(static)変数というのは、クラスに定義されるけど インスタンス毎に違う値をもつのではなく、クラスに一つだけ定義されて一つの値を持ち、 クラスの識別名を使ってアクセスする変数。 ダイナミックな変数というのは、クラスに定義するのではなく クラスより作成されたインスタンスの中であるオブジェクトだけに変数を追加する方法。 クラス定義に変数が存在するかをコンパイラはチェックする事ができなく、 インスタンスは動作中にのみメモリに存在するので、変数の追加は動作中に行われるため 取得するメモリがのintやString型のように大きさの事なる領域毎に最適化されない なんかのデメリットがある。その反面、手軽に使えるので、今でもObject型やMovieClip型 なんかのdynamicな変数を追加できるクラスに変数を追加するのによく使われる。 この中で、普通、ハッシュと同じようにobj["hoge"]といったアクセスを使うのは ダイナミックな変数だけで、他の変数は動的に定義されないので、"hoge"のように 動作中になるまで値が決まらない値を使う必要性がない。 オブジェクト変数というのがどの種類の変数を指しているのか、分からないが、 インスタンス変数も含めてオブジェクトに定義された変数を総称的に指しているなら インスタンス変数はハッシュのようにはアクセスする事はまずない。
908 :
897 :2009/04/15(水) 14:38:50 ID:JumY74px
>898 addEventListenerは動かないのですが、関数を呼ぶ事はできるみたいなので、 MovieClip(root).hoge(); でルートのhoge関数を呼び出して、その中でaddEventListenerしました! ありがとうございました!
909 :
898 :2009/04/15(水) 14:56:34 ID:u3K6WSYF
>907さん
ありがとうございました。クラスとオブジェクトの関係がちょっと理解深められました。
変数に2種類(静的・動的)あることとかも理解できました。
「オブジェクト変数」という言葉が何を指すか狭義・広義ありそうで、
なんだかあいまいで僕の質問自体がおかしかったでしたね。
ためになります!
>>897 さん
よかたですた。
あ〜でも、その本って オブジェクト変数とかカスタムオブジェクトって言葉を dynamic指定されたクラスから作られたインスタンスに ダイナミック変数を追加する方法を説明するのに使ってそう。 だとしたら、大体合ってると思うんだけど。 でも、AS3で既存のクラスを拡張するのは、dynamic指定された クラス以外はクラスを継承してそのクラスの設計図に変数を追加する 方法を使うか、delegateっていってあるクラスが他のクラスの オブジェクトのインスタンスを保持する方法を使うかだから、 AS2以外のプログラミング経験がない人にこういう説明しても 意味分からないと思う事に書いてて気づいた。 だから、普通はインスタンス変数使うけど、ObjectとMovieClipは dynamicという特別なクラスだから、クラスに書いてなくても あとからオブジェクトに変数追加できるぐらいの理解でいい気がする。
911 :
898 :2009/04/15(水) 15:38:41 ID:u3K6WSYF
912 :
Now_loading...774KB :2009/04/15(水) 17:01:43 ID:nRXiUYyB
一週間でマスターする ActionScript3.0 そんな本は捨てろ
>>912 いや、俺は良本だと思うよ。
必要なことが分かり易く一通り書いてあるから。
ただ、これにもAS3.0のパスのことは書いてない。
>>896 ありがとうございます。(亀レスすいません)
やっぱりダメですかorz
SpriteではなくMovieClipクラスを継承して作成して、何かのプロパティーにfpsと総フレーム数をセット
MovieClipクラスが持つコールバック関数をオーバーライドするという流れを仮定して調べてみたのですが、
どこにもそんな記述が見当たらないorz
自分は販売されているFLASHツールやAEも持っていないので、素直にデスクトップキャプチャとか使ってみます。
915 :
898 :2009/04/15(水) 21:48:45 ID:u3K6WSYF
>>915 また亀ですいません。「物凄い勢い(ry」のスレである事を忘れてました。
わざわざありがとうございました。
カハマルカの瞳というフリーソフトでキャプチャしてみたところ画面サイズが小さい物は問題ないのですが、
1280x980くらいのサイズだとカクカクとコマ落ちしてしまいました。
HDRECSというビデオキャプチャカードをたまたま持っていたので、別のPCでSWFを再生してキャプチャしたところ
滑らかな動画が撮れました。 いちいちPC2台を繋ぐのが面倒なので「ダウンロード忍者」というのも試してみます。
フレームレートを低めに作ってキャプチャした後で倍速にすればいいかも知れませんね。
917 :
LiveMotion :2009/04/16(木) 02:23:28 ID:FXN80n1c
cIzLA0djさん ぶり返してすいません。 >ObjectとMovieClipはdynamicという特別なクラス では、特別ではないクラス(=静的変数)は、 例えば、Dateクラスのようなものでしょうか?
920 :
LiveMotion :2009/04/16(木) 04:21:42 ID:FXN80n1c
うーん。ありがとうございます。 も少しレベルの高い本で学習しないと身にならないですね。 >Amzonでレビューみてみたけど、地雷すぎるだろその本。 大地震でした(泣)。でも最後まで読み終えましたよ。 今はOreillyの「初めてのActionScript3.0」を読んでます。 Oreillyってなんだか、プロっぽくてかっこいいす。(見た目が) あもう。腹を括ってFLASHやるしかないな。
こちらで宜しかったのか少し不安ですが、質問させて頂きます。 MacromediaFlash8でシューティングゲームを作成しております。 ランチャーが弾を撃った際にのみムービークリップの再生フレームを変えたいのですが まず最初に luncher_mc.onEnterFrame = function() { if(this._currentframe == 8) { this.gotoAndPlay(1); } } と記して(1〜7が通常モーション) if(Key.isDown(Key.SPACE))の中に luncher_mc.onEnterFrame = function() { this.gotoAndPlay(8); } と入れたのですが(8〜15までが発射モーション) これではスペースキーを押した後に ランチャーがフレーム8で止まったままになってしまい困っています。 スペースキーを押した際にのみ発射モーション(8~)を行い その他の場合にはまた1〜7のループに戻すにはどうしたらよろしいでしょうか? 初歩的な質問、長文失礼しましたm( __ __ )m
7フレ目に stop(); もしくは gotoAndPlay(1); を書いておく 1フレ目に if(Key.isDown(Key.SPACE)) gotoAndPlay(8); と書いておく 15フレ目に gotoAndPlay(1); と書いておく
1-7すべてにif(Key.isDown(Key.SPACE)) gotoAndPlay(8);と入れたら解決しました。 922さん 本当にどうもありがとうございます!!!
924 :
Now_loading...774KB :2009/04/16(木) 19:18:03 ID:2fyYMDey
AS3パッケージとDate関数を使って 10分置きにmoveclip画像を切り替える方法を教えてください。
926 :
Now_loading...774KB :2009/04/16(木) 21:26:32 ID:S7CAq0aa
すいません、教えてください。 A,B,Cという文字の配列を作って、テキストエリアにランダムに表示、指定の文字が来たら、 その文字だけ残して次の文字をランダムに。。。というのをやりたくて、以下のようなスクリプトを作ってみたのですが、 これだと、順番通り「A,B,C」といかず、いきなり「ABC」になってしまったりしてうまくいきません。うまい書き方も思いつかず・・・かなり悩んでいます。どなたかご教授ください。よろしくお願いします。 var alphabet:Array=["A","B","C"]; stage.addEventListener(Event.ENTER_FRAME,mojihenkan); function mojihenkan(evt:Event):void { var moji:uint=Math.floor(Math.random()*alphabet.length); if (chk==0) {mojimoji.text =alphabet[moji];} if (moji==0) {chk=1;} if (chk==1) {mojimoji.text = "A" + alphabet[moji];} if (moji==1) {chk=2;} if (chk==2) {mojimoji.text = "AB" + alphabet[moji];} if (moji==2) {chk=3;} if (chk==3) {mojimoji.text = "ABC"; stage.removeEventListener(Event.ENTER_FRAME,mojihenkan); } }
200個のフラグ(入るのは0か1のみ)を作りたいのですが flag = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...]; とすればできますが非常に長くなってしまいます。上記以外の方法で何か簡単な記述で200個のフラグを作る+判定する方法はないでしょうか?
なんだその汚い条件分岐 switch文しらね〜のかよ
クラス作って オブジェクトに自分の状態をフラグで保持させればいいんじゃね
>>926 質問の意味がよくわからん
ランダムにAかBかCを表示して、それに続くようにAかBかCを表示して・・・っていうこと?
932 :
LiveMotion :2009/04/16(木) 23:41:24 ID:FXN80n1c
FLASHのアクションパネルでスクリプトを打つとき フォントは何に設定してます? デフォルトで使っているのですが、コロンやセミコロン。ピリオドとか 読みづらくて、よく間違えます。 プログラムに合うフォントってあるんでしょうかね?
934 :
926 :2009/04/17(金) 00:03:55 ID:SIz5cRG6
>931 そうです。 ランダムに一文字ずつ表示させたいのです。
var myText:String = "";
stop();
stage.addEventListener(Event.ENTER_FRAME,mojihenkan);
function mojihenkan(evt:Event):void {
{
var alphabet:Array=["A","B","C"];
var moji:uint=Math.floor(Math.random()*alphabet.length);
myText += alphabet[moji];
}
>>934 こゆこと?じゃないよね?
>>934 文字がランダムにごにょごにょ動いて最終的にABCにしたいんじゃないの?
937 :
926 :2009/04/17(金) 00:29:10 ID:SIz5cRG6
>935 936の方が指摘してくれていますが、それだと最終的に「ABC」にならず、 ABCの順番もランダムになってしまいます。 Aから順番にA,B,Cと表示させて、ストップさせたいのです。 分岐の判定をどのようにしたらいいかわからず、質問させてもらいました。
938 :
LiveMotion :2009/04/17(金) 00:30:59 ID:1N5Hq3kU
>>933 さん、ありがとう。
Bitstream Vera Sans Mono
最高です!
[環境]AS:AS3.0 OS:XP [質問]スタイルシートの継承を行うとバグる。 [やったこと] <<HTML部分>> <HEAD><TITLE>test</TITLE><LINK REL="stylesheet" TYPE="text/css" HREF="style.css"></HEAD> <BODY> <p><strong>トラトラトラ</strong></p> <embed src="test.swf" type="application/x-shockwave-flash" width="550" height="400" bgcolor="#ffffff" > </BODY> <<CSS>> p { font-family: Arial, Helvetica, sans-serif; font-size: 10px; line-height: 20px; color: #0000FF; } p strong { color: #FF0000; } <<Flash>> CSSを読み込み、XMLより読み込んだ文字列「トラトラトラ」をテキストフィールド.htmlTextで表示。 <<結果>> HTML表示の文字は赤色になります。 Flash部分は黒い文字になります。 cssの p strong のブロックを削った場合FlashへCSSが適用される。 XMLへCDATA入れて見たりいろいろ試したのですが、うまくFlashの文字列が赤色になりません。
>>924 DateよりもTimerクラス使って10分おきに処理実行すればいいんじゃね?
942 :
Now_loading...774KB :2009/04/17(金) 10:44:31 ID:GafjXn98
actionscript3.0でカスタムイベントの勉強をしています 渡す値nがn % 2 == 0だったらnの値をtraceするという処理の一部です public class TestEventDispatcher extends EventDispatcher { public var n:Number; public function TestEventDispatcher() { n = 0; var timer:Timer = new Timer( 500 ); timer.addEventListener( TimerEvent.TIMER, timerFunction ); timer.start(); } public function timerFunction(event:TimerEvent):void { if( n % 2 == 0 ) { //trace(n, "-test"); dispatchEvent( new MyEvent( MyEvent.GOGO, n ) ); } n += 5; } 実行結果は一定間隔で0,10,20,30,40...と出力されました この一部を下のように変えてみたのですが public function TestEventDispatcher() { n = 0; timerHandler(); } public function timerHandler():void { この場合出力は何も起こりませんでした、n = 10 などとやってみても同じく反応がありません コメントにしている//trace(n, "-test");を実行してもnの値は正常に渡されているようですが そもそも下ソースのように一度だけ値を渡してイベントに反応させるという事はできるのでしょうか?
>>942 日本語が良く分からないけど
public function timerFunction(event:TimerEvent):void {
を
public function timerFunction(event:Event):void {
こうして
timerFunction(new Event("dummy"))
こうしたいってことかな?
ああ、カスタムイベントオブジェクト作ってるのかな?じゃあ、 timerFunction(new MyEvent( MyEvent.GOGO, n )); ってことかな?
945 :
Now_loading...774KB :2009/04/17(金) 11:49:41 ID:uKwP6TvZ
num = 10; num1 = 2; num2 = 101; 1の位を取り出す方法を教えて下さい。
946 :
942 :2009/04/17(金) 12:07:29 ID:GafjXn98
>>943 ありがとうございます、説明下手ですみませんでした
そして自己解決できたようです
・呼び出し側
var t:TestEventDispatcher = new TestEventDispatcher();
t.addEventListener( TestEvent.GOGO, goFunction );
t.se( 10 );
・TestEventDispatcher側
public class TestEventDispatcher extends EventDispatcher {
public var n:Number;
public function TestEventDispatcher() {
n = 0;
}
public function se( n:Number ):void {
this.n = n;
timerHandler();
}
一度だけ値を渡す方法をTestEventDispatcherのコンストラクタで渡していたのが間違っていたようです
イベント等を設定した後に値をse()で渡した所ちゃんとイベントが反応してくれました、失礼しました
>>945 Stringにしておしり1個取得すりゃいんじゃね
949 :
LiveMotion :2009/04/17(金) 14:11:16 ID:1N5Hq3kU
AS3.0からイベントにイベントリスナーを使うようになりましたが、 JavaScriptには、このような方法はないですよね。 javaとかは、このようなイベントの方法をとるんでしょうか?
>>945 常に整数である(小数点以下の値は無い)っていう前提でいいの?
951 :
Now_loading...774KB :2009/04/17(金) 14:41:07 ID:uKwP6TvZ
954 :
LiveMotion :2009/04/17(金) 18:25:12 ID:1N5Hq3kU
952さんありがとう。 てっきりJavaScriptはイベントハンドラだけで処理するのかと 思ってたです。 ところで、AS3.0についてイベントリスナーを使ったイベント処理が 標準になってますけど、いままでのon()のようなイベントハンドラの 使用より、何かしらのメリットがあるんでしょうか? 勉強を始めて(リスナー関数の引数設定とか)結構わけわからん状態なのですが、 そのイベントリスナーを使うメリットとか判れば、なんだかやる気が でるかも知れないなあ。と・・。
>>937 グローバル変数とか
mojimoji.text = "";
crtText = "";
crtIndex = 0;
ENTER_FRAMEループ
function()
{
if(crtIndex < alphabet.length)
{
randomNum = Math.floor(Math.random() * alphabet.length);
if(randomNum = crtIndex)
{
crtText += alphabet[crtIndex];
++crtIndex;
}
mojimoji.text = crtText + alphabet[randomNum];
}
}
}
crtIndex、crtTextは無しでもできるだろうけど
As2.0で作っています。 20個の画像入りボタンを並べたアルバムのようなものを作っています 使用しているのは10個のボタンで、あと10個は空ボタンとなっています 新しい画像を増やした際に新着順に並べるためのボタン記述を書き直す 手間を省きたくて、 変数ListMax = X; として、現在、ボタンの操作する this._mc.sum_16_mc.btn16.onRelease = function() { というコードを this._mc.sum_(X-1)_mc.btn(X-1).onRelease = function() { this._mc.sum_(X-2)_mc.btn(X-2).onRelease = function() { こんな感じにListMaxを変えるとMCを増やしたり並べ替えが簡単にできるように しようと思っています。 いろいろ試行錯誤をしてみたのですが、上手く動作してくれません。 アドバイスをぜひお願い致します。
mc.aaa mc['aaa'] var s = "aaa"; mc[s]
as3です ムービークリップaを作ってaの中にhoge()というファンクション作ったとして そのaをインスタンス名 a0〜a2 で3個配置して それぞれの hoge()をたたきたい場合 a0.hoge(); a1.hoge(); a2.hoge(); だとうまくいくのに for(var i = 0;i <= 2;i++){ this["a"+i].hoge(); } だと失敗するんだけど… this.a0.hoge(); もダメ。そもそもthisじゃないなら省略したときもダメじゃないのかと… 何か私が勘違いしてるのかもしれないです。 すんません。ボスケテ ちなみに インスタンス名 "条件は未定義であり、プロパティがありません。" this as3 とかでググってしらべ済です。 こういう場合どうで調べたらいいのか…
960 :
LiveMotion :2009/04/18(土) 13:54:43 ID:+Zyy1Img
955さん。 ありがとう。勉強になります。
>>959 普通にできてると思うけど、そのクリップと呼び出し関数の位置関係はどうなってる?
あ、それからクリップはどうやって配置したの?
as2とas3のthisは結構変わってるからその辺の問題かな。
962 :
959 :2009/04/18(土) 15:26:21 ID:HQ6OlCLA
>>961 レスどうもです。
まっさらな状態からそれだけに特化するもの作るとできるとこをこちらでも確認しました。
まっさらじゃないと今までできていたのに突然できなくなるようなのです。
原因を突き止めたいのですが、いつ発生するのか不明なので時間がかかりそうです。
OK -> a0.hoge();
NG -> this.a0.hoge();
どちらにしてもこれが謎すぎて…
関数はインスタンスのレイヤ1に
function hoge(){
から書いています。
配置の仕方は作成したライブラリをドラッグ&ドロップで置いたあとに
インスタンス名を変えているだけです。
試しにインスタンスをtraceしてみたところ
trace(a0) -> [object Timeline_**]
trace(this.a0) -> undefined
ワララン・・・ orz
>>962 あと呼び出し側はどうやって、どういうタイミングで呼び出されるの?
965 :
959 :2009/04/18(土) 15:36:30 ID:HQ6OlCLA
>>963 trace(this)は [object global] だった。
これな気がしてきた…
>>964 呼び出し側はやはりMCなんだけどMCに張り付けられた a0を
MCのクリックイベントで呼びに行こうとしています。
というか素早い対応ありがとうございますm(_ _)m
>>962 とりあえずエスパーすると
var callback:Function = function(e:Event){
trace(this.a0);
}
だと失敗して
function callback(e:Event){
trace(this.a0);
}
だとうまくいったりしないかな。
967 :
959 :2009/04/18(土) 15:49:40 ID:HQ6OlCLA
>>966 クリックイベントの宣言のしかたということですかね?
その場合だと、最初から後者で、前者は宣言自体できませんでした…
>>967 宣言してるところでtrace(this.a0);はうまくいってるかな?
その時点でうまくいってないならそこを見直すべき。
っていうかもう実際見てみないとアドバイスできんな。
969 :
959 :2009/04/18(土) 16:10:42 ID:HQ6OlCLA
>>968 undefined
このざまです…
すみません。大丈夫です。もともとの数が少ないので
とりあえずはswitch文+手打ちで回避しちゃいます。
少ない情報で対応していただきありがとうございました。
trace(this.???.a0); というふうに ??? に何かのインスタンス名を入れる必要があるとか? trace( parent.a0 ); みたいにしたら動くようになったことがあるなぁ。 いずれにしてもthisが何を指しているのかを調べればおのずと解決するかと。 というか、それが分かってないのはまずいと思う。
Flashオーサリングツール持ってないからよく知らないけど、 thisはグローバルを指してて、a0はローカル変数になってるから 見えないんじゃない。 関数とかクラスの内部で変数宣言してるからローカルになってるとか そんな感じじゃね
972 :
959 :2009/04/18(土) 18:00:43 ID:HQ6OlCLA
回避策できました。
初回起動時はなぜかthisの値がほしい値だったので
var init:int;
var thisObj:MovieClip;
if(init != 1){
init = 1;
thisObj = this;
}
レイヤ1のスクリプトにこれをいれて thisObj.a0.hoge();
とすることで対応できました。
同じレイヤ内でいつのまにかthisの値が変わるのは謎なんですが
とりあえずこれでいきます。
>>970 >>971 レスありがとうございます。
973 :
Now_loading...774KB :2009/04/18(土) 18:04:37 ID:RtPujbOx
すいせん下記のコードのどこが悪いのでしょうか? package { public class ChkTime { public var dt:Date; public var hh:Number; public var mm:Number; public var ss:Number; function ChkTime() { addEventListener(Event.ENTER_FRAME, updateChkTime); } //リアルタイム public function updateChkTime(event:Event):void { //現在時刻の時分秒を調べる dt = new Date(); hh = dt.getHours(); mm = dt.getMinutes(); ss = dt.getSeconds(); trace(ss); } } }
974 :
Now_loading...774KB :2009/04/18(土) 18:06:23 ID:HKK8RsPf
そのコードをメンテナンスする人の事を考えると 素直にドキュメントクラスをアタッチしたらほうが良い気がする。
>>973 enterFrameイベントが使えるクラスを継承してないからイベント追加できないんじゃね?
977 :
Now_loading...774KB :2009/04/18(土) 19:04:30 ID:RtPujbOx
>>976 結局タイムラインにオブジェクトを配置していないから、
と言う事ですか?
>>977 どこが悪いのですか?ってアバウトすぎるだろw
どういう環境でどういうエラーが出るのかくらい書いてほしい
たぶんimport文がないから動かないんだと
>>974 wonderfl ね
wonderflはクラスで作られてるから、タイムラインにそのまま貼っても動かないよ
ドキュメントクラスに指定するといいかも
979 :
Now_loading...774KB :2009/04/19(日) 05:46:56 ID:ARR8DMQR
すまね。シンボルとクラスの違いがよくわからんのだが 因みに、インスタンスとオブジェクトの違いもよく分からん。 だれか教えてくり。
>>979 シンボルとクラスは、ほぼ同じモノを指す。
インスタンスとオブジェクトの違いは、
オブジェクトはよく言われる喩えでは、ひな形。
インスタンスは、ひな形から生み出された実体とかいうけど、
この説明よく判らんよな。
そもそもオブジェクト指向の起こりは、プログラムの殆どの処理は変わらないのに、
変数の一部が違うために、同じプログラムを一々コピペして、一部を編集とか言うのが効率悪いよね
という現場の声が切っ掛けになったと聞いた事がある。
コピー元がオブジェクトで、コピーされて変数の一部を変更されたのがインスタンスだ。
オブジェクトからインスタンスを生成するというのは、オリジナルのプログラムをコピぺして、
その一部の変数値を変更するという行為を効率よくした仕組みだ。
さらにオブジェクト指向では、変数のみならずメソッドも変更できたりする。
オブジェクトというのは物っていう意味。 インスタンスってのはクラスという設計図を元にして作られたオブジェクト(物)のこと。 石ころ、自動販売機、車、ロボット => 全部オブジェクト 車、自動販売機 => クラスという設計図の通りに作られたオブジェクト
982 :
Now_loading...774KB :2009/04/19(日) 16:52:45 ID:ARR8DMQR
980,981さん。ありがとう、ちょっと理解できた。 えっと。クラスとシンボルの関係なんだけど、 クラスの中のうちで、ライブラリに入っているものがシンボルって のはどうでしょうか?
>>982 ライブラリに入っているものが、シンボルでもありクラスでもある。
Adobe Flash CS4のライブラリーに図形とかを登録する時に、登録されたモノを総称して『シンボル』という
ActionScript3からライブラリー内のシンボルを呼出してプログラムで加工したいときは、これを『クラス』とよぶ
984 :
Now_loading...774KB :2009/04/19(日) 19:59:08 ID:ARR8DMQR
983なんどもありがとう。 >Adobe Flash CS4のライブラリーに図形とかを登録する時に、登録されたモノを総称して『シンボル』という >ActionScript3からライブラリー内のシンボルを呼出してプログラムで加工したいときは、これを『クラス』とよぶ ↓ これをステージに載せたとき『インスタンス』になる。 でOK?
インスタンスっていうのはクラスから作られたオブジェクトという意味を強調した言い方で 単にオブジェクトというと、もっと総称的にデータとデータを扱う手続きを決めた関数をまとめて メモリにしまっておけるようにしたものという感じかな。
986 :
Now_loading...774KB :2009/04/19(日) 20:38:50 ID:ARR8DMQR
>983 おお分かりやすい。ありがとお。
987 :
Now_loading...774KB :2009/04/19(日) 22:21:18 ID:ARR8DMQR
あ、間違えた。985さんありがとお。
今初めてゲームを作っているのですが ドラクエのようなコマンド式の戦闘を作ってみようと考えています ・1体1のバトルで、自分が常に先攻のため素早さは考慮しない(というかステータスという概念はない) ・属性も考慮しない ・装備も無く、攻守等による計算無しで、ランダム要素も無い ・1回だけの戦闘で終わり ・コマンドは「戦う」→「スキル選択」と「守る」の2つのみで「アイテム」や「逃げる」は無い ゲームの流れとしては 1.自分のターン:コマンドを選ぶ 2.戦闘開始 自分:先攻。コマンドで選んだスキルが発動する 相手:後攻。ランダムで数種類の攻撃スキルの中から1つ発動 1.へ戻る 3.相手か自分のHPが0になったら終了 という感じです。ただ、これではあまりゲームとして面白くないので 自分のターンに○○というコマンドを選んで次のターンに◇◇というコマンドを選ぶと大ダメージ、という風にしたいです そこで質問なのですが、このゲームを作るのに最低限知っておくべきASは何でしょうか? とりあえずAS関係の解説サイト等一通り見たのですが、if分岐が必要かなと思いました 他にも知っておくべきASがあれば教えてください。また、参考になるサイトもあれば教えてください
>988 つ>1
非常に基本的な質問で恥ずかしいのだが 環境はCS3 AS3 for文で関数の識別子に変数を入れて複数作成しようと思い for(var i:int=0;i<10;i++){ function this["xFunc"+String(i)]():void{ } } 上記で xFunc0〜9 の関数を作れるかと思いきや 識別子の場所でシンタックスエラーになってしまう。 どう記述すれば良いのか教えてくれないか。 エラー内容は下記のとおり 1084: Syntax error: expecting identifier before leftbracket. 1084: Syntax error: expecting leftparen before leftbrace. 1084: Syntax error: expecting identifier before leftbrace. 1084: Syntax error: expecting rightparen before leftbrace.
>>990 abc();
function abc(){ trace("success!"); }
992 :
988 :2009/04/20(月) 12:46:44 ID:kZI8CvFc
>>989 失礼しました
環境はCS3、AS3です
よろしくお願いします
993 :
Now_loading...774KB :2009/04/20(月) 12:46:52 ID:+6zqXwO1
押すとフラッシュが再生されるボタンの作り方がわかりません… ボタン自体は作れたんですが、再生すると一瞬現れて消えてしまいます… 初心者スレで書き込もうとしたんですが、ユーザー設定消失とかで書き込めないので こちらに質問させていただきました…
994 :
990 :2009/04/20(月) 13:00:44 ID:mi/A44HK
>>991 書き方が下手で申し訳ない。
聞きたかったのは関数宣言の記述ではなくて
「関数の識別子に変数を入れて宣言する場合の記述」なんだわ。
もし
>>991 に答えがあって俺が読み取れてないのなら生暖かくスルーしてくれ。
早レスthx
>>990 こう?
this["xFunc"+String(i)] = function():void{
}
勘違いしてたら華麗に叩いてくれ
>>995 すまない、やりたいことの意味は正にそれなんだが
for(var i:int=0;i<10;i++){
this["xFunc"+String(i)]=function():void{
}
xFunc1();//テストとしてxFunc1を呼び出してみる
}
上記を走らせてみると
1180: Call to a possibly undefined method xFunc1.
と返ってきて関数を呼び出せていない様子なんだ。
varとデータ型指定が無いから宣言が出来てないのかと予想しているけど
var this["xFunc"+String(i)]:Function=function():void{}
とするとまたシンタックスエラーが出てしまう。
超基本的なところが理解できてない予感で汗顔だわ。
なんにせよthx。名無し関数を変数に入れて参照ってのは目からウロコで大変勉強になった。
>>996 var funcList:Array = new Array();
for(var i:int=0;i<10;i++){
funcList[i] = function():void{}
}
funcList[5]();
とかどうでしょ。
可変関数みたいのあまり使った事ないので
もっとスマートな方法があるのかも
998 :
990 :2009/04/20(月) 15:33:45 ID:mi/A44HK
>>998 興味本位なんだけど
for文でつくると関数の中身は同じだよね
なら一つの関数で、引数とswitchあたりで振り分ける方が
管理が楽じゃない?
何か目的があるとか、上手いやり方が出来るとか?
1000 :
990 :2009/04/20(月) 17:11:02 ID:mi/A44HK
>>999 ガッカリさせるかもしれないが、そんな高尚なものじゃないんだw
恥ずかしながら、おっしゃるとーり
初心者の理解不足からくる遠回り
たった今、引数で管理するように作り変えたよ
>>991 >>995 >>997 さん達にしてみれば、なにしてんのwってもんでしょうが、生暖かく見逃して
しかし前述の例も方法として興味深い、忘れないでおきます
あと
>>999 気付かせてくれてthx
1000で恥を晒したが為になりました
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。