1read 100read
2011年11月2期FLASH13: ActionScript 誰かが物凄い勢いで解答するスレ29 (864) TOP カテ一覧 スレ一覧 2ch元 削除依頼

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


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

2 :
昨日の画像読み込みたがってた者です
var Name = "homhom_bot";
var loader = new MovieClipLoader();
var load_obj = new Object();
load_obj.onLoadError = function() {
msg = "エラー";
loader.unloadClip();
};
loader.addListener(load_obj);
msg_txt.onKeyDown = function() {
if (Key.getCode() == Key.ENTER) {
loader.loadClip("http://api.twitter.com/1/users/profile_image/"+Name+".json", _root.mc);
_root.mc._width = 48;
_root.mc._height = 48;
}
};
これで画像読み込みは大成功したのですが、一回でも実在しないアカウントを入力したり
スペルミス等をすると、それ以降画像が読み込まれなくなります。なんでですかー

3 :
挙動からして原因はloader.unloadClip();意外にあるまい
ローダーのコンプリートイベントとloadClipの直後にでもtraceいれてそこ通ってるか見てみては?

4 :
>>1おつ

5 :
AS3で、関数もコンストラクタの中身もない変数宣言だけの空のクラスを作って、
全てのクラスをそのクラスから派生させるってやり方はやめたほうがいいですか?
グローバル変数みたいな感じで、変数や他のクラスのインスタンスへのアクセスが
容易になるのでとても便利に思えるのですが・・・

6 :
>全てのクラスをそのクラスから派生させる
すいません。そのクラスから継承させるの間違いです

7 :
プリミティブ値だと書き換えできないから期待の動作はしないと思う
A→O
B→O
Oにprotected var num:int=0;
A.numとB.numは別物

8 :
>>3
load_obj.onLoadInit = function() で調べてみたら
一応読み込み完了でアクセスはできるらしい

9 :
>>8
ミスったあともinitイベントは拾えてるってこと?

10 :
だと思う
いまいちメソッドの使い方がわからん

11 :
もうflaあげちゃえよ…

12 :
http://www.dotup.org/uploda/www.dotup.org1749003.fla.html
あとFLASH上でパブリッシュすると外部ファイルが読み込めないのは何故だ

13 :
>>12
外部ファイルをホイホイ読めちゃうとセキュリティ的にヤバイって仕様

14 :
AS3の質問です。
swf内でマウスオーバーなどに効果音を使っています。
使っている効果音は1種類なのですが、
外部編集ソフトで音を調整

新しいmp3ファイルをライブラリに読み込み

りんゲージでクラス名を指定

スクリプトの方で生成するクラス名を書き換え

パブリッシュ
で、パブリッシュするたびに.swfファイルがどんどん大きくなっていってしまいます。
入れ替えた音源ファイルのサイズは変わっていないはずなのに、です。
ライブラリにあるものは使っていなくても全て.swfに突っ込まれるのでしょうか?

15 :
ライブラリから削除してみたらわかるだろう…

16 :
>>15
ありがとうございました。

17 :
例えばゲームのセーブ・ロードなどファイルを総合的に管理するクラス(FileManager)など、
プログラム内でインスタンスが一つだけ存在すればいいクラスを作った場合、
インスタンスを作る必要ってあるのですか?
例えば、上記のクラスの場合、クラス内の関数や変数を全てstaticで宣言して
クラス関数としてFileManager.saveData()などを呼び出せば、
インスタンスを作る必要がないと思うのですが。

18 :
一体誰にインスタンス化を要求されたんだ?
思い込み?

19 :
WEBに公開されてたAS3のゲームのサンプルを見たら描写のクラスやセーブロードのクラスなど、
複数のインスタンスが必要ないクラスでもインスタンス化してから関数を呼んでいたので
それが作法か正しいやり方なのかと疑問に思いました。

20 :
アイテムなんかのデータベースはどうやって取り扱ってるんだろうね

21 :
>>17
メモリ食うんじゃない?

22 :
flashlite1.1に最適なエディターってのがあったら教えて欲しいです
FlashDevelop使ってみたけど、あれLite1.1ってのないよね?

