我是XNA的首发者,我正在尝试制作pong游戏。
我已经能够做出一个乒乓球比赛,但所有的代码是在一个类。所以我想尝试添加一点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);
}
要检查球弹跳
个 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);
我似乎得到垫回去工作
这个问题似乎使用originel recPad代替构造的RecPad
现在我只是需要让我的工作boundries来解决,因为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);
}
+1,假设它像经典的Pong,其中的桨总是垂直对齐,那么只需反转X速度应该可以正常工作。 – 2012-02-25 20:34:43
感谢您的快速响应!你能给我更多关于你提到的技巧的信息吗? 顺便说一句:这个球不是一个矩形,只是一个带有Vector2的Texture2D作为topLeft的位置 – GroundZero 2012-02-25 22:31:06
该死!我的垫似乎不再移动了?我相信这是由_RecPad.Offset(0,speed)引起的; _但我不确定 – GroundZero 2012-02-25 22:32:48