Как создать простую 2D телепортацию?

Пожалуйста, помогите мне, как мне добиться простой телепортации спрайта. Я просто хочу, чтобы спрайт переводился в правую часть экрана, если он выходит из левой части экрана, и наоборот. Пример изображения ниже .. (Пример игры типа pacman, способной телепортироваться из одной двери в другую)

введите описание изображения здесь

Я просто хочу, чтобы все было просто. Не нужен сложный алгоритм. Просто переведите спрайт на ту же ось y, если спрайт вводится слева на той же оси y. Вот что я попробовал.

void Physics::Boundary(float PosX, float PosY)
{
this->PosX = PosX;
this->PosY = PosY;

if (this->PosX >= 638.0f)
{
this->PosX = 2.0f;
this->PosY = PosY;
}
if (this->PosX <= 2.0f)
{
this->PosX = 638.0f;
this->PosY = PosY;
}
if (this->PosY >= 638.0f)
{
this->PosX = PosX;
this->PosY = 2.0f;
}
if (this->PosY <= 2.0f)
{
this->PosX = PosX;
this->PosY = 638.0f;
}
}

2

Решение

Если вы посмотрите на первый if-оператор вашего кода, он устанавливает PosX поле для 2.0f, Однако следующий оператор if проверяет PosX <= 2.0f, Это всегда будет верно, потому что в первом операторе if вы устанавливаете его 2.0f, В вашем случае вы всегда будете «телепортированы» обратно в исходное положение (638.0f). Вместо этого вы можете попробовать использовать оператор if-else:

void Physics::Boundary(float PosX, float PosY)
{
this->PosX = PosX;
this->PosY = PosY;

if (this->PosX >= 638.0f)
{
this->PosX = 2.0f;
this->PosY = PosY;
}
else if (this->PosX <= 2.0f)
{
this->PosX = 638.0f;
this->PosY = PosY;
}
if (this->PosY >= 638.0f)
{
this->PosX = PosX;
this->PosY = 2.0f;
}
else if (this->PosY <= 2.0f)
{
this->PosX = PosX;
this->PosY = 638.0f;
}
}

Вы также можете просто проверить меньше чем 2.0f вместо меньше или равно 2.0f.

4

Другие решения


По вопросам рекламы [email protected]