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

このエントリーをはてなブックマークに追加
949Now_loading...774KB:2012/09/30(日) 21:40:45.97 ID:cqxXwAdb
>>948

for(var j:int; j < 7; j++)
↓初期化する
for(var j:int = 0; j < 7; j++)
950Now_loading...774KB:2012/10/01(月) 03:11:56.54 ID:yWCEu7hI
>>943
BitmapDataをdisposeするとか論外。

バッファを開放せずにfillRectで塗りつぶすなどして再利用しないと。
951Now_loading...774KB:2012/10/04(木) 03:03:24.15 ID:E0PSbmyl
Flash AIR for androidにて
OSCでデータを送信する際にインスタンス名を送りたいと考えてるのですが
どのようにすればいいのでしょう・・・
必要そうなところだけ抜粋します。
受信側では" "で囲っている / instance.name が現在表示されるようにしています。
instance.nameのところになんとか代入?とかできないでしょうか
基礎からよくわかっていない状態ですがよろしくお願いします・・・

ball_pink.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);
ball_blue.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);
ball_green.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);
ball_yellow.addEventListener(TouchEvent.TOUCH_TAP, fl_TapHandler);

var myMsg:OSCMessage = new OSCMessage();
myMsg.address = "/";
myMsg.addArgument("s", "instance.name");

function fl_TapHandler(event:TouchEvent):void {
oscManager.sendOSCPacket(myMsg);
}
952Now_loading...774KB:2012/10/04(木) 15:38:29.18 ID:BuhP21SN
as3.0 CS6で製作しておりますが、質問させてください。

クラスで動的に生成したmcをremoveChildしたい場合は
変数をremoveChildする、というような形になるのでしょうか・・?
953Now_loading...774KB:2012/10/04(木) 17:58:46.91 ID:k0Q6g7ht
>>952
そうですよ。
954Now_loading...774KB:2012/10/04(木) 18:13:37.98 ID:BuhP21SN
>>953

そ・・・そうですよね。。。?そうだと思っていたのですが。。

タイムライン上に

var add_hoge:Inu=new Inu(hoge);

で、タイムラインに静的に配置したMC(hoge)の中にカスタムクラスで生成した
mcをaddChildしたんです。

それをタイムライン上のスクリプトでremoveChild(add_hoge)すると
InuはDisplayObjectじゃないからダメよ、的なエラーが出るのです。。

なんでなんでしょうか??!!
ご教示いただけないでしょうか。。
955Now_loading...774KB:2012/10/04(木) 18:22:16.54 ID:/zIQ0PEC
removeChild(add_hoge as DisplayObject) でやってみたらどうなる?
956Now_loading...774KB:2012/10/04(木) 18:27:23.18 ID:BuhP21SN
>>955

指定したDisplayObjectは呼び出し元の〜・・となりました。。
位置が違うのでしょうか・・・?
957Now_loading...774KB:2012/10/04(木) 18:35:03.74 ID:BuhP21SN
配列に放り込んだらいいのかな・・・・と思って

var add_hogeを配列に変えて

add_hoge[0]=new Inu(hoge);

にしてみたのですが、それでも

removeChild(add_hoge[0])

すると、指定した DisplayObject は呼び出し元の子でなければなりません。

と言われております。。

場所がどこだかまるで見当がつかず困っております。。
958Now_loading...774KB:2012/10/04(木) 18:39:59.08 ID:k0Q6g7ht
>>957
まず、Inuは、DisplayObjectを継承しているの?
MovieClipかSpriteか?
で、ちゃんとタイムラインにaddChild(add_hoge);
しているの?
addChildしてないとremoveChildできないんで
959Now_loading...774KB:2012/10/04(木) 19:02:51.44 ID:BuhP21SN
>>958

??ちょっと気になったのですが、クラスからaddChildするのと
タイムラインからaddChildするのって違いがあるんですか?!もしかして。。