23 :
>>19
>複数のインスタンスが必要ないクラスでもインスタンス化してから関数を呼んでいたので
そのソースを見てないから断言はできんが、
インスタンス化する必要はないで良いと思う。
例えば、constとか。
MouseEvent.MOUSE_DOWNとかインスタンス化してるやつは居ないはず。

24 :
何で切れてんのw
ひとつしかないから全部静的でいいって人もいれば、
データ構造持つならシングルトンにするって人もいるんじゃないの?
好きにすればいい

25 :
そのへんOOP宗教戦争みたいなとこあるから、まあいろいろあるって事知っておけばいいよ。
絡まれるとうるさいから気を付けてねw

26 :
なるほど・・単純にこういうルールだっていうのはないんですね。ありがとうございます。

27 :
Javaならコンパイラがワーニング出すから
インスタンスからの呼び出しはしないほうが良いってわかるけどなぁ。

28 :
AS3で、表示リストの子に対してdispatchEventを使うとその親たちも同じイベントを受け取ることができますが
同じ階層にあるオブジェクトや親子関係にないものの場合はどうすれば同じイベントを受け取らせることができますか?
個別に参照してdispatchEventを使うのは効率が悪いので一度に全てのリスナーに受け取らせられると良いんですけど・・

29 :
無理でしょ
イベント投げられたら通知したいオブジェクト全部にイベント送りつけるっていうメソッドのあるオブジェクトを作ってそれに投げるか
共通のイベントレシーバ持たせてそれぞれそれを監視するか

30 :
マジもう・・・先にデザインと仕様をFIXしてくれよマジで。。。
後から思いつきでやっぱこうがいいとかどんどん変更指示だしてきて、
ソースがどんどん汚く、そして分かりにくくなる。
作り方もなんか複雑になってきてるし。。。
プログラマに投げるときは、もう微修正しか出来ないと思って投げて来いバカヤロー!!

31 :
ふむ

32 :
>>30
それだと楽だがつまんないものしかできなくなるんだぜ

33 :
超くだらない質問かもしれないから
申し訳なさでいっぱいなんだが、
あるMCを作って、this.onPressを書いた。、
ところでそのMCを構成する部品として存在する別の小さいMCにも
this.onPressを書いた。そして部品MCをクリックした場合と、
全体MCをクリックした場合は別のfunctionを割り当てたいのだが、
どうしたことか、部品MCをクリックしても全体MCをクリックした
ことにしかならん。
なんとか部品MCをクリックしたら、全体MCのほうは黙っていて
欲しいんだが…教えてくれ、いや教えてくださいお願いします。

34 :
>>33
AS2.0?
onイベントは排他的に受け取るから、その動作は仕様
MCのなかに、全体用のヒットエリアを作って、その上部に部品MCを配置するとか
クリックした位置によって、動作を変更するとかで対応する

35 :
>>34
そう、AS2でやってる。そういう仕様だったのか…orz
じゃあ、がんばって位置で区別がつくように作りなおしてみる。
早めに見切りがついてよかった。本当にありがとうございました。

36 :
>>32
いやぁそれは分かるんだけども、そういうレベルじゃないんだよ。
表現とかじゃなくて、根本から変えてくるんだよね。
しかもちょいちょいと。
そんなの最初にデザインカンプの時点でちゃんと見てれば分かる事じゃん、みたいな。
お前らちゃんと考えてたのかよ、と問い詰めたい。

37 :
tween系のライブラリで追従するような動きは表現できますでしょうか
終点を指定すればそこまで移動はできますが、終点が動くような場合それにあわせて追従するようにしたいです。
細かく時間分割してtweenするしかないのでしょうか?

38 :
>>29
教えてくださりありがとうございました。
その方法でやってみることにします。

39 :
ASのライブラリでtweensyみたいに炎とか雷みたいなエフェクトを簡単に作成できる
ライブラリってありますか?別に炎とか雷でなくてもいいのですが。

40 :
tween系ライブラリならいくつかあるけど
そこからエフェクトを簡単に作れるかどうかは知らん

