1

私は C# Windows フォーム アプリケーションで 2D ゲームを書いています。

バブルトラブルゲームを作りたいのですが、ジャンプのアルゴリズムに困っています。現実的にするには正弦関数を使用する必要があることがわかりました。

ボールクラスがあります:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

namespace BubbleTrouble
{

    class Ball
    {
        int level,gapX=2,gapY=2,x,y;
        bool up;
        public static int[] levelsPX={0,1,2,3,6,8,9,11};
        Panel panel;
        Graphics gr;

        public Ball(int lvl,int x,int y,bool isUp,Graphics gr)
        {
            this.gr = gr;

            up = isUp;
            this.x = x;
            this.y = y;
            if (up)
                gapY = -gapY;

            level = lvl;
        }

        public Ball[] pop()
        {
            if (level == 0)
                return null;
            else
            {
                bool up1 = true; 
                if(y>=20)
                    up1=false;
                Ball first = new Ball(level - 1, x, y,up1,gr);
                Ball second = new Ball(level - 1, first.x + 10 * levelsPX[level-1], y, up1,gr);
                Ball[] a = { first, second };
                level = 0;
                return a;
            }
        }

        public void paint()
        {
            gr.DrawImage(BubbleTrouble.Properties.Resources.ball, x, y, 10 * levelsPX[level], 10 * levelsPX[level]);
        }
        public void getNextPos()
        {
            if ((y <= 0) || (y + 10 * levelsPX[level] >= 364))
            {
                gapY = -gapY;
                up = !up;
            }
            if ((x + 10 * levelsPX[level] >= 681) || (x <= 0))
                gapX = -gapX;
            if (y < 70)
                gapY = -gapY;
            //Math.sin
            x=x+gapX;
            y=y+gapY;

        }

    }
}

ボールには X と Y の整数があり、2 つの整数 gapX と gapY もあります。gapX と gapY は、ボールの方向を変更するために使用されます。たとえば、現在、ボールは (30,30) の位置にあるため、次の位置は (30+gapX,30+gapY) になり、その後(30+2gapX,30+2gapY) で、ボールがフォーム バウンドから外れると、ギャップが変化します。たとえば、X スケールの位置がフォーム境界よりも大きい場合、gapX を -gapX に変更して、ボールが反対方向に移動するようにします。

しかし、私は波でボールジャンプがしたいのですが、ボールのXYとgapXとgapYを使用してこれを行う方法がわかりません。正弦関数が役立つことがわかりましたが、この関数をどこでどのように使用するかはまだわかりません。

私はそれを理解しようとしていますが、解決策が見つかりません。

ありがとう、アサフ。

4

1 に答える 1

3

ヒントとして小さな方法。遊び場の高さと幅に合わせて調整する必要があります。

/// <summary>
/// Calculates ball bouncing.
/// </summary>
/// <param name="x">X position (0 .. 360)</param>
/// <returns>Returns y position (0 .. 1)</returns>
private double Position(double x)
{
    x *= Math.PI / 180;
    return Math.Abs(Math.Cos(x)); // Always positive
}
于 2013-04-13T11:47:06.680 に答える