クラスでaddChildしたものをタイムラインからremoveChild出来ない・・・とか・・?
960Now_loading...774KB:2012/10/04(木) 19:11:18.15 ID:CO7XW/L4
>クラスでaddChildしたものをタイムラインからremoveChild出来ない・・・とか・・?
クラスの方でremoveChildさせるpublicメソッド定義しときゃいいんだお
タイムラインからnewしたんなら そのインスタンスから操作できるべ

どっかのサイトでOOPの基礎的なもん勉強しるんだ C++でもJavaでも内容は似てる
961Now_loading...774KB:2012/10/04(木) 19:11:58.61 ID:k0Q6g7ht
>>959
とにかく、インスタンス化したInuクラス、add_hogeってやつは、
addChild(add_hogeっ)してるんであれば、removeChilc(add_hoge)
できます。

FlashProfessionalでは、addChildの記述なしでaddChildできるんで
そこんとこが分かってないのかと
ただ、newしてるんでこの場合は、addChildしないと
いけない。ここはOKですか?
962Now_loading...774KB:2012/10/04(木) 19:37:26.34 ID:BuhP21SN
>>961

そこはOKです。
963Now_loading...774KB:2012/10/04(木) 19:40:47.10 ID:BuhP21SN
>>960

すみません。。ちょっと興味本位でクラスでaddChildしたものを
タイムラインの方でremoveChild出来たら便利だなぁ、と漠然と思って
作り始めたものでして。。。
964Now_loading...774KB:2012/10/04(木) 19:48:34.95 ID:k0Q6g7ht
>>963
試しに、
add_hoge.removeChild(add_hoge.getChildAt(0));
これで消せるのでは?
965Now_loading...774KB:2012/10/04(木) 19:56:58.96 ID:BuhP21SN
>>964

指定したインデックスが境界外です。

とのお言葉が・・・

やっぱりクラス内にメソッド作ってそれで消す方がいいのでしょうか・・。
本などを購入していたのですが、addChild、removeChildに関しては
どの本も両方ともクラスの中でやってるか、タイムライン内でやっていたので
クラスでaddChildしたものをタイムラインでremoveChildするには
どうすればいいんだろう。。と思ってやってみた次第なのですが
まさかこんなに分からないとは・・・・・・
966Now_loading...774KB:2012/10/04(木) 20:06:25.30 ID:k0Q6g7ht
>>965
ちょっとまって?やっぱりaddChildやってない気がする....
0が境界外ってことは、childがないってことだよ。
つまり、addChildしてないってことになる。
クラスに渡したhogeってやつもaddChildしてないのでは?
967Now_loading...774KB:2012/10/04(木) 20:28:12.56 ID:BuhP21SN
>>966

addChildしてる場所が違う、ってことも考えられますか?
クラスに渡す際にaddChildする場所を渡しているので
勝手に自分でhogeの中の子になる、と思い込んでいるのですが・・
968Now_loading...774KB:2012/10/04(木) 20:34:20.58 ID:k0Q6g7ht
>>967
え?Inuクラスの中にhogeをaddChildするんじゃないの?
hogeの親は、なんなんですか?
969Now_loading...774KB:2012/10/04(木) 20:58:37.01 ID:BuhP21SN
>>968

最初から配置しておりますのでhogeの親は・・stage?になるのだと思うのですが・・・

hogeをタイムライン上からremoveChildすると中身も全部消えるので
hoge内にあるかと思うのですが、add_hogeをremoveChildすると
「元の子じゃなきゃだめよ〜」と言われます。。
でも、すみません。。
ギブアップです。。
自分でもいろいろとやってみたのですが「どうしても分からない」から
「何がどうなってんのかも分からない感じ」になってきました。。
素直にクラス内にメソッド作ってそっちで消そうかと思います。。。

なんで出来ないのかがどうしても気になるのでまたやってみます。。

拙い説明に対していろいろとご指南していただきまして、本当に
ありがとうございました。
970Now_loading...774KB:2012/10/04(木) 21:05:44.96 ID:k0Q6g7ht
>>969
Flashの超基本的な質問はここでしろ! part42
http://hibari.2ch.net/test/read.cgi/swf/1305783143/
今度は、ここで質問したほうがいいよ。
それと、
分からないとこは、メモしていったほうがいい。
でないとわからないとこが分からなくなるからね
971Now_loading...774KB:2012/10/04(木) 21:08:44.82 ID:BuhP21SN
>>970

