1read 100read
2012年08月FLASH3: ActionScript 誰かが物凄い勢いで解答するスレ31 (203) TOP カテ一覧 スレ一覧 2ch元 削除依頼
ありさんとくらげさんがごっつんこ その8 (689)
テスト (706)
SANETOMO WORKS 総合スレ sec10 (623)
■ BARギコ ONLINE ■ (506)
無料flash作成ソフト“ParaFla!” part24 (881)
テスト (706)

ActionScript 誰かが物凄い勢いで解答するスレ31


1 :2012/10/08 〜 最終レス :2012/12/08
AcitonScriptのことなら
初歩的な質問でもなんでもおk
見れない、保存したい、flashを作りたいはスレ違い
下記の関連スレ、超基本的な質問へ。
●質問する時は自分の環境を書く(AS2,AS3の別も)
●質問はものすごい勢いじゃなくて結構
●できるだけコードも示す
●まず自分がやりたいことを明確に書く。そのために試してみた処理を書く
前スレ
ActionScript 誰かが物凄い勢いで解答するスレ30
http://toro.2ch.net/test/read.cgi/swf/1324748254/
関連スレ
Flashの超基本的な質問はここでしろ! part43
http://toro.2ch.net/test/read.cgi/swf/1327630120/
※初心者は↑こちら推奨

2 :
>1乙

3 :
>>1乙カレー食え

4 :
こんにちは。
ActionScript3.0のマスクについて質問させていただきます。
現在下記のようにマスクをかけようとしたところ、かかりませんでした。
ビットマップには既に画像が入っています。
var my_shape:Shape = new Shape( );
stage.addChildAt( this.my_shape, 0 ); // --- 矩形を左上で固定させる(実はここもよくわかってない)
this.my_bitmap.mask = this.my_shape; // --- マスクのセット
this.my_shape.graphics.lineStyle( 30, 0xFF0000, 1.0, false, "normal", CapsStyle.ROUND );
this.my_shape.graphics.moveTo( 0, 0 );
this.my_shape.graphics.lineTo( 1024, 768 );
moveToとlineToを次のようにしたらマスクがかかりました。
this.my_shape.graphics.beginFill( 0xFFFFFF );
this.my_shape.graphics.drawRect( 0, 0, STAGE_H, STAGE_V );
this.my_shape.graphics.endFill( );
なんとなくなのですがFLASHには線と面があるという事でしょうか?
また線でマスクをかけたいばあいはどのようにすればいいのでしょうか?
画像がスクラッチのように出てくる演出を考えております。
よろしくお願いします。

5 :
>>4
マスクとは「塗り」で設定するものなので線ではできない
線のように細い塗りにするとか

6 :
4です。
なるほどマスクとは塗りで設定するものですか。
勉強になりますありがとうございます。
現在drawCircleを連続使用してボールペンのようなマスクを実現しました。
最初はシェイプクラスのグラフィックを使用して行ったのですが、見事に処理落ちしました。
それから as スクラッチ で検索したら、参考にすべきページが出てきました。
そのページではシェイプではなくムービークリップを使用していたので変更したところ処理落ちがなくなりました。
一応挙動には満足しているので解決とさせていただきます。
ただなぜ処理落ちが取れたのかがわからなくてちょっと後ろ髪を引いてますw
ありがとうございました。

7 :
Graphicはdrawしまくるとめちゃくちゃ重くなる
enterFrameでdrawCircleしたんだったら大変なことになるかもね
MCでも塗りに対してマスクになってるよ

8 :
よくfunction内とかで
{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,comp);
loader.load(...);
}
ってコードが有りますが、loadが終わる前にGCが発生して
loadが中断してしまう可能性はありませんか?

9 :
contentoLoaderInfoにイベントリスナー参照があってcontentoLoaderInfoからloaderがthisで参照されてるからなんとなく大丈夫のような気がするけどためしてはいない

