2014-12-10 4 views
2

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

enter image description here

Я просто хочу, чтобы держать его просто. Не нужен сложный алгоритм. Просто переведите спрайт на одну и ту же ось 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; 
    } 
} 
+0

Думаю, вам придется нарисовать его дважды. – SlySherZ

+0

Если вы можете обернуть любые края и углы, вам придется рисовать его максимум 4 раза, если вы хотите показывать отдельные биты одновременно –

ответ

4

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

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.

Смежные вопросы