【发布时间】:2018-06-09 10:43:20
【问题描述】:
最近我一直在用 C++ 制作一个测试“游戏”(以适应 SFML)。我制作了一个超级马里奥精灵,如下图所示
sf::Texture SuperMarioAnim;
if (!SuperMarioAnim.loadFromFile("img/image.png"))
{
std::wcout << L"Συγγνώμη, η εικόνα SuperMarioAnim δεν υπάρχει ή διαγράφηκε";
}
sf::Sprite SuperMario;
SuperMario.setTexture(SuperMarioAnim);
SuperMario.setPosition(200, 2900);
我还创建了一个 player_speed 整数,显然是玩家的速度值,我还创建了一个时间对象,该对象等于我们从clock.getElapsedTime() 获得的值:
int player_spd = 30;
while (window.isOpen())
{
//...
sf::Time time;
time = clock.getElapsedTime();
//...
}
但是,当我告诉精灵在 X 轴上移动时:
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
SuperMario.move(sf::Vector2f((player_spd * time), 0));
我收到此错误:1>c:\[directory]\visual studio 2017\projects\test_game\test_game\test_game.cpp(180): error C2593: 'operator *' is ambiguous(第 180 行是上面的 SuperMario.move 命令)
谁能说明我做错了什么?我正在使用 Visual Studio 2017 和 SFML 2.4
【问题讨论】:
-
它们不是可以一起成为
*的类型。你不能做std::string*int-> 在这里做同样的事情。你可以创建一个处理这两种参数类型的函数来做* -
@PYA 但是
clock.getElapsedTime()不返回数值吗?因为player_spd肯定是一个数值(所以我们不用担心这个变量) -
如果 operator* 重载,您应该能够将 sf::Time 和 int 相乘。看起来是这样的:sfml-dev.org/documentation/2.0/classsf_1_1Time.php 尝试像这样将 player_spd 转换为浮点数:sf::Vector2f(((float)player_spd * time), 0)