- ベストアンサー
flash as2.0 hitTest()について
BlurFiltanの回答
Flash MX で 私が想定するところの書かれていらっしゃるようなものを作成して ActionScript もそのままムービークリップ tama_mc 自体にコピペみましたが ムービークリップ kabe_mc でバウンドしましたよ。 ただ若干「おかしいな」と思った点は スクリプトでは「tama_mc」と「kabe_mc」との当たり判定を取っているのに なぜ「this」を動かしているのだろうか? という部分です。 そうしても悪くはないです。 しかし普通はしないと思います。 「Aさん」に近づく「Bさん」がいて 「Aさん」と「B君」が接触したら「僕」の動きを止める。 なんか変じゃないですか? 「B君」と「僕」とが同一人物であれば「2人のストーリー」になりますが 「Aさん」と「B君」と「僕」が出てきたら普通それは「3人のストーリー」になります。 (サイコサスペンス でない限り。) インスタンス名 kabe_mc と tama_mc のムービークリップは 確かに _root にあって tama_mc にスクリプトを書いてますか? ※【参考図】↓ このようにしないとスクリプトに矛盾が生じると思いますよ。 もしくは, サイコサスペンスのような紛らわしいキャスティングをするのではなくて if(_root.tama_mc.hitTest(_root.kabe_mc)==true){ の部分を if (this.hitTest(_root.kabe_mc) == true) { にするとか。
関連するQ&A
- コピペで持ってきたのにasが働かない?
円グラフがあり、グラフが進んで表示されるていく順に説明の吹き出しが4つボヨンとでて最後に大きな吹き出しがボヨンとでるのがあり、吹き出しの内容を変え、無事動いたのですが、他のアニメの後にそれを入れようとしてコピベすると、4つの吹き出しがでないのです。ルートがおかしいかと思い、新規ファイル、シーンに丸ごと、「すべてのフレームを選択」でもってきても、4つの吹き出しがでなくなる。どうしてでしょう?(元もシーンにある)ASはそのまま、フレームラベルもそのままなのに。 シーンの円グラフMCに onClipEvent(load){ stoptime = getTimer(); waittime = 4500; } onClipEvent(enterFrame){ if (getTimer() >= stoptime + waittime) { for (i=1; i<=4; i++){ mc = "MC_fukidasi" + (i); _root[mc].targetScale = 0; } _root.gotoAndStop("scene2"); } } 円グラフMCの中、吹き出しのタイミングでMC1~4番号替え _root.MC_fukidasi1.flag = true; シーンの吹き出し1~4それぞれ onClipEvent(load){ targetscale = this._xscale; nowscale = 0; this._xscale = this._yscale = this._alpha = nowscale; decay = 0.6; speed = 0.3; flag = false; } onClipEvent(enterFrame){ if (flag == true){ nowscale = nowscale * decay + (targetScale - this._xscale) * speed; this._xscale = this._yscale = this._alpha += nowscale; } } 大きな吹き出しMCに、flagなしのボヨンとでるas 上のフレームラベル「scene2」 アニメの説明の為に、アニメの後ろこれを入れたいので、どうしたらいいのかわかりません。 スクリプトが判らないので何か方法はないでしょうか?
- ベストアンサー
- Flash
- AS2をAS3にしたい
AS2で書かれたスクリプトの一部があります。下記をAS3にしたいのですが。 ちなみに、mcはインスタンス名です。 onClipEvent (load) { pointX = 10; pointY = 20; } onClipEvent (mouseMove) { _root.mc._x = _root._xmouse + pointX; _root.mc._y = _root._ymouse + pointY; }
- ベストアンサー
- Flash
- 深度とhittest
いろいろ調べて、本も買って読んでみたのですが、解決することができなかったので質問させてください。 3つのオブジェクトがあります(tamaとtekiとjiki) //メインのタイムライン上 onClipEvent(load){ a=1; count=1; } onClipEvent(enterFrame){ jiki.attachMovieClip("tama","tama"+a,a) if(KeyDOWN(SPACE){ jiki.attachMovieClip("tama","tama"+a,a) _root."tama"+a._x=jiki._x _root."tama"+a._y=jiki._y a++; } //弾のスクリプト if(this.hittest(teki)){ this.removeMovieClip(); teki.removeMovieClip(); } 弾を撃って弾が敵に当たったなら弾と敵を両方消すということをしたいです。 弾の深度を考えず、attachMovie("tama","tama",1)としたときはきちんと消すことが出来ました。しかしそれだと弾を連射することができません。なので深度を使ってattachMovie("tama","tama"+a,a)としたとき、連射はできるようになったのですが、今度は敵にあたらなくなってしまいました。どうすれば敵と深度aにある弾があたるようになるか教えていただけませんか?若しくはヒントだけでもいただけないでしょうか?? 宜しくお願いします。
- ベストアンサー
- Flash
- マウスを追いかける
ムービークリップがマウスを追いかけるというようにしたいのですが、追いかけるムービークリップが別のシンボルの中にあると座標がずれるようで、このずれをなくしたいのですがどのようにすればよいのでしょうか? 詳しくは、シーン1にシンボル(ただの図形と追いかけてほしいムービー:mc1)を置いて、mc1に下記のスクリプトを書きました。 -------------------------------------------- onClipEvent (load) { _root.mc1.startDrag(true); x = _root._xmouse; y = _root._ymouse; } onClipEvent (enterFrame) { _x += (_root._xmouse-_x)/4; _y += (_root._ymouse-_y)/4; } --------------------------------------------
- ベストアンサー
- Flash
- 揺れるスクリプトについて
こちらで教えていただいたサイトで揺れるスクリプト を勉強していたのですが、 ■をMCにして、 onClipEvent (load) { this._xscale = this._yscale = 0; function sMove(mScale,acc,conv) { theScale = theScale*acc+(mScale-this._yscale)*conv; this._xscale = this._yscale += theScale; } } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse,_root._ymouse,1)) { sMove(130,0.8,0.2); } else { sMove(100,0.8,0.2); } } と書いたのですがプレビューすると真っ白なままなにも 表示されません。 なぜなのでしょうか?
- ベストアンサー
- Flash
- hitTestのロールアウト判定
auのスライド式メニューなんですが、あれってボタンの中にボタンが入っていますよね?過去記事を読んだところ、「ボタンが重なり合った領域でマウス操作すると手前のインスタンスしかイベントを受け取れない」ので「hitTestを使う」とありました。ただ、ちょっと問題が・・ --問題点--- _________________________ | |mc|mc|mc|mc| | 余白 | | | | | | | | | | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ こんな感じなんですが、swfに余白のある左側に出た場合はrollOut処理が働くのですが、余白のない「上、右、下」に出た場合に、処理が働かないんです。on()で記述した場合にはどの方向からでもrolloutするのに何故ダメなのでしょうか? --ActionScript--- onClipEvent (load) { totalNum=4;leftX=20;rightX=320;mcPos=rightX;speed=5; function mcSet(myNum){ var i=1; while(i<=myNum){_parent["cont"+i+"_mc"].setMove("left");i++;} while(i<=totalNum){_parent["cont"+i+"_mc"].setMove("right");i++;} } function setMove(dir) { if(dir=="left"){mcPos=leftX;}else if(dir=="right"){mcPos=rightX;} this.onEnterFrame=xMove; } function xMove(){ nextX=this._x+(mcPos-this._x)/speed; if(Math.abs(mcPos-nextX)>0.1){this._x=nextX; }else{this._x=mcPos;this.onEnterFrame=undefined;} } function init(){ var i=1; while(i<=totalNum){ _parent["cont"+i+"_mc"].setMove("right");i++; } } } onClipEvent(enterFrame){ if(this.hitTest(_root._xmouse, _root._ymouse, true)){this.mcSet(1);}else{init();} }
- ベストアンサー
- Flash
- 入れ子になっているMCのクリック判定について
Flash ver9 AS2.0 使用です。 親MCの中に子MCがいる構造です。 親MCはロールオーバーで移動、ロールアウトで元の位置へ戻るボタンアクション(onRollOver、onRollOut)を付けています。 その中にいる子MCにもロールオーバーで拡大するというアクションを付けていますが、 こちらにはonClipEventで接触判定(hitTestメソッド)で拡大するかどうかを判断しています。 分からないのは、この子MCをクリックした時に他のシーンへ移動させたいのですが、苦し紛れで onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { //拡大処理 } onClipEvent(mouseDown){ //シーン移動処理 } としても、シーン移動が出来ませんでした。(当たり前ですよね…) hitTestメソッドのクリック判定バージョンがあれば良いのですが、 検索不足か本当に無いのか見つけられませんでした。 分かり難い説明かとは思いますが、シーン移動のさせ方、またはクリック判定の仕方を教えていただきたいです。
- ベストアンサー
- Flash
- 下からスライドしてくるメッセージ
こんにちは。 フラッシュ初心者です。画面下に、タブを出しておいてマウスオーバーすると上にスライドしてメッセージが出るというものを作っているんですが、位置の指定がうまくいきません。 もともと横にスライドするサンプルを見つけまして、縦に動くようにカスタマイズしているのですが…。 最初の位置の指定はできました。動きも縦になったのですが上に行き過ぎてしまうのです…。 メッセージ枠の幅だけ上に上がるようにするか、または上から○pxのところまで上がるように指定したいのですが、この場合どうすればよいのでしょうか? ↓今、こんな感じで作ってます。ステージはw400px×H200pxです。 onClipEvent (load) { this._y = 180; } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse,_root._ymouse,1)) { this._y -= (this._height-this._y)/_root.speed; } else { this._y += (180-this._y)/_root.speed; } }
- ベストアンサー
- Flash
- ムービークリップを削除したい
FLASH 5 を使っています。 現在、duplicateMovieClip を使ってムービークリップを複製できるようにしています。 複製するMCの名前に連番を付けるようにして同じものを何個も複製できるようにしています。 別途、ゴミ箱を作り複製したMCをゴミ箱に乗せると削除できるようにしたいと考えています。 hitTest と removeMovieClip を使えば良さそうなのですがうまくいきません。 複製したMCが何個も出来るためゴミ箱基準だとMCの名前を指定できないので複製元のMCに onClipEvent (enterFrame) { if (this.hitTest( _root.gomi )) { this.removeMovieClip (); } } と書いてみたのですがダメでした。 なにぶん Actionscriptを始めたばかりで、良く分かりません。 お分かりの方、教えていただけますでしょうか? 宜しくお願い致します。
- ベストアンサー
- Flash
- 移動範囲を指定したい
マウスを追いかけるMC1の追いかける範囲を指定したいのですがうまくいきません; 細かい指定としては↓ (1)画面の下1/5ぐらいのMC2の中にはMC1は入れない (2)マウスがMC2の中にある時はMC1はy座標は変化なし x座標はマウスを追いかける(つまり、横にしか動かない) (3)マウスがMC2から出てきたら、再びMC1はマウスを追いかける 現状としては ------------------------------------------- onClipEvent (enterFrame) { if (this.hitTest(_root.ki.kusa)){ _x += (_parent._xmouse-_x)*0.1; this._y += 0; }else{ _x += (_parent._xmouse-_x)*0.1; _y += (_parent._ymouse-_y)*0.1; } } ------------------------------------------- これでは、マウスがMC2から出てきた時に、MC1がMC2から離れないという様になってしまうのですがどうすればいいでしょうか??
- 締切済み
- Flash