私はXNAのスターターで、私はポンゲームを作ろうとしています。
私はポンゲームを作ることができましたが、すべてのコードは1つのクラスに含まれていました。だから私は少しOOPを追加しようと思っていました。ボールのクラスとパッドのクラスを作りました。XNA/Cで矩形を移動する最善の方法#
ボールは完全に動きますが、ボールをパッドからバウンスさせることができないようです。かどうかを確認するにはパッド
Game1.cs
#region left
if (_KBS.IsKeyDown(Keys.W) || _KBS.IsKeyDown(Keys.Z))
Left.MoveUp();
else if (_KBS.IsKeyDown(Keys.S))
Left.MoveDown();
#endregion
#region right
if (_KBS.IsKeyDown(Keys.Up))
Right.MoveUp();
else if (_KBS.IsKeyDown(Keys.Down))
Right.MoveDown();
#endregion
pad.cs
public void MoveUp() {
if (!paused)
RecPad.Offset(0, -speed);
CheckBorders();
}
public void MoveDown() {
if (!paused)
RecPad.Offset(0, speed);
CheckBorders();
}
private void CheckBorders() {
MathHelper.Clamp(recPad.Y, borders.Top, borders.Bottom - recPad.Height);
}
を移動するには
:
これらは私が使用しているコードボールバウンス 01私は 0を仕事に戻って、パッドを得るように見えた ball.cs
public void CheckBounce() {
if ((myBounds.Intersects(left) && movement.X < 0) || (myBounds.Intersects(right) && movement.X > 0))
movement.X *= -1;
}
public void Draw(SpriteBatch sBatch, Texture2D texture, Color color, Rectangle left, Rectangle right) {
this.left = left;
this.right = right;
Move();
sBatch.Begin();
sBatch.Draw(texture, myBounds, color);
sBatch.End();
}
pad.cs
public Rectangle RecPad {
get { return recPad; }
private set { recPad = value; }
}
Game1.cs
Ball.Draw(spriteBatch, ball, Color.White, Left.RecPad, Right.RecPad);
MathHelper.Clampは詳細
ためmy codeを参照してくださいを動作するようには思えないので、 問題は、RecPad は今、私は私のboundries作業を取得する必要があります
コンストラクタの代わりにoriginelのrecPadを使用することによって解決しているように見えます
このコードは、現在
private void CheckBorders() {
if (recPad.Top < borders.Top)
recPad.Location = new Point(recPad.X, borders.Top);
if (recPad.Bottom > borders.Bottom)
recPad.Location = new Point(recPad.X, borders.Bottom - recPad.Height);
}
+1パドルが常に垂直に整列されている古典的なポンの場合、Xの速度を反転するだけでうまくいくはずです。 –
迅速な対応をありがとう!あなたが言及したテクニックの詳細を教えていただけますか? BTW:ボールは長方形ではなく、ちょうどVector2が上の左の位置にあるTexture2D – GroundZero
くそー!私のパッドはもう動かないようですね?私はそれが_RecPad.Offset(0、スピード)によって引き起こされたと信じています_しかし、私は確信していません – GroundZero