41 :
言葉足らずですみません。探してるのはゲームで使えそうなエフェクトが簡単に作れたりかけられたりする
ライブラリで、tween系でなくてもかまいません。そういったライブラリがないなら
tweensyを使うしかないのですが・・・

42 :
AS3.0、FlashPlayer10で表示オブジェクトのzプロパティに値を代入すると
中のベクタ画像がラスタ画像のように表示されてしまうのはなぜですか?

43 :
●が並んだブロックが右から順次流れていく
フラッシュをCS4にて作成中です。
表示レイヤーには「block00」から「block27」まで24個のダイナミックテキスト
オブジェクトが配置してあります。00〜07,10〜17,20〜27と3列に並んでいます。
先にblockArray[set][x][y]にnセット分のブロックが格納されています。
for (k=0; k<20; k++) {
//表示を初期化
for (i=0; i<3; i++) {
for (j=0; j<8; j++) {
this["block"+i+j] = "";
}
}
for (i=0; i<3; i++) {
for (ay=0; ay<8; ay++) {
for (ax=0; ax<blockFace[k+i]; ax++) {
this["block"+i+ay] = this["block"+i+ay]+blockArray[k+i][ax][ay];
}
}
this["answer"+i] = blockPiece[k+i];
}
}
先に用意したブロックを最後に表示させるとき、
変数kで順送りするつもりなのですが、バラバラにしか表示されません。
右のブロックが左に流れるつもりで書いたのですが・・・。
どうしたらよいのでしょうか?

44 :
>>41
stardustがぴったりかと
>>43
まず
this["block"+i+j] = "";はblock00〜block27を指さない
何故なら例えばi=1,j=2の時this["block"+i+j]はblock3になる
this["block"+i+ay] = this["block"+i+ay]+blockArray[k+i][ax][ay];
block00〜block27がダイナミックテキストを指す変数ならこの足し算はおかしい。
なにをやりたいの?
あとは他の変数についてもくわしく

45 :
>>42
ためしに線だけ設定してSprite.graphicsにdrawCircle()してみた
zを設定すると拡大したら確かに荒れるね
ビットマップ化されてるっぽい
http://blog.livedoor.jp/denpika/archives/cat_10237.html
2009年02月12日
仕様なんじゃないかな

46 :
>>44
stardustいいですね、サンプルもたくさんあるし。使わせてもらいます。

47 :
外部エディタ使用している方とかフォント何使ってます?
見やすいのとかおすすめのあったらおしえてください。
いまFlashDevelopでデフォのcourier newです

48 :
>>44
ありがとうございます。
アクションがすべて実行されたあとに、ダイナミックテキストへ変数が反映される
ことを知らなかったので躓いていました。きっと見えない間に終わっていたのでしょうね(笑)。
>this["block"+i+j] = "";はblock00〜block27を指さない
>何故なら例えばi=1,j=2の時this["block"+i+j]はblock3になる
に関しては、左辺が文字型の為に+演算子が文字結合として働いて
block00〜27を指してくれます(検証済み)。
ランダムに●を並べたブロックを表示させて●の個数を答える
ゲーム(トレーニング?)を作ろうと思っています。
フレームで分けたほうがいいのか、検討中です。

49 :
>>48
失礼。確認したら大丈夫だった。逆に勘違いしてたぽい。
開始画面とゲーム画面とクリア画面はフレームに分けるとすごい楽だよね

50 :
>>47
Migu使ってる
検索すれば分かるが、MSが作ったプログラム用フォントみたいなのもあるみたい
フリーだし、紹介も結構されてるし、検索して試してみてはどうか

51 :
>>45
ありがとうございます。使用だったなら仕方ないですね。
ビットマップ化するならせめてジャギが出ないようにしてほしかったです・・。
続けてすみません、もう一つ気になったことがあったので質問させてください。
メインタイムラインに矩形を描いてから↓のコードを記述して、
その矩形をクリックしてもトレースが起こらないのはなぜですか?
root.addEventListener(MouseEvent.MOUSE_DOWN, Hoge);
function Hoge(e:Event):void{
 trace("clicked");
}