ああ!すみません!!
最初はソコとこっちとどっちか迷ったのですが
actionscriptだし。。コッチか・・・・と思いまして・・・

マルチするのもアレだし・・・と思い、コッチでやってしまいました。。
今度は超基本的な方で伺います。。
972Now_loading...774KB:2012/10/04(木) 21:27:40.17 ID:BuhP21SN
>>970

どうしても悔しいからもう一度思いついたことをやってみたら出来ました!!
hogeの中にもう一つpopoというMCを作って
その中に生成するようにしてから
hoge.popo,removeChildAt(1);
で消えました!!
indexの0はpopoの判別用に背景差してたので1にしてやりましたが。。

何故出来たのかはイマイチ、ピンと来てないのですが
ぼんやりと把握できました。。

結果から行くとちゃんと伝え切れてない自分のせいだと思われます。。
長々と書いてるのにその都度アドバイスいただきありがとうございました!
すっきりして寝れます!
973Now_loading...774KB:2012/10/04(木) 21:50:18.91 ID:/zIQ0PEC
>>972
結局、どのインスタンスにaddChildしたかわからなかった、って事だろ。
974Now_loading...774KB:2012/10/04(木) 22:12:45.43 ID:AjSMflXL
>InuはDisplayObjectじゃないからダメよ、的なエラーが出るのです。。

この時点でInuはDisplayObject継承してなかっただろ
してたら指定したDisplayObjectは呼び出し元の〜が出るだろ
975Now_loading...774KB:2012/10/05(金) 21:54:35.93 ID:xKHdjDfv
ココ.addChild()
ココ.removeChild()

の指定を省略したから一致しなかったんだろ。
元のソースで add_hoge.parent をデバッガで見てみろ。


後、リムーブはadd_hogeの参照だけでできる。

if(add_hoge.parent){
add_hoge.parent.removeChild(add_hoge);
}
976Now_loading...774KB:2012/10/06(土) 23:20:03.38 ID:5Zpss8k4
以前as2.0→as3.0へLocalConnectionでBitmapDataを飛ばす方法を聞いた物です。
以下のコードを試しましたが、BitmapData自体は受け取ってるようですが
3.0側での描画が上手くできいません。どうすればいいのでしょうか?

2.0側(import等は省略)
// BitmapData オブジェクトを作成する
var bmp_data:BitmapData = new BitmapData(300, 200, true, 0xFFFFFFFF);

var m:Matrix = new flash.geom.Matrix();
var color:ColorTransform = new flash.geom.ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);
var rect:Rectangle = new flash.geom.Rectangle(0, 0, 300, 200);

// _root のグラフィックをキャプチャする
bmp_data.draw(_root,m,color,"normal",rect,true);
_root.attachBitmap(bmp_data,0);
trace(typeof (bmp_data));
onMouseDown = function ()
{
connect = new LocalConnection();
connect.send("send","getCombo",_root.bmp_data);
trace("送った");
};
977Now_loading...774KB:2012/10/06(土) 23:22:00.63 ID:5Zpss8k4
var connect2:LocalConnection = new LocalConnection();
connect2.client = this;
connect2.connect("send");
function getCombo(arr:BitmapData):void
{
trace("AS3: "+typeof(arr));
var bt : Bitmap = new Bitmap(arr);
stage.addChild(bt);
trace("もらった");
}

一応”もらった”が表示はされてるのでデータ自体は送られていると思うのですが・・・
978Now_loading...774KB:2012/10/07(日) 00:26:33.49 ID:6iaqamAF
getPixelとかでほんとにデータが入ってるか見てみるとか
979Now_loading...774KB:2012/10/07(日) 00:37:03.57 ID:7WM84oJe
var bt:Bitmapdata = new Bitmap(arr);
trace(bt.getPixel(0,0));
としたところ、
シーン 1, レイヤー 'レイヤー 1', フレーム 1、行 38 1061: 未定義である可能性のあるメソッド getPixel を、静的型 flash.display:Bitmap の参照を使用して呼び出しました。

