【问题标题】:Moving tile by tile一块一块地移动
【发布时间】:2017-07-27 13:26:23
【问题描述】:

我用 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

关于如何逐块移动它的任何猜测?

【问题讨论】:

  • 'moveDirection' 的值是 -1 还是 1?
  • @travisjayday 确实如此!
  • 在你的代码中,我猜 face 是一个全局变量?通常,使用全局变量并不好,因为当您编写软件时,可能会不清楚哪些函数正在更改该全局变量。稍后您可能想记住该全局变量是如何更改的(以防出现错误),祝您好运,将其追溯到这些函数。相反,您可以轻松地返回。
  • @KeithBecker 好吧,面对的是 Player 类的私有变量,根本不是全局变量(如果我明白你在说什么)
  • @James 哦,是的,那没关系

标签: c++ sdl-2 tiled


【解决方案1】:

这是你可以做的。

创建 2 个名为 x_overflowy_overflow 的全局变量。现在,在您的更新函数中,不是直接将 deltaX 和 deltaY 添加到 _x 和 _y,而是将 deltaX 和 deltaY 添加到 x_overflow 和 y_overflow。然后,添加几个 if 语句,检查 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);
}

我还没有真正测试过这段代码(即不要复制粘贴),但你应该了解它背后的主要思想并自己实现它。祝你好运!

【讨论】:

  • 确实有道理。我现在就试一试,一旦成功,我会通知你的:)谢谢!
  • 它确实有效!目前它看起来不是很顺利,但我会考虑如何解决它:)!谢谢
  • @James 很高兴听到!如果答案对您有所帮助,请考虑将其标记为答案(按复选标记并投票)。它会帮助我的代表;)
猜你喜欢
  • 2013-03-17
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 2018-12-15
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多