52 :
>>50
ありがとうございます。Miguとか色々試して見ます。

53 :
ちょっと試す前にお尋ねしたいのですが、例えば円や頂点の数の多いシェイプなど多用してすごい重い100フレームぐらいアニメするMCがあった時、
そのMCの全てのアニメフレームをビットマップデータに一時的に描画して、ビットマープデータとして連続してアニメ表示させるという方法は、
効果的だと思いますか?またそうすることはAS3で可能ですか?

54 :
>>53
可能だと思うけどとてつもなくメモリを消費するから現実的ではないかもね

55 :
>>51
タイムラインのgraphicsに書いたの?
graphicsがマウスイベント受け取らないからなんだろうけど、じゃあなんでSpriteに書いたらSpriteは受け取るの?ってことになるよねえ

56 :
AS2なんだけど、関数で引数を省略したときは1をデフォルトにしたいときはどうしたらいいですか
function f(x){
ここ何て書く
return x;
}
f(0); //0を返す
f(); //1を返す

57 :
>>55
いいえ、このコードはタイムラインに直接書きました。
addEventListenerをrootではなくstageに実行すると上手くいくのですが・・
理由がよくわかりません。

58 :
>>56
function f(x){
 if(x == undefined) x=1;
 return x;
}
引数が省略されている=未定義なのでこれでどうでしょうか?

59 :
>>57
いや、矩形をgraphicsに描いたのかってこと
rootでもthisでもだめだったけどstageでは受け取るんだよね

60 :
>>58 tx

61 :
変数に値変数のポインタを代入するのってできないんですか?
p=&i; みたいな

62 :
できないよ

63 :
i = {value: 1};
p = i;
回りくどいけど、値をObjectでくるんで参照型にするとか。

64 :
ローダで既にSWFがロードしてある際に、SWFのloadBytesを行った場合は、
必ず内容が表示されないタイミングがあるのでしょうか。
例えば、
1: 前もってSWFを別のURLLoaderでロードしておき、
  ボタンクリックでLoaderにURLLoaderで読んでいたSWFのデータをloadBytes。
2: ボタンクリックでURLLoaderにSWFをロード、Event.COMPLETEでSWFのデータをloadBytes。
1の場合、一瞬で画面が切り替わり、まずLoaderの中身がなくなることはありませんが、
2の場合、Loaderの中身切り替わりの際にコンマ何秒か表示が消え、ステージの背景が視認出来てしまいます。
どちらもloadByte時にデータは揃ってるし、Loaderにunloadなど何もしていません。
表示切り替わりに差があるのはどの辺の問題なのでしょうか。

65 :
>2: ボタンクリックでURLLoaderにSWFをロード、Event.COMPLETEでSWFのデータをloadBytes。
 ↓
2: ボタンクリックで、別のURLloaderでSWFロード開始、URLLoaderのEvent.COMPLETEを受け取ったら、
  実表示用のLoaderでURLLoader.dataのSWFをloadBytes。

66 :
flexのswfdump.exeで上手く逆アセンブルが出来ないときはどうすればいいですか?

67 :
具体的にどうなるの?

68 :
if (stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE, init);
ドキュメントクラスの最初に書いてあるこれってやっぱ必要?

69 :
上で質問した者で、超亀作業なんだが、
部品MCを入れ子にした全体MCを作って、onPressするとクリックする場所が部品MC上か
その周りの全体MCかで反応が分かれるコードを書いてみた。マウスの座標と部品MCで
hitTestを使ったらうまくいった。
いつもここでお世話になっているので、たまに誰かの役に立てばいいなと思ってUPする。
tarako・・・全体MC(のインスタンス名)
ebi・・・tarakoMC中の部品MC(のインスタンス名)
tarako.onPress = function (){
myX = _root._xmouse;
myY = _root._ymouse;
//部品MCでヒットテスト。外れたら全体MCで処理
result = tarako.ebi.hitTest(myX, myY, false);
if(result == true){
trace("ebi desu!");
}else{
trace("tarako desu!");
}
};

