ブロック崩しの判定について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
haru

ブロック崩しの判定について

#1

投稿記事 by haru » 14年前

現在c#でブロック崩しの作成に挑戦しているのですが、接触したかどうかの判定がうまくいきません。

現状行き詰っているので、、バーとボールのみでの動作をいったんの目標にしてます。

timerメソッドの中に組み込む接触を判断する部分を作成しているのですが、

コード:

Puddle puddle = new Puddle();
Ball ball = new Ball();  /*独自定義のクラスでそれぞれにX、Y座標と、ballには速度VX,VYがあります */

        private void timer1_Tick(object sender, EventArgs e)
        {
            int a, b,c,d;
            if(keyPressed.Count >= 1)
                {
                    switch(keyPressed[0])
                    {
                        case Keys.X:
                            puddle.X += 10; break;
                        case Keys.Z:
                            puddle.X -= 10; break;
                    } /*ここはバーの操作の処理*/
                }
             ball.X += ball.VX;
             ball.Y += ball.VY;
             a = puddle.X;
             b = puddle.Y;
             c = ball.X;
             d = ball.Y;
             if (a - c < 10 && a - c < (-10))
             {
                 if (b == d)
                     ball.VY *= (-1);
             }
             if (ball.Y == 0  || ball.Y == this.Width )
                 ball.VY *= (-1);
             if (ball.X == 0 || ball.X == this.Width)
                 ball.VX *= (-1);
             this.Invalidate();
        }   


これだと接触した際に反射はしたのですが、バーより左の何もない部分で反射したり
バーが失踪したりと何かと不具合が絶えません。
どう修正すればいいか教えていただけませんか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: ブロック崩しの判定について

#2

投稿記事 by h2so5 » 14年前

if (a - c < 10 && a - c < (-10))

ここの計算式がどう見ても変です。
a - c < (-10) が成立するなら、当然 a - c < 10 なので判定する意味がありません。

バーの失踪については、画面端にバーがあったらバーが画面外に出るキー入力を受け付けないように、
判定を追加すれば良いと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る