【アクション】ムービーだけがFLASHじゃない!【スクリプト】

このエントリーをはてなブックマークに追加
220まっつん ◆SW1/SWF8io
今日も今日とてMXと戯れる。FLASHMXってreplace()ないんだね・・・仕方ないから
ResultStr = "";
for(i = 0;i < Str.length; i++){
if(Str.charAt(i) == "置換前の文字")ResultStr += "置換後の文字";
else ResultStr += Str.charAt(i);
}
return ResultStr;
こんな関数作ってその場しのぎ。処理が重たいのなんのって(汗

>続、HitTest
もはや解説はいらないかもしれないけど、hittestの範囲(赤色の部分)が
http://www.geocities.co.jp/Playtown-Toys/2722/hyou_main.html
Ii;),).$.】,{:-:-;f,ェlIij),j,!,’.y;j,ェ:\:2ll
↑こうなるはずが
Ii;),).$.】,{:-:-;f,ェli.j.〈.8.〉:y;[:d;[.2.}.6ll
↑こうなってるんです。

MCブロックの構造は、
_root.
┣■Brock
┃┣■HP
┃┗□グラフィック(MC化してない)

こんな感じで、MC「Brock」のフレーム内で
flag = this.HP.hitTest(_root.mona.HP←モナーの当たり判定部);
if(flag == true){//当たっていたら
_root.ModeFlag = "Miss";//ミスフラグを立てる
}
こんな当たり判定の方法やってます。これが
flag = _root.Brock.hitTest(_root.mona.HP);
なんて記述されてるんなら判定部が広くなるのも納得いくんだけど・・う〜ん。
221ナナシアター.swf:02/10/08 04:18 ID:???
俺なら
_root.
┣■Brock
┃┣■HP
┃┗□グラフィック(MC化してない)
だとしたら、HPに
onClipEvent (enterFrame) {
if(this.hitTest(_root.mona.HP←モナーの当たり判定部)){
_root.ModeFlag="1";//0でoff1でon
}
}
ってやってるけど。
あと当たり判定はMCの形に関係なく矩形になるはず。
つまり、そのMCのグラフィック全体を囲む矩形が当たり判定。
Flash5とその辺の仕様が同じなら、ね。
222ナナシアター.swf:02/10/08 04:32 ID:???
>>220

Str.split( "置換前" ).join( "置換後" );
だと、楽だよ。
223ナナシアター.swf:02/10/08 07:55 ID:???
>>220
どれをまわしてるのさ?
224NLYL ◆r8NLYL.FLA :02/10/08 10:57 ID:???
>>220
HPの短形エリアより広くなるのはゴミでものこってるのか。
回転させても、ステージ上での短形だから、
HPが横長縦長だったりすると、斜めの時にエライ誤差出ると思われ。

あと、何故 flagが2ついる?

onClipEvent (enterFrame) {
_root.ModeFlag = this.hitTest(_root.mona.HP);
}
225ナナシアター.swf:02/10/08 15:02 ID:kTLvj1xO
Flash を使った回線速度測定サイトって、どうやっているのですか?

var myVars = new LoadVars();
myVars.onload = function(){・・・}
myVers.load("hoge.dat");
では、データサイズが大きくなるときの内部処理に時間がかかり過ぎて
正確なスループットが出ないのですが・・・
XMLでやったら、データサイズが1メガ付近で、ブラウザもととも、
クラッシュ(マック)またはダンマリ(ウィン)

それとも小さめのデータを何回か読み込んで、平均を算出しているので
しょうか?これも、かなりばらつきがある様に感じますし・・・
226ナナシアター.swf:02/10/08 15:26 ID:???
自分が、ローカルテスト中華?、鯖からダウンロードしたか?
ようすれば分かりまスか?
227NLYL ◆r8NLYL.FLA :02/10/08 16:06 ID:???
>>226
if (_url.charAt(0) == "h") {
//鯖上
} else {
//ローカル
}
228まっつん ◆SW1/SWF8io :02/10/09 00:25 ID:???
UIコンポーネントのスキン設定って超こまけー。

>>221
「ブロックが一定の大きさになったらhitestを有効にする」っていう作りに
なってるんで、HP内には書けなかったんですよ。

>>222
おぉ!目からウロコ!!そのスクリプトありがたく使わせていただきます

>>223
回してるのは_root.Brockです。

>>224
ModeFlagの中身を別んトコのenterFrameで監視してて、
その中身によって処理を分岐させてるもんで・・・
(ゲーム内でModeFlagは"Miss"や"Wait"に変わるんですわ)

ちなみにhitTestが短形になることへの解決策は、HPを
http://www.geocities.co.jp/Playtown-Toys/2722/hyou_main.html
Ii{),^.ッ,^,);),);).ェli.j,ィ.ヨ,`,h;h,h;n.メ,ョ.ヨli.j,〈.メ,〈,bli.j:n.メ:h,vli.j;;.¨;;,nll
↑こんな風に分割すれば
Ii{),[.\,{iュ;;,a:?:!li.j,ミi』,ミ.メ:f.ノ:)i《,ミi』li.j,{.-,],^:「,t:「.$,{.$li.j:ト.ッ:ョ,<;{,>;|.ャ:ミ.ャli.j:ォ,ョ:ゥ:;;h:{;b,z:ォ,z:ォ,ョll
↑こうなるだろうから万事OK、って感じでいいのかな?
229しっぽ ◆J6TaIL.y.Y :02/10/09 00:48 ID:???
>>228
そうなると、MC自体は丸い形かな?
230まっつん ◆SW1/SWF8io :02/10/09 01:02 ID:???
>>229 しっぽ
いや、この結論からいくと_rotationで回すhitTestの対象は
四角でも丸でもどっちでも一緒ってコトになるなぁ。

ちなみにhitTestする対象がMCじゃなくてマウスだったら
HP.hitTest(_xmouse,_ymouse,true) でOKなんだけどね。
(引数3つ目のtrueが『描いてある部分のみ判定させる』ってこと。
 falseだとMCの短形で判定する・・だと思った。今日ちらっと見ただけだからうろ覚え・・)
231しっぽ ◆J6TaIL.y.Y :02/10/09 20:05 ID:???

i.{,ト./,ミ,],(.【li.{,ミ,゚,o.』li.{;4.*;3,);t,{li.{;b,:;4,(ltj:「i「;k.0ltj;|i“;「.0ltj;ni「|l.2ltj;]i:|\.2li.’:’i「:‘.0|e.3|ai」:’i「li.’.yiァ.y.ミ:c.ミ:eiァ
.biァli.j.hiゥ.n.ト,e.ミ,ei・:.iゥ::.ト:d.ョ:eiゥ:,iァ::.ィ.】.ミ.】i・ltj:“,g;k,]ltj;.,*;/:fltj;7,》;『:vltj;ュ:ィ|`:ノli.j.《,).d,>,〕:〈:ミ:e.》,rli.j,),リ,r:xli.j,x,c.〔,〉li.j,『
:],n:/li.’.\,(,k,[,g,v,‘,v,(,ヨ,【,メ,】:]:0:]:0:》,n:},n:/,f:<,f:g.¨:k.〔,《.e,》.\,)li.’:“,`;`,`;`,<;(,*;*,《;』,『;』:g|ョ:k|ョ:ヒ;ノ:ノ;ュ:b;8:e;7:f;i:);.,{:“,〔:“,`li.t.$i「.\
.8:>.7:ui’.-i「li.t:>i(:/.7|o.9|bi*:>i’li.t.〉,l.8,u,リ:》,〈:》:$:a.〉,゚li.t:】,(:c,n|.:}|6:n:?,[ll

ちょっと差がでるんだよ。
丸い方が誤差が少ないと思う。

それよりも、座標であたりを調べちゃったら?
四角ならそんなに難しい計算にはならないだろうし
もしくは座標距離で計算。
232まっつん ◆SW1/SWF8io :02/10/10 00:59 ID:???
週末にFLASH Remotingの概要をここにまとめてみますね。

>>231 しっぽ
>HPを丸く
おぉ、たしかにこっちの方が誤差出ないね。勉強になります
>座標あたりで(略
お暇ならその計算方法を・・・Math.atan2とか
Math.sinとか使いそ〜なのはわかるけど。

高校の数学の教科書捨てずにとっときゃよかったなぁ
233しっぽ ◆J6TaIL.y.Y :02/10/10 01:25 ID:???
>>232
んと、一番簡単なのは円の公式を利用する。誤差あるけど
x^2+y^2=r^2ってやつ。(powめんどうなんで以下「^」で代用)

モナーの中心座標を(x0 , y0)ってするね
それで、ブロックの中心を通る線上に座標をいくつか設定する。
上の円が集まってる絵の、円の中心部分だと思って。
それを(x1, y1)(x2, y2)・・・ってするね。
で、
if ((x0 - x1)^2 + (y0 - y1)^2 <= r^2){
モナーぶつかる
}
rは壁の高さの半分+モナーの半径。
x1とかは、壁の中に取った座標の数だけ繰り返す
(繰り返す数が固定なのでfor使わない方がいいよ)

気をつけるべき点は、この座標は_rootからの座標を指定しなきゃダメ。
モナーの中心座標は、モナーMCの座標に幾つか足して調節
壁の内部座標は、brockの座標と回転数から求められるはず。


他にも、点と直線の距離の公式を利用するとか
壁の外形と、モナー座標から垂直に下ろした線との交点を調べるとか
座標の範囲で普通に大小を比較して求める方法とか。
思いつくのはこんなところ。

今眠くて頭が回ってないんで、わかんないとことか、もっと詳しくな事は
書いておいてくださり。
234まっつん ◆SW1/SWF8io :02/10/10 01:30 ID:???
>>233 しっぽ
おーさんきゅう!このレスは明日じっくり検証させてもらいま〜す
235しっぽ ◆J6TaIL.y.Y :02/10/10 18:14 ID:???
http://www.geocities.co.jp/Playtown-Toys/2722/hyou_main.html

i.;,^.-,^,ィ;*,ィ;*.-,z.-li.j,t.!;).!;ゥ.゙;〔.(;{.s;〉.5;《.e;},ョ;[,9;ヒ,b;・,<;’,*;*,*,z,<,[,>,|,y.?,\.【,7.』,0.】,ィ.】.a.?.0,,.s,}.),゚.l,f.I,t.jlt:.;
,〉,-:「l^j,;:g,!:ミlョ;,ミ:l,\:g.x].s}.x7lョ;:”.o:ノ.:,ktli.’,|,《,|:k,l:)li.’,.,』,},〉,],?li.’,.:f,{:kli.’,[.j,{.-li.’,ノ.f,[.j,『.(li.’,ヒ.4,}.-,】.7ll

もうちょっといいこと思いついた。
モナーの判定を点にして、
モナーの当たり判定を円と仮定したときの半径分だけ大きい判定を壁に作ればいいんだ
こうすれば、点と面だからHItTestのtrue判定ができるよ。
モナーの中心点がこの範囲に入ったとき、モナーの体が壁に接触してるってわけ