だそうです。
arr.getPixel(0,0)だとそもそもlocalconnectionが機能しなくなりました。
980Now_loading...774KB:2012/10/07(日) 00:44:48.04 ID:6iaqamAF
BitmapData型の変数にBitmapをつっこまないでw

getPixelはBitmapDataクラスのメソッドだからarrから呼び出す
arr.getPixel(0,0)の値が取れないなら実際はデータ空の可能性があるんじゃないかと
981Now_loading...774KB:2012/10/07(日) 00:51:12.26 ID:6iaqamAF
っていうか左上はgetPixel(1, 1)っぽい
982Now_loading...774KB:2012/10/07(日) 00:52:59.03 ID:7WM84oJe
>>980
ありがとうございます。
arrで呼び出したらtraceで色々文句言われたので直してみます。
983Now_loading...774KB:2012/10/07(日) 10:03:10.46 ID:toLLVsEm
左上はgetPixel(0, 0)だろ?
>>980よ 980ゲットしたから次スレよろっす
984980:2012/10/07(日) 12:06:04.45 ID:6iaqamAF
>>1の「ActionScript ライブラリ総合」の後継スレってどこだろ 外してもいいかな?
985980:2012/10/08(月) 09:51:37.37 ID:Dp/pYWUS
986Now_loading...774KB:2012/10/08(月) 10:04:53.07 ID:235zk/8x
スレ立て乙乙!

getPixelの人は解決したのかな?
おれもちょうど今ビットマップ関係の事をやってて興味があるw
987Now_loading...774KB:2012/10/09(火) 00:03:37.60 ID:unpUebDZ
>>986
難航してます
詰んだらまた来ます
988Now_loading...774KB:2012/10/09(火) 21:54:52.40 ID:3HMsYmP+
こんにちは。質問させていただきます。

先ほどFlashCS5.5+FlashBuilder4.5.1で制作を始めました。
前にFlashCS5+FlashBuilder4で少しだけやったことがあったので、とりあえずFlashCS5.5のライブラリに一つ画像(png)をD&Dで追加し、
プロパティからActionScript用へ書き出しにチェックを付けました。(基本クラスはBitmapData)
特に機能を追加する必要がなかったのでokで終了。
その際、いつもの警告が出ました。
「このクラスの定義がクラスパス内に見つからなかったため、定義は書き出し時にSWF内に自動生成されます。」
いつも通り無視してBuilderに戻りインスタンス化しようとしました。
こんな感じです・var bmp:Bitmap=new Bitmap(new MyBitmap( 幅, 高さ ) );
そしてctrl+enterでムービープレビュー。一枚ビットマップが描画されました。
(addChild等の部分は省いています)

おぉこれでいけるかなと思った矢先、エラーではないのですがbuilderの
イメージをインスタンス化している行に警告がブレークポイント表示場所に?マークで表示されました。

型が見つからないか、コンパイル時定数ではありません:MyBitmap

マウスを合わすと上記のような警告が…。

確かに定義は埋め込み時に行われるからまだないとは思うのですが、
FlashCS5+FlashBuilder4の時にはこの警告は出なかったです。

一応MyBitmap.asを作れば警告は消えたのですが、
これでは画像分.asが必要になってしまいます。
またブレークポイントの表示場所と被っていて目障りです。