10 :
あうcontentoってなんかダサい打ち間違い (w

11 :
訂正 thisじゃ自分自身になっちゃうので、LoaderInfo.loaderで関係するloaderを参照してるんだった

12 :
ttp://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=9573&forum=6
ここ見ると可能性はあるっぽいです…
多分大丈夫的なノリで皆さんコーディングしてるんでしょうか… 恐ろしや
それとも実務ではloaderをちゃんとメンバ変数に保存してるんですか?

13 :
>>12
そんなこと聞くよりGCについて勉強した方が早いと思うよ

14 :
ttp://www.moock.org/blog/archives/000279.html
こういう記事を見つけました
GCされる条件にClose any connected network objects とあるのでLoading中は大丈夫なのだと思いますが、
公式でこういった見解出てましたっけ?

15 :
FlashProとFlashBuilderで連携した開発でハマったので質問です。
■前提
FlashBuilder 4.6
Flash Pro CS6
playerglobalは11.3で統一
「-locale ja_JP -swf-version=16」付きでビルド
FlashProで複数のflaファイルからswc(flaファイル分だけ)を作成
  ↓
FlashBuilderで作成したActionScript3プロジェクトからswc内のクラスを参照して
Flashアプリケーションをビルドしています
■質問事項
Q1.FlashProでswc化したクラスをextendsしただけのFlashアプリケーションが真っ白になる場合がある(ならない場合もある)
 この場合、FlashPro側で設定したMovieClip等のインスタンス名はデバッガ上で確認できるものの値はnullになっている
だが、何故か単にnewしてaddChildした場合は正常に動作する
Q2.FlashProでswc化したクラスのインスタンスのフレームスクリプトが実行されない場合がある
複数あるswcのどれかをを再パブリッシュしてからプロジェクトをリビルドすると改善する場合がある
どなたか似たような現象に遭遇したとか、解決策ある方います?
よろしくお願いします。

16 :
15です。
自己解決しました。
flaファイルの中で利用されているフォントが私のPCになかったことが
原因のようで、静止テキストをシェイプ化、ダイナミックテキストをデバイスフォントに
することで解決しました。
イマイチどういう内部処理でこのような現象になったのかは理解できていませんが。。。

17 :
>>16
flash CS6ってフォント周りでなんかそういう変な現象起こるよ
TLFテキストで文字が一部欠ける、とか縦書きにすると
表示されない、とかなんだか分からない問題起こった。
ダイナミックテキストにしたりフォント変えると直るんだけど
表示されたりされなかったり、っていう事態があるとチェックが遅れるよね

18 :
15です。
>>17
フォント周りはそうなんですね。。。

で、その後、直ったと思ったんですが、また同様の症状が発現してしまいました。
最悪継承じゃなく、内部でswc内のクラスをnew&addChildするようにして、更にaddFrameScriptで
flaに書いてたスクリプトを再現すればなんとかなるかと検討中です。
面倒なのでしたくないんだけど
なんか対応方法ないですかね?

19 :
こんにちは。
コンパイルされたクリップに変換について質問させていただきます。
使用ソフト:FLASH Pro CS5.5(AS3.0の編集はFlashBuilder4.51を使用)
プログラムは多少知識がありますがFlash&AS3.0は初心者です。
画像などが多くなったためかパブリッシュが遅くなってしまい、
パブリッシュの高速化をしようと思いました。
最初はpngの最適化などを行ってみたのですがflaファイルが小さくなるだけで特にパブリッシュ速度には影響がなさそうでした。
なので少し調べていたら、『フォントの埋め込みでのコンパイルされたクリップに変換』記事が多く見つかりました。
そこでフォントは埋め込んでいないのですが、ムービークリップをコンパイルされた状態にすれば早くなるのではと思い変換を行いました。
そして変換後、元のムービークリップはASに書き出しチェックをはずし(ライブラリには残っています)パブリッシュを行いました。
すると次のような警告が表示されました。
myMovieClip SWF (コンパイル済みクリップ)、行 1 Warning: 5002: シンボル 'myMovieClip2' のフレームスクリプトはコンパイルされたクリップに My_MovieClip2 の定義が含まれているため、無視されました。
My_MovieClip2 の定義をオーバーライドするには、カスタムクラスファイルをクラスパス内に配置します。
確かにmyMovieClip2の最終フレームにはstop();を記述しているのですがmyMovieClipには関係がないのではと思うのですがどういう意味なのでしょうか?
myMovieClip2のstop();を消すとこの警告は消えるのですが、ループしてしまい止めるのが面倒です。
ちなみにMy_MovieClip2はmyMovieClip2のクラス名です。
ステージにはインスタンスは一つも配置していなく、全てAS3.0からnewとaddChildで表示させています。
警告を消し、フレームスクリプトも使用できるようにはならないでしょうか?
よろしくお願いします。

20 :
そのエラーは初めて見たなw
パブリッシュが遅いって何秒くらいよ?
MCをコンパイルした状態ってなんだっけ

21 :
19です。
パブリッシュはストップウォッチで測ったところ平均20秒ぐらいです。
ちょっと変更したらctrl+Enterで動作チェックしているので結構アレですw
実は上記のエラーはFLASHpro再起動したらでなくなりました。
ただ他のビットマップの基本クラスが空欄になってしまい(BitmapDataだった場所)
フレームスクリプトは無視されますという警告が出るようになったので、
コンパイル済みのクリップ(swf)を消して20秒我慢して作ってます。
初めてのFLASHでの大規模(っと言っても個人制作のゲーム)なので、
プロジェクト(?)のセオリーがわからなくて手さぐりです。
皆さんってどういう環境で作ってるんですかね?
よろしければ教えてください。
私は
Win7-64bit+i7-860+メモリ8GB+GT220
FlashProCS5.5+FlashBuilder4.51
基本的には連携とは言ってもFlashBuilder4.51はエディタとして、
っというかドキュメントクラスを編集しようとしたらFlashProに聞かれたので、
なんとなくFlashBuilder4.51を選択しそのままやってる感じです。
最近やっとSWC(前スレで教えてもらった)の存在を知って、
次はFlashBuilderとFlashは切り離して作ろうかなと思っているのですが…。
仕事でFLASHやってる人もこんなにパブリッシュ時間かかるんですかね?


22 :
ウチも中規模以上のを過去にいくつか作ったけどパブリッシュが遅いって事はない
コツはメインSWFに外部サウンドや外部SWF、ラスター画像をロードさせる方式にしてるからだ
一つのSWFにすべて詰め込むとパブリッシュにたっぷり時間がかかるかもしれん
ちなみにメインSWFはフレーム毎に処理を分けてる為 実行(.exe)ファイルにした場合
ウィンドウ上部のコマンドから 制御→次に進む とか 戻る とかされると不具合が出てしまう
それを防ぐ為さらにメインをSWFを1フレームのみの本体SWFに読み込んでリリースしている
(ただしexeファイルで公開する場合)
…て 説明わかり辛いかもw

23 :
ビデオとかサウンドは埋め込むとプレビューでも毎回エンコードされて時間かかるから外部ロードで、
あとflaファイルがでっかいとぶっ壊れやすくなる気がするから、必要な部分はFlashProでパーツごとにつくって
全体はFlashBuilderのプロジェクトで構築したほうがコンサバかなーという気がする

24 :
>>22
なるほど外部データですか。なるほど。
一つ疑問なのですが外部データの場合、人にあげるときに画像とかを直接見られてしまいませんか?
よく複数のswfを一つのswfにまとめて(つなげて)るのを見かけます。
たとえばそれがノベルゲームだった場合途中のswfを再生されたらネタバレになってしまいませんか?
Flashの素材を保護したいわけではなく、exe単品であげたほうがPC弱い人とかにはわかりやすいのかなと。
でもPCゲームとかのフォルダ見ても確かにテクスチャデータとか外部にありますよね。
ってことは内部データと外部データの分け方(バランス)が重要ってことですかね。
swf入れ子にしていくの素晴らしいですね。
シーンで開発分けれますし、進む戻るの解決方法もありがとうございます。(メモ
>>23
やっぱり外部ロードなんですね。ってことはコンプリート的なイベントを考慮して作るわけですね。
恥ずかしながらFlashProのライブラリに入れておけばそういうの覚えなくていいかなと思って作り始めてしまいましたw
なるほど。じゃあ読み込みクラス(Loaderクラス?)のラッパークラス的なものを作ってデータ読み込みを管理したほうがいいのか。
NowLoadingとか出したほうがいいですね。
flaファイルってでっかいとぶっ壊れるんですか!!おっ恐ろしい。速攻バックアップとりました。
現在flaは60Mぐらいなんですが…おっ大きいですかね?最終的には100Mぐらいになりそうですが…。
(ビットマップ500枚ぐらいライブラリに登録してます。そしてドキュメントクラスのコンストラクタで全部new…)
必要な部分をFlashProでってのはSWCってことですよね。次はFlashBuilderメインで作ろうと思います。
コンサバがわからなくて調べましたwなるほど今度人にそう言おう。
正直、失礼な話ですが「FlashってGIFが作れて少しプログラム使える」ぐらいの認識でした。
ですが作り始めて思うのが「こんな便利な物だったのか」と早くやらなかったことを日々後悔です。
私的な話で申し訳ない。
とりあえず外部データをうまく活用したほうがいいということですね。
ありがとうございます。

25 :
画像を見られたくない場合はSWFにして外部読み込み用SWFにする
外部SWFのメインタイムラインは1フレームのみにして そこに制御用MCを配置
制御用MC内の1フレーム目は何も無しで2フレーム以降に画像等貼っとく
本体で呼び出した時は制御用MCの再生ヘッドを動かして(2フレーム以降)にして使う
普通のゲームではここまでやる必要は無いかも どうせ単体では動かないし絵を見られるだけだ

26 :
>>25
2フレームもいらないだよ
埋め込みアセットにしておけばいいだけだと思う
フレームに配置するより、ライブラリにだけ埋め込んどいて
addChild等で配置するほうが軽いという話も聞いたでよ

27 :
なるほど ラスター画像のみならトゥイーンする事ないもんな

28 :
>正直、失礼な話ですが「FlashってGIFが作れて少しプログラム使える」ぐらいの認識でした。
>ですが作り始めて思うのが「こんな便利な物だったのか」と早くやらなかったことを日々後悔です。
>私的な話で申し訳ない。
ちょっと前にアニメーションとしてのFlashが流行ったからかこう思ってる人少なくないのかもねえ
今やブラウザという制限超えてモバイルアプリまで作れるものなんだけどね

29 :
>>25
なるほど。そういう使い方もできるんですねムービークリップ。
日が浅すぎて色々な使い方(アイディア)が乏しいですw
あ〜しかしなるほど〜そうか〜なるほど…なるほどな〜。
>>26
埋め込みアセットという新しい情報をもらったので検索しました。
アセットはデータを意味するんですね。それを埋め込むと。…これいいですね!!
ただClass as Bitmapというソースがあって「as…?」となりましたがw(キャストなんですね
>>28
確かにその時にイメージを埋め込まれた感があります。
マルチプラットフォームとして開発できるのは素晴らしいですね。
PCやスマートフォンのパワーが全体的に上がればFlashで3Dゲームとか出そうですね。
……あれ?じゃあもうFlashだけでいいんじゃ…。全PCで大体動くし…。
って思うぐらいActionScriptってスマートだと思います。いやほんとに。
ActionScriptとかはJIT系の言語っていうんですかねJavaとか、
なんか敷居が高くて入りずらかったんですけどこれはもう戻れなくなってしまうw
特にActionScriptはFlashProでプログラム付素材が作れる点がすごくいいです。まさに至れり尽くせり。
他のJIT系の言語もこんなに便利なんですかね。ちょっと興味が。
ただintが参照渡しできない事だけが…。っと書いてて思いましたがもしかしてオブジェクト型にすればいいのでは。
すごいぜAS3.0

30 :
intの参照気にするなんて相当のツワモノらしいなw
最近のコンシューマゲームでもGUIの部分はFlashで作るのはめずらしくないようだ
Flashに慣れると他の言語でグラフィカルな絵の作品を作ろうとすると気が遠くなるだろう

31 :
AS3で質問です。
--------------------------
main ();
function main ():void{
func1 ();
trace ("A");
func3 ();
trace ("B");
}
function func1 ():void{
trace (11);
var time:Timer = new Timer(1000,1);
time.start ();
time.addEventListener (TimerEvent.TIMER_COMPLETE, func2);
}
function func2(e:TimerEvent):void{
trace(21)
}
function func3 ():void{
trace (31);
}
-----------------
これの結果は、
11 A 31 B 21
となりますが、main()内をできるだけ変えずに、
11 21 A 31 B
とするためにはどうしたらいいでしょうか。

32 :
やり方はたくさんありそうですが多分Timerイベント消しちゃダメなんですよね?
じゃあwait関数とかで一秒ぐらいプログラム止めればどうかと思いましたが
ASにはwaitやsleepは無いようです。ですがこんなの見つけました。
ttp://d.hatena.ne.jp/kaityo/20090621/1245571132
ただループ中(sleep)でもイベントって呼び出されるんですかね?
ASってマルチスレッドなのかがわかりませんw
これは何を目的にしたプログラムなのでしょうか?



33 :
目的がまったくわからんが何かの課題かねー? レガシーで非推奨だけどTimer以外ではsetInterval()とかもたしか一応は使えるはず

34 :
>>32 非同期処理(?)のライブラリは色々あって便利なのかもしれないけど、
イベント駆動なAS3からプログラム始めた身としてはありゃりゃ?となることも多いです

35 :
ゲームを作っている最中に疑問が出たので質問しました。
func1で1秒間フェードアウトして、それが終わったらfunc3で新たにメッセージ表示したいんですが、
今はfunc2関数内の最期にfunc3()を書いています。
main関数を見れば、関数内でやっている処理が一目でわかるようにできないかと思いまして。

36 :
あれ? A → sleep○○ミリ秒 → B みたいに前が終わったら次を逐次実行するのは同期処理なんでしたっけ?
>>35
timelinemaxみたいな逐次処理が簡単に管理できるライブラリなどを使うのもいいかも

37 :
>>34 いや私もそんなに(むしろ全然)マルチスレッドに詳しいわけではないです。
しかしながら自分で書いてて気になったので追記します。
私が考えたのはTimerクラスをnewまたはスタートした時点で、
スレッドとして扱われるのだろうか、というものです。(ひどく勝手ですが)
ですがよくよく考えるとグローバル変数(ASでなんていうのか)等の同期やらクリティカルセクションがどうとか
という話になりそうなので、普通はそれをユーザー(プログラマ等)に知らせずやらないだろうと思いました。
そう考えるとwait関数などを作ってもmain関数を抜けるまでTimerイベント(今回はTIMER_COMPLETE)に登録された、
処理は実行されないと思います。(お前思ってばかりいないでテストしろよと言われそうですがw)
イベントはひたすらスタックにっぽく溜まっていくのかもしれません。
ちなみに>>35でやりたいことが分かったのであくまで私だったを少し書きます。
1・まずmain関数をタイマーで呼び出す
補足・一秒間に60回処理したいのなら16.6667ぐらいですかね正確ではありませんが。
これで一応main関数が60回呼ばれれば一秒という事になります。(精度は完ぺきではありませんが)
2・メイン関数の中でスイッチかイフで分岐処理でフェードやらを管理します。(っというか全部w)
っという極めて普通そうな案を提案してみますw(ASではどうなんですかねこれは)
ちなみに最新のFLASHはマルチスレッドが実装されているようです。
ttp://cuaoar.jp/2012/06/actionscript-1.html

38 :
import flash.utils.*;
・・・ 省略 ・・・
//main内
func1();
setTimeout(func2, 1000)
setTimeout(trace, 1100, "A");
setTimeout(func3, 1200);
setTimeout(trace, 1300, "B");
ライブラリとか使わずに一番短く書くならこんな感じですかねー? Timerでちゃんと書いた方が良いだろうけど

39 :
setTimeout()の戻り値を使ってclearTimeout()しないとGCされないみたいなことが書いてあった

40 :
>>38
func2やfunc3の処理がきちんと終了したのを確認してから以降の処理を実行したいんですよね。
さらに、main関数内のfunc1、func3の処理は戦闘開始時、戦闘中、戦闘後くらいの粒感で、func2は戦闘開始時のコマンドボタン表示みたいな少し細かい粒感にしたいので、
main関数内にfunc1 func2 func3を一緒くたに書くのも避けたいのです。
後だし要件すいません。

41 :
うーんよくわかんないけど、それぞれaddEventListener()でコールバック関数を登録して、しかるべきタイミングで完了イベントをdispatchEvent()する正攻法でいいのでは

42 :
非常に恐縮なのですが、粒感ってなんですか?(ASの専門用語?)
調べても食感的な事しか出てこなかったので。パーティクル?


43 :
多分粒度のことだと思う
1つのメソッドをどのくらいの処理内容にするかとか

44 :
投げられたコマンドを順に処理するエンジンを作ってmainで順番に投げるのが楽では?

45 :
>>43 粒度ですか。一つ賢くなりました。ありがとうございます。
簡素なエンジンのはずが、
突き詰めていつの間にかFlash版RPGツクールの公開に至ることを願いますw

46 :
mc1とmc2がステージ上にあり、zキーを押すと、mc1がmc2の近くに動くようにしたいです。
なので、mc1の中に
stage.addEventListener(KeyboardEvent.KEY_DOWN,move);
function move(e:KeyboardEvent)
{
if(e.keyCode == 90)
{
this.x=mc2.x+50;
this.y=mc2.y+50;
}
}
っと書きました。
すると「未定義のプロパティ mc2へのアクセスです」
と出てしまいました。 mc1の中からmc2にアクセスするにはどのようにすればよろしいでしょうか?

47 :
31です。dispatchEventのことは知らなかったのですが、
使ってみたらtrace結果はfunc1 func2 func3となり、希望通りの動きになりました。
こういう使い方は正攻法なのかわかりませんが、ひとまず疑問は解決しました。
ありがとうございます。
--------------------------------------------------------------------
main ();
function main ():void
{
func1 ();
addEventListener ("tofunc3",func3);
}
function func1 ():void
{
trace ("func1");
var time:Timer = new Timer(1000,1);
time.start ();
time.addEventListener (TimerEvent.TIMER_COMPLETE, func2);
}
function func2 (e:TimerEvent):void
{
trace ("func2");
dispatchEvent(new Event("tofunc3"));
}
function func3 (evt:Event):void
{
trace ("func3");
}

48 :
>>46
オススメしないけどその場合はparent.mc2.x

49 :
>>48 ありがとうございます。 無事解決しました
追加で質問なんですが
シーン1で var a:Number=5 と定義した後 mc1の中で
 var a=MovieClip(parent).a;
trace(a);
と書いても undefined と出てしまい、数字の取得に失敗します。
アクセスするのと、数字を取得するのはまた別の方法になるのでしょうか?
度々申し訳ございません。

50 :
AS3.0で制作していて、ふと疑問っといいますか不安に襲われたので質問させていただきます。
public static const yaoya:Array =
[
  ["トマト", // --- 品名
   100,   // --- 原価
   200 ], // --- 売値
  ["きゅうり",
   50,
   100],
  ["大根",
   75,
   150,],
];
このような配列(二次元配列)があります。
文字列のトマトにアクセスしたいときは、(下記ではコピーか参照になると思います)
var str:String = yaoya[ 0 ][ 0 ]; ですよね。
次にトマトの全データ(品名、原価、売値)が処理上ほしくなりました。なので、
var tomatoData:Array = yaoya[ 0 ].slice( );
のようにしました。
コンパイルが通りデバッグでtomatoDataを見るときちんと
[0] = "トマト" [1] = 100 [2] = 200
と表示されます。
ですがコード補完機能(言葉あってるかな)では
yaoya[ 0 ].
まで入力するとObject型としてメンバを表示してきます。(つまりsliceは表示されない)
気になって調べると私の様なsliceの使い方は何処にも見当たりません。
ふっ不安です!!割と普通にやったつもりだったのですが…。
どなたか正しいのならその説明を!!
間違ってたまたま動いているのならそのご説明を!!
お願いします!!不安で胸が…。

51 :
>>49
var a:Number = ( parent as MovieClip ).a as Number;//こうだな
>>50
public static var yaoya:Array //中身変更したいならvarだろ

52 :
あー コードヒントでslice出ないって事か
継承したプロパティやメソッド全部表示となるととんでもない数になるからかな?
それとも型判定してなく書式だけで判断して最小限の該当プロパティやメソッドしか出さないのかも
どちらにしてもそんなもん気にすんな

53 :
>>49
ごめん これだけで取得出来る as演算子覚えとけ ついでにis演算子も
var a:Number = ( parent as MovieClip ).a;

54 :
MovieClip(parent).a 派とどっちが優勢なんだろ

55 :
>>53
無事解決しました
回答ありがとうございました。

56 :
>>54
nullチェックを考えると、
as演算子のほうが良いと思うが。
var mc:MovieClip = parent as MovieClip;
if( mc ) {
 num = mc.a
;
}

57 :
>>52 コードヒントですね失礼しました。
発言後気になりすぎて英語サイトを漁っていたら割と多くのサンプルソースが
見つかったのでとりあえず安心しています。ありがとうございました。


58 :
>>56 MovieClip(parent) でparentがnullだとぬるぽ例外になっちゃうってことか

59 :
var c_no=1 //初期数値
var mc1 = new test;
addChild(mc1);
mc1.x=206.60;
mc1.y=-211.05;
var delete="mc"+c_no;
trace(delete_test) //出力の結果は、mc1
stage.addEventListener(KeyboardEvent.KEY_DOWN,SELECT);
function SELECT(e:KeyboardEvent)
{
if(e.keyCode == 39)
{
        cursor.x=cursor.x+71.6;
removeChild(delete_test); //※
}
}
結果:エラー 強制型変換に失敗しました

こんな風にプログラムを組んでいるのですが、結果が強制型変換に失敗しましたとか出てしまいます。
※のところの removeChild(delete); を removeChild(mc1);  に変えたらエラーが無くなりました。
delete_testの中身もmc1なのになぜエラーが出てしまうのでしょうか?
また、どうしても変数を使ってremoveChildを行わなければなりません。 解決方法はありますでしょうか?

60 :
deleteは単なる文字列変数なので無理
removeChildの引数はDisplayObject型で指定する必要
var mc1 = new test;
mc1.name = "mc1";
addChild(mc1);
・・・
removeChild(getChildByName(delete));

あと、
var delete:String = "mc" + c_no.toString();
みたいにいちいち型を明確にしたほうが作法的に良いとおもいます

61 :
肝心なこと忘れた 変数名のmc1とストリング(文字列)の"mc1"はまったく意味が異なる

62 :
>>60
ありがとうございます。 出来ました。
つまり、型が違ったために、エラーが出てしまったという事ですね。
それともうひとつ質問なんですが
var p_icon;
var c_no=1;
var m_wp1 = new test;
m_wp1.name="m_wp1"
trace(c_no); //出力結果は 1
p_icon="m_wp"+c_no;
trace("iconナンバー="+p_icon); //出力結果は m_wp1
addChild(getChildByName(p_icon))
結果:パラメーター child は null 以外でなければなりません。

先程の質問と似たような所で詰まっているのですが
これも型が違うために起こってしまったエラーなんでしょうか?
指摘通り、型を明確にしても起こってしまいます。 こういったエラーを出さないようにするには
なにに気を付ければよいでしょうか?

63 :
getChildByNameはその名のとおり、すでにaddChildされている子を表示コンテナから名前(変数名とは別)で取得してくるものなので、
まだaddChildされてないものは当然取得できない。
文字列データで操作対象を指定したい場合はObject型で連想配列みたいにするとか、
律儀にswitch文で処理を分けるとかいろいろ。

64 :
あとjavascriptとかに慣れてるのかもしれないけど、
as3で変数宣言時に型指定しないのはRをはかずに外出すること並のR行為なので型指定はしたほうがいい。

65 :
>>63
度々回答ありがとうございます。
getChildByName は既に配置されたオブジェクトに対して使うものなんですね。
以上を踏まえて
addChild(getChildByName(p_icon)) の部分を  addChild(p_icon)
に変えてみましたが、結果は、 強制型変換に失敗しました。"m_wp1" を flash.display.DisplayObject に変換できません。
っと出てしまいました。
どうすれば直りますかね? おそらく、変数だったり、文字列だったりがぐちゃぐちゃになってると思うのですが…
R行為については… 次回から気をつけます! 今回のコードは既にジャングル状態でどこで変数宣言したかあやふやなので…

66 :
>>65
そういう場合は、
getDefinitionByName(p_icon) as Class
を使えばいいんじゃないかな?
>>64がいうように、型を曖昧にしているからエラーが起こるんだと思うよ
個々の変数の型が何かを把握してないから、無理矢理、文字列をMC等の別のクラスとして
扱わせようとしちゃうわけだしね

67 :
>>66回答ありがとうございます。
trace("iconナンバー="+p_icon); //出力結果は m_wp1
getDefinitionByName(p_icon) as Class;
addChild(p_icon);
と、やってみましたが、今度は 『変数 m_wp1 は定義されていません。』
と出てしまいました。
「getDefinitionByName 定義されていません」 っとGoogleで調べて、色々と試して見たのですが
どれもうまくいきませんでした…

68 :
>>67
文法とか流れを無視したってダメ
getDefinitionByName()した結果が大事なのに、その結果はどこからも参照されていません
それじゃ無意味でしょ
流れとしては、以下のようになります
var p_icon:String = "m_wp" + c_no;//文字列ができる
var classRef:Class = getDefinitionByName(p_icon) as Class;//文字列をクラス参照に
var myObj = new classRef();//そのクラスのインスタンスを生成
addChild(myObj);//生成されたインスタンスを表示リストに追加
常に、変数の中身がなんなのか、書いているASがそれぞれ何をしているのかを把握するのが大事

69 :
やさしいな

70 :
deleteは予約語だから使うなよ

71 :
そいうえばそうだった。 変数名deleteはシンタックスエラーになると思うんだけど何の環境でやってるんだろ。

72 :
>>68
ありがとうございます。 出来ました。
完成してみて分かったのですが、どうやら私はクラスに関しての知識が全然足りないようでした。
何度も回答してくださり、本当にありがとうございました。
>>70 >>71
var delete="mc"+c_no;  の部分ですが 正しくは var delete_test="mc"+c_no; でした。
混乱させてしまい申し訳ございません。

73 :
Vectorで固定長にして後述したいんだけど無理? 
aaa = new Vector.<int>[ -1, 270, 315, 0, 45, 90, 135, 180, 225 ];//エラー無しだが固定長にしたい
aaa = new Vector.<int>(9, true);//固定長にして
aaa = [ -1, 270, 315, 0, 45, 90, 135, 180, 225 ];//後述したいがエラー(Arrayならエラー無し)

74 :
あとでfixedをtrueにすればいいんじゃね?
var aaa:Vector.<int> = new <int>[ -1, 270, 315, 0, 45, 90, 135, 180, 225 ];
aaa.fixed = true;
aaa.push(0); //長さ変えようとするとエラー

75 :
おお そんな手がw ありがとー

76 :
addChildについて質問があります。
下記のようにスプライトに一枚のビットマップを登録します。(余計なところは省略)
var spr:Sprite = new Sprite( );
var bmp:Bitmap = new Bitmap( new TestBitmapData( ) ); // --- ライブラリに登録してあるビットマップとします
spr.addChild( bmp );
ビットマップがスプライトに登録され描画されます。
その後bmpの参照先を変更します。(現在のTestBitmapDataが不要になったため)
bmp = new Bitmap( new TestBitmapData2( ) );
私はこれでスプライトに描画されるビットマップがTestBitmapData2になることを期待したのですが、そうはなりませんでした。
TestBitmapDataが描画され続け、TestBitmapData2はaddChildで登録しないと描画されませんでした。
そこで考えました。addChildは何を受け取っているのかという事をです。
引数ではDisplayObjectインスタンスとなっているので、bmpの参照を保持していると思いました。
しかしbmpの参照先をTestBitmapData2で初期化されたBitmapに変更してもaddChildで渡したと思っていた参照の示す場所はTestBitmapData2に変更されません。
これはなぜですか?参照は外部から変更したらそれが適応されるのではないのでしょうか?
わかりづらい文章かもしれませんが、どなたかご教授願えないでしょうか。

77 :
bmp.bitmapData = new TestBitmapData2();
な。
元のコンテナとは別の新しい表示コンテナ突っ込んどいて、それ反映しろってのは無理な話だ。

78 :
spr.addChild(bmp)ではsprの参照するSprite実体の子としてbmpが参照するBitmapの実体が登録され、
Spriteの実体とBitmapの実体が新たに親子としてお互いを参照するようになる。
ここで、bmp = new Bitmap( new TestBitmapData2( ) ); すると、bmpはnewされた新しいBitmap実体への参照に上書きされるが、
Spriteと最初のBitmap実体の親子参照は影響を受けない。
みたいな感じ?

79 :
addChildがどうのこうのの話じゃなくて、
var a=[1,2,3];
var b=a;
a=[4,5,6];
としといて、
trace(b);
が1,2,3なのはなぜでしょうと言われても困るという話。

80 :
それ誤解産むと思うんだが。
a=[4,5,6];
を、
a.push(4);
とかに置き換えたときにどうなるかがわかってればいいけど。

81 :
蛇足ながら追加。質問者さんのやりたかったイメージに近いかなー?
画像切り替えとかはせっかくフラッシュなので別々のBitmapにしてフェードイン/フェードアウトくらいはしたいし、
あんまり使わないかも。
var spr:Sprite = new Sprite( );
addChild(spr)
var bmd1:BitmapData = new TestBitmapData1();
var bmd2:BitmapData = new TestBitmapData2();
var bmp:Bitmap = new Bitmap(bmd1);
spr.addChild( bmp );
var state:int = 1;
spr.addEventListener(MouseEvent.CLICK, function (event:MouseEvent):void {
if (state === 1) {
state = 2;
bmp.bitmapData = bmd2;
} else if (state === 2) {
state = 1;
bmp.bitmapData = bmd1;
} else {
trace("オイ!肉だ肉!!肉もってこい!!ψ(`∇´)ψ");
}

});

82 :
多数の返答ありがとうございます。
>>77 しっくりきました(っといいますか横っ面引っ叩かれて目が覚めました)。ありがとうございます。
この質問は私が自分ルール的な勝手な思い込みが原因でした。
参照の概要は色々と読んだつもりだったのですが、
addChildをした時はなぜか「多重間接参照」が渡されると思い込んでいました。(Cからの流れ者です)
もう一度参照について勉強していきます。
いやはやお恥ずかしい限りです。皆様どうもありがとうございました。
    (⌒`:''"⌒)
  ε=) : : . ' :.(=3
    (、_,;メ-、、_.) 

83 :
Cではポインタを間違えるとパソコンが爆発すると思っている()

84 :
>「多重間接参照」が渡されると思い込んでいました。(Cからの流れ者です)
不可能ではないが、Cでもありえんだろその仕様は。

85 :
ポインタのアドレス渡しだったらそうなるだろ。

86 :
こんにちは。レスどうもです。
>>84
確かにそうですよね。ダブルポインタを渡すってまぁあまりないですよね。
ただ自分では結構作っちゃうんですよねそういう関数wそこで勝手に思い込んでしまいました。
またなぜ勘違いしていたのかの原因で一番大きいのは、
私の中での参照の認識って型としてメモリにとられると思っていたことなんですね。
なので参照の参照が存在するのかと思ってたわけです。
ですが参照は基本的に只の別名として処理される(ASではどうやって実現しているのかわかりませんが)
という事らしいので多重間接参照はできないんじゃないですかね。多分ですが。
う〜ん教科書を最後まで読むのいいですね。(眠くなりますが)

87 :
ステージに最初から配置したMCにアクセスする時にこんな感じで…
var tg_body_mc:MovieClip = this.body_mc;
var tg_arm_mc:MovieClip = tg_body_mc.arm_mc;
var tg_head_mc:MovieClip = tg_body_mc.head_mc;
var tg_mouth_mc:MovieClip = tg_head_mc.mouth_mc;
tg_body_mc.gotoAndPlay(10 );//ポインタ代わりのターゲット変数にアクセス
tg_mouth_mc.gotoAndStop( 2 );
多重間接参照ってこういう事じゃない?w

88 :
これはいい多重関節w

89 :
http://www.artful.jp/blog/archives/2006/12/flashphp_1.html
上記のHPみたいにFlash→php→Flashでデータをやり取りする方法がわかるのですが、
phpの値をflash側に渡してHTML上で再生させたいのですが、どうやって調べればいいのでしょうか?

90 :
windows FlashCS5 です
関数から引数を渡して、テキストボックスを生成するところで詰まってます。
ReverName(2,100,100);
function ReverName(Nu:String,Xnum:Number,Ynum:Number) {
var RNa:String = "RName" + "Nu";
var RNa:TextField = new TextField();
RNa.htmlText = "Point";
addChild(RNa);
}
テキストボックスを生成する際の名前も引数で設定したいと思っています。
よろしくお願いいたします。

91 :
> var RNa:String = "RName" + "Nu";
> var RNa:TextField = new TextField();
変数名が同じなんだけど?

92 :
すいません。試行錯誤してる最中のコードとコピー間違えてました
var RNa:TextField = new TextField();
変数のRnaに後に番号を付けていきたいのですが、引数から
変数名に引数の数字を追加するところでうまくいってないようです。

93 :
じゃあそこ書けよ

94 :
失礼しました。
Aaa(1);
function Aaa(Nu:Number):void {
var RNa:TextField = new TextField();
addChild(RNa);
}
変数RNaの後に引数[1]を結合して、変数RNa1にして
テキストフィールドを生成したいのです。

95 :
やりたい事がやっとわかったというw
連想配列で管理した方が楽で良いよ。
外側(グローバル)で
public var txtFldList:Object = new Object();
を宣言して、
function ReverName(Nu:String,Xnum:Number,Ynum:Number) {
 var RNa:TextField = new TextField();
 RNa.htmlText = "Point";
 var key:String = "RName" + Nu;
 txtFldList[key] = RNa;
 addChild(RNa);
 ...
}
テキストフィールドを名前で取り出したいときは、
txtFldLisk[名前];
で取り出せる。
こういうこと?

96 :
CS5 AS3.0で質問です
組織図を作っていて
ステージ上に配置しているボタンをクリックすると
ライブラリにある、「A」というムービークリップがaddChildして
「A」のムービークリップの中にもボタンがあり
「A」内のボタンをクリックで「B」というムービークリップがaddChildして
「B」の中にもボタンがあり、それをクリックで「C」というムービークリップをaddChildしたいのですが
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
と出てしまいます
どのような原因が考えれるでしょうか、お願いします。

97 :
>>95
無事解決できました!!!!
今はどうしてちゃんと表示されるのかわかりませんが
これからわかるように勉強します!!
ありがとうございました 

98 :
>>96
どの時点で出るの?
エスパー募集するしかないなw

99 :
>>96
エラーメッセージが言う通りの状況なんでしょう
どこかで、まだ存在していないオブジェクトを参照しようとしている
例としては、MC「B」が存在する前に、「B」を参照しようとしてるとか
そんな感じ
でも、その情報だけじゃ第三者にはそれ以上何もわからない
trace()するなりして、どの時点でどっからエラーが出てるかを確定すべし

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
一日一回はタイピング測定Part15 (848)
FLASH脱出ゲーム作ろう (468)
【チキチキFLAレース】夢の終わりに【初心者歓迎FLA大会】 (592)
僕を一流職人に育てるスレ (735)
黒夢 sads 清春系のフラッシュ (590)
Pokemon TD 総合スレ (569)
--log9.info------------------
【コテ雑馴合】クサガメ大好き26匹目【名無ヘタレ】 (448)
【プリプリ】トゲオアガマ【カワユイ】 (873)
レプティリカスを語るスレ4 (490)
★★★ 一度飼ってみたい動物 ★★★ (534)
九州のペット事情2 (616)
【カエル】虫食いペット総合スレ【ヤモリ】 (493)
カメ好きよ、ここに集え (282)
オオアタマガメ (387)
【水草器具】チャームcharm【通販】part153 (368)
やっぱレッドビーシュリンプでしょ!【68匹目】 (793)
▲△ポリプテルス総合スレ 34鰭▲△ (681)
【ステマ注意】LED照明を語るスレ10【蛍光灯房厨お断り】 (358)
【 (V)o\o(V) 】 ザリガニ飼育について語るスレ22 (252)
インペリアルゼブラプレコを語るスレ 5 (880)
あああ アクアリウム機器自作スレ 22作目 あああ (730)
ミジンコをザクザク殖やそう@10匹目 (444)
--log55.com------------------
【AdultKids】伊藤銀次【BabyBlue】
hide memorial summitに行かない真のhideファンスレ
【らぴゅ〜た】◇Laputa◆【vol3まん】
@@ JANIS JOPLIN @@
【CiA】クラッシュインアントワープ・3【Antwarp】
ハイスタはもう伝説だろ??
☆☆甲本☆コーツについて語ろう!☆ヒロト☆☆
こんなPATAさんはギターを弾かないで下さい!