私は XNA のスターターで、ピンポン ゲームを作ろうとしています。
ピンポン ゲームを作成できましたが、すべてのコードが 1 つのクラスにまとめられていました。そこで、OOP を少し追加してみたいと思い、ボール用のクラスとパッド用のクラスを作成しました。
ボールは完璧に動きますが、パッドからボールをバウンドさせることはできないようです。
これらは私が使用するコードです:
パッドを移動するには
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);
}
ボールがバウンドするかどうかを確認するには
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);
パッドが機能するように見えた
問題は、コンストラクタ RecPad の代わりに元の recPad を使用することで解決された
ようです MathHelper.Clamp が機能していないように見えるため、境界を機能させるだけで済みます のコードを
参照してくださいより詳しい情報
このコードは国境の問題を修正しました
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);
}