70 :
エビちゃんが二匹いたらどうするんだい?

71 :
>>70さま
エビが二匹の場合はエビのインスタンス名をそれぞれ変えて、if文に二匹目も
ORで入れればなんとかなるかと

72 :
>>34みたいにすればいいのさ

73 :
>>68
作成したswfが別のswfから呼ばれた時のことを考えるとあった方がいいんじゃないかな
メインswfのロードの仕様だっていつ変更されるかわからんし

74 :
>>70さま>>72さま
エビさんがたくさんいたらifの中のOR文をいっぱい書くのがめんどいので
配列とevalで作ってみた。一応エビ三つで試したからエビが100匹いても大丈夫。
ただし、ebi0,ebi1,ebi2...と全部同じ動作をする。各エビが違う動作をするとなると
また考えなきゃないが…コードは下に
nameArray = new array();
nameArray[0] = "ebi0";
nameArray[1] = "ebi1";
nameArray[2] = "ebi2";
tarako.onPress = function (){
myX = _root._xmouse;
myY = _root._ymouse;
for (i =0; i<3; i++){
result = _root.tarako.eval(nameArray[i]).hitTest(myX, myY, true);
if (result == true){
break;
}
}
if(result == true){
trace("ebi desu!");
}else{
trace("tarako desu!");
}
index++;
};

75 :
evalのとこは[]で十分じゃね?

76 :
環境) FlashProCS4,AS3,WinXP
FlashProのようなオーサリングソフトでのタイムライン動作をASで再現したいです。
今、試しにチャレンジしているのが、Sprite内のオブジェクトをドラッグ移動→停止(マウスUp)
する度に円形オブジェクトの位置が映画のフィルムのように記録されて行くものです。
つまりは、最初は
[ ● ] [   ] [   ] [   ] [   ] [   ] [   ] [   ] [   ] [   ]
ですが、コマが蓄積され
[ ● ] [ ● ] [ ● ] [ ● ] [ ● ] [ ● ] [ ● ] [ ● ] [ ● ]
となって、任意の位置(例えば3コマ目)から
         |→→
[ ● ] [ ● ] [ ● ] [ ● ] [ ● ] [ ● ] [ ● ] [ ● ] [ ● ]
のように再生したいです(mc.gotoAndPlay(3)みたいな感じ)
ttp://flash-scope.com/scene_change_with_function_call.htmlを見ると、
class Scene extends Sprite とあって、var scene:Scene = new Scene(引数);
とあるので、同じ様にsceneにSpriteを代入しようとしたが型の不一致エラーで駄目でした。
※参考サイトのSceneはSprite型なんですが・・・
サイトの方法には拘りませんが、ASで記録&再生したいです。どうすれば良いでしょうか?

77 :
オブジェクトの位置情報を配列に入れとけばいいんじゃない?

78 :
3Dオブジェクトだけどおなじようなことをやったことがある
>>77のように記録用のクラスextends Objectを作って座標と回転を記録してBetweenAS3で動かしたよ

79 :
操作自体(上だと、マウスの動き)か、操作の結果(スプライトの動き)を記録して、
再生させるしか無いんじゃないかなぁ

80 :
>>77-79
どうも。
う〜ん、スクリーンショットみたいな感じで(Sceneとして)記録してパラパラ漫画風に
再生したかったのですが・・・
やっぱ、パラメーターを元に再現するのが常道っぽいですね。
ここでの質問ではオブジェクトの位置のみですが、実際はコレ自体のグラデーションやら、
背景の色やら多くの情報があるので(それを元に再現するとなると大変なので)
要は楽したかったのです。

81 :
ならオブジェクトのクローン作って保存しとくとか

82 :
パラパラマンガだけでいいならBitmapData.draw()とかどうよ

83 :
以前も少し質問させてもらったんだけども、解決しなかったのでもう一度質問させてください。
AS3でURLLoaderを使って1MBくらいのデータをダウンロードしています。
で、ダウンロード中はFLASHの動作が重く、その他のムービークリップの動きが止まったり、
MOUSE_UPのイベントが全然発生しません。
たとえば、ダウンロード中にクリックを10回連打したら、
ダウンロード後にMOUSE_UPイベントが10回通知されるような動作になります。
addEventListenerではMOUSE_UPイベントの優先度を高く設定していますが、
やはりダウンロードのほうが優先されて処理されています。
これめっちゃ不便なのですが、なにかいい解決法はないでしょうか?

