У меня есть этот метод, который обнаруживает столкновение между мячом и левым веслом в классической игре «Понг». Я сделал переменные для разных частей шара и весла, чтобы облегчить понимание метода обнаружения столкновений. Вот метод (и он работает).Установить свойства объекта относительно другого свойства того же объекта
public bool DetectBallPaddle1Collision() {
var ballBottom = _ball.Y + Ball.Width;
var ballTop = _ball.Y;
var ballLeft = _ball.X;
var ballRight = _ball.X + Ball.Width;
var paddle1Bottom = _paddle1.Y + Paddle.Height;
var paddle1Top = _paddle1.Y;
var paddle1Left = PlayerPaddle.X;
var paddle1Right = PlayerPaddle.X + Paddle.Width;
if (ballTop < paddle1Bottom &&
ballBottom > paddle1Top &&
ballLeft < paddle1Right) {
return true;
} else {
return false;
}
}
Теперь я хотел бы, чтобы реорганизовать это, чтобы иметь переменные для различных частей шара, в классе мяч, например, так:
namespace Pong.Core.Models
{
public abstract class Ball : IBall
{
public int Y { get; set; }
public int X { get; set; }
public int VX { get; set; }
public int VY { get; set; }
public static int Width;
public static int Speed;
public int Bottom { get; set; }
public int Top { get; set; }
public int Left { get; set; }
public int Right { get; set; }
public Ball() {
this.setDirection ("left");
Bottom = Y + Ball.Width;
Top = Y;
Left = X;
Right = X + Ball.Width;
}
Что позволяет мне изменить мяч/paddle1 метод обнаружения столкновения с этим:
public bool DetectBallPaddle1Collision() {
var paddle1Bottom = _paddle1.Y + Paddle.Height;
var paddle1Top = _paddle1.Y;
var paddle1Left = PlayerPaddle.X;
var paddle1Right = PlayerPaddle.X + Paddle.Width;
if (_ball.Top < paddle1Bottom &&
_ball.Bottom > paddle1Top &&
_ball.Left < paddle1Right) {
return true;
} else {
return false;
}
}
Теоретически это должно работать, но это не так, мяч теперь проходит через лопасти. Это должно работать, потому что свойство является методом и должно обновляться, если оно относится к другому свойству, правильно? Вот почему я сделал ball.Bottom, .Top, .Left и .Right, свойства с геттерами и сеттерами, а не поля, которые не будут обновляться.