- 締切済み
FLASHの当たり判定での点数
ActionSctipt 2.0 あるオブジェクトA(_root.a)が別のオブジェクトBの中に入った時 pointが1だけプラスする仕組みを作りたいです。 以下のような書き方だと オブジェクトAがオブジェクトBに 入っている間ずっとpointが+1されてしまいます。 はいっている間ずっと+1しつづけるのではなくて +1する処理を つくるにはどうすればよいのでしょうか? ↓オブジェクトBのアクション if (this.hitTest(_root.a)) { _root.point+=1; }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
> 以下のような書き方だと > オブジェクトAがオブジェクトBに入っている間 > ずっとpointが+1されてしまいます。 それは 書かれていらっしゃるスクリプトの部分に元々原因があるのではなくて その if文 の実行のさせ方に元々の原因があるのでしょう。 おそらく onClipEvent (enterFrame) {} の{}内や onEnterFrame = function() {}; の{}内, または onClipEvent (mouseMove) {} の{}内や onMouseMove = function () {}; の{}内などで if文を実行させているから 「ずっと point が +1 される」のではないでしょうか? あと, 「どうなったときに point が +1 され, どうなったときに point が +1 されなくして, さらにどうなったときに 再びpoint が +1 されるように戻したいのか。」 この辺もハッキリさせる必要があります。 つまり, ムービークリップA と B が接触した瞬間にだけ point を +1 して その後は一切 point を +1 する必要はないのでしょうか? それとも またいつかは point を +1 させるような必要が出てくるのでしょうか? ということです。 結局, 「今はどうしているのか」 そして 「だからどうしたいのか」 が良くわからないということですね。 これらのことがわからなくても漠然とした回答ならできます。 しかし具体的な回答はできないので 私が勝手に作った1つの対策入りの状況例を書きます。 _root のフレーム1のステージ上には インスタンス名「a」というムービークリップと インスタンス名「b」というムービークリップがあるとします。 ※【図】↓ その場合の, 「a」や「b」が存在するタイムライン(_rootなど)のフレーム(フレーム1など)に書くスクリプト例です。 //------------------------------ //変数 point の値の初期化 var point:Number = 0; //フラグとなる変数「flg」を用意 var flg:Boolean = false; //「b」をプレスしたときに実行する関数を定義 b.onPress = function():Void { //「b」のドラッグを開始 this.startDrag(); // //マウスが動いたときに実行する関数を定義 this.onMouseMove = function():Void { //もし「b」が「a」と接触した上で if (this.hitTest(_root.a)) { //もし「flg」が false であれば if (!flg) { //「point」の値を 1 加算 _root.point += 1; //試しに 「point」の値を出力 trace(_root.point); //「flg」をtrueにする flg = true; } //「b」が「a」と接触していなければ } else { //「flg」をfalseにする flg = false; } }; }; //「b」を放したときに実行する関数を定義 b.onRelease = b.onReleaseOutside=function ():Void { //「b」のドラッグを終了 this.stopDrag(); // //マウスが動いたときに実行する関数を削除 delete this.onMouseMove; }; //------------------------------ ※ActionScript 2.0 Flash MX 2004 以降で使用可 Flash Player 6 以上で動作可 スクリプトが書けましたら 「制御」→「ムービープレビュー」で 「b」をドラッグして動作検証してみてください。 勝手に作った状況での具体的な回答ではなく 漠然とした回答を書くとするなら 「フラグを用意してそのフラグを切り替えて 動作の分岐をすれば良いのではないでしょうか。」 ということです。 またはフラグなど用意せずに バッサリと delete ○○.onMouseMove; や delete ○○.onEnterFrame; などをしてしまっても良いかもしれません。 その辺は 「今はどうしているのか」 そして 「だからどうしたいのか」 によって変わります。