84 :
なんでビット演算の優先度低いの?
a*2+bの時に
(a<<1)+bってめんどくせーよ
直感的じゃないじゃん

85 :
ロード中はあまり他の処理をさせない方がいいんだって せいぜいアニメMCを流すくらいだ
フラグ設定してロード完了するまで他の処理(マウスイベント等)を止めた方が吉
>MOUSE_UPのイベントが全然発生しません。
しょうがないんだって

86 :
なんでビット演算なんか使うの?
直感的じゃないじゃん

87 :
>>85
なるほど・・・ありがとうございます。でもそれだとちょっと問題が起こるんです。
とあるボタンがあって、それを押すたびにランダムで画像を読み込んで表示させるのですが、
ユーザがそのボタンを連打した時の対処が上手くいかないんです。
フラグ設定してロード完了するまで他の処理を止める方法もやってみたのですが、
ロードが完了するまでMOUSE_UPイベントが処理されないので、
全く意味がないのです。
マウス連打

画像DL開始(ロード中フラグ立てる)

画像DL終了(ロード中フラグ折る)

2回目のMOUSE_UPイベントが処理される(ロード中フラグが立っていないので普通に画像DLを開始)

画像DL開始(ロード中フラグ立てる)

画像DL終了(ロード中フラグ折る)

3回目のMOUSE_UPイベントが処理される(ロード中フラグが立っていないので普通に画像DLを開始)

続く...
フラグが立っている間のイベントは無視するという狙いが完全にスベってます。
で、画像も結構重いので、しばらくの間何も操作が出来ない状態が生まれてしまいます。
クリック連打するなといいたいのですが、そんなのユーザは知ったこっちゃないですしね。
暫定的に今、ボタンをクリックすると、画像をDLする前にremoveEventListenerで
MOUSE_UPイベントを削除して、画像をDL完了した後にまたaddEventListenerでMOUSE_UPイベントを登録しています。
これでボタンクリック連打すると、上のように何度も画像がDLされることはなくなるのですが、
画像がDLされた後、1度だけまた画像をDLし始めます。
何か他にいい方法があれば教えてください。

88 :
わざわざremoveしなくても、mouseEnabled = falseでいいんじゃね?
その現象が起きなくなるかは分からんけど

89 :
ロード中はボタンを
ここまで書いて>>88と同じこと言おうとしてることに気付いた

90 :
そのボタンのイベントハンドラ内のコードだけうpしてみてお
フラグが立ってる間はキャンセルすりゃいいんだお
function mouse_On( e:MouseEvent ):void{
if ( loadingFlg ) return;//ロード中ならキャンセル loadingFlgはメンバ変数
//以下 ロード開始処理
}

91 :
>>90
ロード完了後にまとめてマウスイベントが来るって言うんだから
前にクリックした分が10回ぶん列に並んで待ってるてことじゃない?
ロード中にクリックしたif(loadFlg)を処理するのはロード完了後だからまた勝手に読み込み始めちゃうんじゃ?

92 :
普通に考えてロード完了したらボタンのイベントつけりゃ済む話じゃねーのそれ

93 :
Loader.loadで指定されたURLが存在しない場合ってどうやって拾ったらいいかな
誰かイベント投げてくれるっけ?

94 :
loaderInfoがIOError投げてくれるんじゃなかったか

95 :
それがIOEイベント登録したけどなんにもくれんかった

96 :
loaderオブジェクトに付けてるんじゃなくて?
loaderのloaderInfoに付けないとだが

97 :
contentLoaderInfoだった

98 :
>>96
contentLoaderInfoに付けて
loaderInfoに付けるとnullにさわんなって言われた

99 :
あ、URLカラにしたら拾った
拾う間違いと拾わない間違いがあるのかな

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