Перемещение плитки по плитке

Я сделал карту с Tiled. Каждая плитка этого измеряет 32x32 px как и мой главный герой спрайт.

В моем классе Player.cppУ меня есть некоторые функции, которые вычисляют deltaY/X которые решат, собираетесь ли вы Left/Right/Up/Down а затем вы используете их в функции обновления.

Это мой код до сих пор:

void Player::moveX(int moveDirection) {
deltaX = moveDirection * PlayerConstants::WALK_SPEED;
playAnimation(deltaX > 0 ? "WalkRight" : "WalkLeft");
facing = deltaX > 0 ? DIRECTION ::RIGHT : DIRECTION::LEFT;
}

void Player::moveY(int moveDirection) {
deltaY = moveDirection * PlayerConstants::WALK_SPEED;
playAnimation(deltaY < 0 ? "WalkUp" : "WalkDown");
facing = deltaY < 0 ? DIRECTION ::UP : DIRECTION::DOWN;
}

void Player::update(float elapsedTime) {
_x += deltaX * elapsedTime;
_y += deltaY * elapsedTime;

AnimatedSprite::update(elapsedTime);
}

Скорость ходьбы 0.1 прямо сейчас.

Есть какие-нибудь догадки о том, как переместить его плиткой по плитке?

1

Решение

Вот что ты мог сделать.

Создайте 2 глобальные переменные, скажем, x_overflow а также y_overflow, Теперь в функции обновления вместо непосредственного добавления deltaX и deltaY к _x и _y добавьте deltaX и deltaY к x_overflow и y_overflow. Затем добавьте пару if-statments, проверяющих, больше ли x_overflow и y_overflow желаемое расстояние (я предполагаю 32px), и, если они есть, переместите вашего персонажа на 32px.

Что-то вроде этого

void Player::update(float elapsedTime) {
x_overflow += deltaX * elapsedTime;
y_overflow += deltaY * elapsedTime;

if (x_overflow >= 32) {
_x += 32;
x_overflow = 0;
}
else if (x_overflow <= -32) {
_x -= 32;
x_overflow = 0;
}

if (y_overflow >= 32) {
_y += 32;
y_overflow = 0;
}
else if (y_overflow <= -32) {
_y -= 32;
y_overflow = 0;
}

AnimatedSprite::update(elapsedTime);
}

Я на самом деле не тестировал этот код (то есть не копировал вставку), но вы должны понять основную идею и реализовать ее самостоятельно. Удачи!

1

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

Других решений пока нет …

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