Как заставить Picturebox перемещаться по краям экрана без обрезки? - PullRequest
0 голосов
/ 15 января 2019

В образце автомобильной игры я хочу, чтобы машина двигалась по экрану, и я хочу, чтобы она была «привязана» к краям. Тем не менее, он продолжает отсекать и выходит за пределы экрана.

Я сделал прямоугольник с картинкой и использовал размеры изображения автомобиля, центрированного в картинке, для построения модели кода. Picturebox имеет размер 100x100, а изображение автомобиля (если смотреть вбок) примерно 50x100. Например, если машина движется вбок от краев экрана, я бы сделал Y-расположение в поле для картинок -25. Тем не менее, я чувствую, что это слишком неудобно, потому что мне, возможно, придется изменить картину автомобиля.

Point pNewLoc = carLocation;

int iX = Width - pbCar.Width;
int iY = Height - pbCar.Height;

if (pNewLoc.X <= 0 || pNewLoc.X >= iX)
{
    if (pNewLoc.X <= 0)
    {
        if (iDirection == CarDirection.UP || iDirection == CarDirection.DOWN)
        {
            pNewLoc.X = -25;
        }
        else
        {
            pNewLoc.X = 0;
        }
    }
    if (pNewLoc.X >= iX)
    {
        if (iDirection == CarDirection.UP || iDirection == CarDirection.DOWN)
        {
            pNewLoc.X = iX + 25;
        }
        else
        {
            pNewLoc.X = iX;
        }
    }
}

if (pNewLoc.Y <= 0 || pNewLoc.Y >= iY)
{
    if (pNewLoc.Y <= 0)
    {
        if (iDirection == CarDirection.LEFT || iDirection == CarDirection.RIGHT)
        {
            pNewLoc.Y = -25;
        }
        else
        {
            pNewLoc.Y = 0;
        }
    }
    if (pNewLoc.Y >= iY)
    {
        if (iDirection == CarDirection.LEFT || iDirection == CarDirection.RIGHT)
        {
            pNewLoc.Y = iY + 25;
        }
        else
        {
            pNewLoc.Y = iY;
        }
    }
}

carLocation = pNewLoc;

Этот код работает просто отлично, но я чувствую, что он слишком длинный и слишком неудобный.

1 Ответ

0 голосов
/ 15 января 2019

Если код работает, то его можно определенно суммировать:

int verticalDirection = Convert.ToInt32(iDirection == CarDirection.UP || iDirection == CarDirection.DOWN);
int horizontalDirection = Convert.ToInt32(iDirection == CarDirection.LEFT || iDirection == CarDirection.RIGHT);
if (pNewLoc.X <= 0)
{
    pNewLoc.X = -25 * verticalDirection;
}
else
{
    pNewLoc.X = iX + 25 * verticalDirection;
}
if (pNewLoc.Y <= 0)
{
    pNewLoc.Y = -25 * horizontalDirection;
}
else
{
    pNewLoc.Y = iY + 25 * horizontalDirection;
}

Если вы измените размер изображения, вам не нужно использовать константу наподобие 25, но вы должны объявить переменную, которая зависит от размера изображения автомобиля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...