どうにかしたいのですが、どのような対処をしたらいいのでしょうか?
989Now_loading...774KB:2012/10/09(火) 22:22:54.44 ID:ncDfEkPf
swcも書き出してプロジェクトのライブラリパスに追加すればいけそうな気がするかも
990Now_loading...774KB:2012/10/09(火) 23:19:22.99 ID:unpUebDZ
getPixelのアレですが詰みました。2,0側は変更なしです。
3.0側
var connect2:LocalConnection = new LocalConnection();
connect2.client = this;
connect2.connect("send");
function getCombo(arr:BitmapData):void
{
trace("AS3: "+typeof(arr));
trace(arr.getPixel(1,1)); ←これコメントアウトすると一応受け取っている感じ
var bt : Bitmap = new Bitmap(arr);
addChild(bt);
trace(bt);
trace("もらった");
}
↓trace結果
Error #2044: ハンドルされていない AsyncErrorEvent : text=Error #2095: flash.net.LocalConnection はコールバック getCombo を呼び出すことができませんでした。
error=TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
991Now_loading...774KB:2012/10/09(火) 23:29:15.94 ID:unpUebDZ
nullオブジェクトに云々という割にはtraceすると[object bitmap]とか吐き出します
992Now_loading...774KB:2012/10/09(火) 23:41:18.36 ID:3HMsYmP+
>>989

うわぁ綺麗に消えてくれました。
警告を無視して進めていたので一気に消えて気分爽快です。
ありがとうございます。

次の人の為に私がやった事を書いておきます。

・FlashCS5.5のパブリッシュ設定でSWCにチェックを入れパブリッシュ
・SWCが同じフォルダ内に生成されているのをチェック
・FlashBuilderのメニュープロジェクトのプロパティを開く
・ActionScriptビルドパスを選択後、SWCの追加をクリック
・先ほど生成されたSWCを選択してOKボタン
・FlashBuilderからパブリッシュ
・気分爽快で感謝感激そしてSWCって何?

これで気分晴々進められます。
本当にありがとうございました。
993Now_loading...774KB:2012/10/10(水) 00:11:19.16 ID:an/1qAbu
>>989

さんの助言を元にSWCについて検索したので、
一応いろいろ解決ってことで追記しておきます。

・SWCはリソース付きライブラリのようなもの
・FlashCS5.5+FlashBuilder4.5.1じゃなくてFlashCS5.5でSWCを作ってFlashBuilder4.5.1で読み込めば連携しないのでいいので気分が良い(同時に立ち上げてなくていい)
・SWCはスウィックと読むこと

参考URL
ttp://www.adobe.com/jp/devnet/flash/articles/flashpro_and_flashbuilder.html

でした。

別々で作れるのを知ったのは個人的にものすごくプラスです。
既に作り直したいです。(笑)
すごく初歩的な事なのかもしれませんがすごくうれしいです。
ありがとうございました。またよろしくお願いします。
994Now_loading...774KB:2012/10/10(水) 00:34:21.29 ID:SfP60sMR
>>993 どうもです。スウィックっていうのか・・・なんかダサカッコ悪いwww

>>990 コンポーネントリファレンスガイドみたら、原因かはわからないけど
「送信された直列化メッセージが大きすぎる場合 (40 K 以上)」の場合エラーになる的なことが書いてあった。

あとError #2095 localconnectionでググッたら外人がしらべてくれたみたいで、
basic types (Number, String, Array, XML etc 以外はObject型のインスタンスとして扱われて、
もとの型にはキャストできない、しかしそのプロパティには依然としてアクセスできる・・・ みたいなことを言ってる

試してないけどシンプルにBitmapData型の引数で受け取るのは難しそうな気がするし、なおかつ40k以下でければならないかもしれない
995Now_loading...774KB:2012/10/10(水) 00:42:16.08 ID:UeYVAt61
気分が良いわろた
996Now_loading...774KB:2012/10/10(水) 02:06:42.93 ID:54XHRIK+
>>994
どうやら不可能みたいですね。ありがとうございます。
997Now_loading...774KB:2012/10/10(水) 02:18:15.27 ID:SfP60sMR
エンコードしてストリングとして送るとかはありそうだけど、結局サイズ制限はあるし、画像生成のスクリプトのパラメータだけとか
MCのフレーム位置だけとかを送ったりするのが本来っぽい気はする。MCとかの共通データはLoaderで持ってくればダブらないし・・
998Now_loading...774KB
>>994
40Kb以下ってのは驚いたなw ブラクラやスパム的な誤作動対策なんだろか