私は 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を使用してこれを行う方法がわかりません。正弦関数が役立つことがわかりましたが、この関数をどこでどのように使用するかはまだわかりません。
私はそれを理解しようとしていますが、解決策が見つかりません。
ありがとう、アサフ。