ActionScript 誰かが物凄い勢いで解答するスレ30
>>948 for(var j:int; j < 7; j++)
↓初期化する
for(var j:int = 0; j < 7; j++)
950 :
Now_loading...774KB:2012/10/01(月) 03:11:56.54 ID:yWCEu7hI
>>943 BitmapDataをdisposeするとか論外。
バッファを開放せずにfillRectで塗りつぶすなどして再利用しないと。
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);
}
952 :
Now_loading...774KB:2012/10/04(木) 15:38:29.18 ID:BuhP21SN
as3.0 CS6で製作しておりますが、質問させてください。
クラスで動的に生成したmcをremoveChildしたい場合は
変数をremoveChildする、というような形になるのでしょうか・・?
>>953 そ・・・そうですよね。。。?そうだと思っていたのですが。。
タイムライン上に
var add_hoge:Inu=new Inu(hoge);
で、タイムラインに静的に配置したMC(hoge)の中にカスタムクラスで生成した
mcをaddChildしたんです。
それをタイムライン上のスクリプトでremoveChild(add_hoge)すると
InuはDisplayObjectじゃないからダメよ、的なエラーが出るのです。。
なんでなんでしょうか??!!
ご教示いただけないでしょうか。。
removeChild(add_hoge as DisplayObject) でやってみたらどうなる?
>>955 指定したDisplayObjectは呼び出し元の〜・・となりました。。
位置が違うのでしょうか・・・?
配列に放り込んだらいいのかな・・・・と思って
var add_hogeを配列に変えて
add_hoge[0]=new Inu(hoge);
にしてみたのですが、それでも
removeChild(add_hoge[0])
すると、指定した DisplayObject は呼び出し元の子でなければなりません。
と言われております。。
場所がどこだかまるで見当がつかず困っております。。
>>957 まず、Inuは、DisplayObjectを継承しているの?
MovieClipかSpriteか?
で、ちゃんとタイムラインにaddChild(add_hoge);
しているの?
addChildしてないとremoveChildできないんで
>>958 ??ちょっと気になったのですが、クラスからaddChildするのと
タイムラインからaddChildするのって違いがあるんですか?!もしかして。。
クラスでaddChildしたものをタイムラインからremoveChild出来ない・・・とか・・?
>クラスでaddChildしたものをタイムラインからremoveChild出来ない・・・とか・・?
クラスの方でremoveChildさせるpublicメソッド定義しときゃいいんだお
タイムラインからnewしたんなら そのインスタンスから操作できるべ
どっかのサイトでOOPの基礎的なもん勉強しるんだ C++でもJavaでも内容は似てる
>>959 とにかく、インスタンス化したInuクラス、add_hogeってやつは、
addChild(add_hogeっ)してるんであれば、removeChilc(add_hoge)
できます。
FlashProfessionalでは、addChildの記述なしでaddChildできるんで
そこんとこが分かってないのかと
ただ、newしてるんでこの場合は、addChildしないと
いけない。ここはOKですか?
>>960 すみません。。ちょっと興味本位でクラスでaddChildしたものを
タイムラインの方でremoveChild出来たら便利だなぁ、と漠然と思って
作り始めたものでして。。。
>>963 試しに、
add_hoge.removeChild(add_hoge.getChildAt(0));
これで消せるのでは?
>>964 指定したインデックスが境界外です。
とのお言葉が・・・
やっぱりクラス内にメソッド作ってそれで消す方がいいのでしょうか・・。
本などを購入していたのですが、addChild、removeChildに関しては
どの本も両方ともクラスの中でやってるか、タイムライン内でやっていたので
クラスでaddChildしたものをタイムラインでremoveChildするには
どうすればいいんだろう。。と思ってやってみた次第なのですが
まさかこんなに分からないとは・・・・・・
>>965 ちょっとまって?やっぱりaddChildやってない気がする....
0が境界外ってことは、childがないってことだよ。
つまり、addChildしてないってことになる。
クラスに渡したhogeってやつもaddChildしてないのでは?
>>966 addChildしてる場所が違う、ってことも考えられますか?
クラスに渡す際にaddChildする場所を渡しているので
勝手に自分でhogeの中の子になる、と思い込んでいるのですが・・
>>967 え?Inuクラスの中にhogeをaddChildするんじゃないの?
hogeの親は、なんなんですか?
>>968 最初から配置しておりますのでhogeの親は・・stage?になるのだと思うのですが・・・
hogeをタイムライン上からremoveChildすると中身も全部消えるので
hoge内にあるかと思うのですが、add_hogeをremoveChildすると
「元の子じゃなきゃだめよ〜」と言われます。。
でも、すみません。。
ギブアップです。。
自分でもいろいろとやってみたのですが「どうしても分からない」から
「何がどうなってんのかも分からない感じ」になってきました。。
素直にクラス内にメソッド作ってそっちで消そうかと思います。。。
なんで出来ないのかがどうしても気になるのでまたやってみます。。
拙い説明に対していろいろとご指南していただきまして、本当に
ありがとうございました。
>>970 ああ!すみません!!
最初はソコとこっちとどっちか迷ったのですが
actionscriptだし。。コッチか・・・・と思いまして・・・
マルチするのもアレだし・・・と思い、コッチでやってしまいました。。
今度は超基本的な方で伺います。。
>>970 どうしても悔しいからもう一度思いついたことをやってみたら出来ました!!
hogeの中にもう一つpopoというMCを作って
その中に生成するようにしてから
hoge.popo,removeChildAt(1);
で消えました!!
indexの0はpopoの判別用に背景差してたので1にしてやりましたが。。
何故出来たのかはイマイチ、ピンと来てないのですが
ぼんやりと把握できました。。
結果から行くとちゃんと伝え切れてない自分のせいだと思われます。。
長々と書いてるのにその都度アドバイスいただきありがとうございました!
すっきりして寝れます!
>>972 結局、どのインスタンスにaddChildしたかわからなかった、って事だろ。
>InuはDisplayObjectじゃないからダメよ、的なエラーが出るのです。。
この時点でInuはDisplayObject継承してなかっただろ
してたら指定したDisplayObjectは呼び出し元の〜が出るだろ
975 :
Now_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);
}
以前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("送った");
};
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("もらった");
}
一応”もらった”が表示はされてるのでデータ自体は送られていると思うのですが・・・
getPixelとかでほんとにデータが入ってるか見てみるとか
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が機能しなくなりました。
BitmapData型の変数にBitmapをつっこまないでw
getPixelはBitmapDataクラスのメソッドだからarrから呼び出す
arr.getPixel(0,0)の値が取れないなら実際はデータ空の可能性があるんじゃないかと
っていうか左上はgetPixel(1, 1)っぽい
>>980 ありがとうございます。
arrで呼び出したらtraceで色々文句言われたので直してみます。
左上はgetPixel(0, 0)だろ?
>>980よ 980ゲットしたから次スレよろっす
984 :
980:2012/10/07(日) 12:06:04.45 ID:6iaqamAF
>>1の「ActionScript ライブラリ総合」の後継スレってどこだろ 外してもいいかな?
985 :
980:2012/10/08(月) 09:51:37.37 ID:Dp/pYWUS
スレ立て乙乙!
getPixelの人は解決したのかな?
おれもちょうど今ビットマップ関係の事をやってて興味があるw
こんにちは。質問させていただきます。
先ほど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が必要になってしまいます。
またブレークポイントの表示場所と被っていて目障りです。
どうにかしたいのですが、どのような対処をしたらいいのでしょうか?
swcも書き出してプロジェクトのライブラリパスに追加すればいけそうな気がするかも
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 のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
nullオブジェクトに云々という割にはtraceすると[object bitmap]とか吐き出します
>>989 うわぁ綺麗に消えてくれました。
警告を無視して進めていたので一気に消えて気分爽快です。
ありがとうございます。
次の人の為に私がやった事を書いておきます。
・FlashCS5.5のパブリッシュ設定でSWCにチェックを入れパブリッシュ
・SWCが同じフォルダ内に生成されているのをチェック
・FlashBuilderのメニュープロジェクトのプロパティを開く
・ActionScriptビルドパスを選択後、SWCの追加をクリック
・先ほど生成されたSWCを選択してOKボタン
・FlashBuilderからパブリッシュ
・気分爽快で感謝感激そしてSWCって何?
これで気分晴々進められます。
本当にありがとうございました。
>>993 どうもです。スウィックっていうのか・・・なんかダサカッコ悪いwww
>>990 コンポーネントリファレンスガイドみたら、原因かはわからないけど
「送信された直列化メッセージが大きすぎる場合 (40 K 以上)」の場合エラーになる的なことが書いてあった。
あとError #2095 localconnectionでググッたら外人がしらべてくれたみたいで、
basic types (Number, String, Array, XML etc 以外はObject型のインスタンスとして扱われて、
もとの型にはキャストできない、しかしそのプロパティには依然としてアクセスできる・・・ みたいなことを言ってる
試してないけどシンプルにBitmapData型の引数で受け取るのは難しそうな気がするし、なおかつ40k以下でければならないかもしれない
気分が良いわろた
>>994 どうやら不可能みたいですね。ありがとうございます。
エンコードしてストリングとして送るとかはありそうだけど、結局サイズ制限はあるし、画像生成のスクリプトのパラメータだけとか
MCのフレーム位置だけとかを送ったりするのが本来っぽい気はする。MCとかの共通データはLoaderで持ってくればダブらないし・・
>>994 40Kb以下ってのは驚いたなw ブラクラやスパム的な誤作動対策なんだろか