不知道参数 1 从 sf::Vector2i 到 const sf::Vector2i<float>& 的转换
No know conversion for argument 1 from sf::Vector2i to const sf::Vector2i<float>&
我正在尝试使用 SFML 库制作简单的按钮。当我将鼠标放在按钮上时,该按钮应该会更改其文本颜色。
void Button::updateColor(sf::Vector2i MousePos)
{
if(sprite.getGlobalBounds().contains(MousePos)) //here is the problem
text.setColor(color_covered);
else
text.setColor(color_uncovered);
}
.contains() 函数需要
const vector2<T>&
准确的错误是:
no known conversion for argument 1 from 'sf::Vector2i {aka sf::Vector2<int>}' to 'const sf::Vector2<float>&'
我尝试过改变
void Button::updateColor(sf::Vector2i MousePos)
到
void Button::updateColor(const sf::Vector2i& MousePos)
这消除了常量问题,但我仍然不知道如何处理无效引用。我不知道如何正确传递鼠标位置。
感谢您的帮助。
错误消息很明确:您正在尝试传递 Vector2<int>
而不是预期的 Vector2<float>
。
因为 float
!= int
,这是行不通的。修改您的输入变量。
假设变量 sprite
是一个 sf::Sprite
object, the getGlobalBounds
函数 returns 一个 FloatRect
是 typedef
的 sf::Rect<float>
。 这就是 为什么 contains
函数需要一个浮点向量。
所以要解决您的问题,您需要一个浮点向量。
您可以编写一个函数将任何类型的 Vector2
转换为另一种类型(例如:Vector2f
转换为 Vector2i
,或 Vector2u
转换为 Vector2f
等)。
template <typename TO, typename FROM>
sf::Vector2<TO> toVector2(const sf::Vector2<FROM> &other)
{
return sf::Vector2<TO>(
static_cast<TO>(other.x),
static_cast<TO>(other.y));
}
然后,您可以按如下方式重写代码:
void Button::updateColor(sf::Vector2i MousePos)
{
if(sprite.getGlobalBounds().contains(toVector2<float>(MousePos))) // no more error
text.setColor(color_covered);
else
text.setColor(color_uncovered);
}
我正在尝试使用 SFML 库制作简单的按钮。当我将鼠标放在按钮上时,该按钮应该会更改其文本颜色。
void Button::updateColor(sf::Vector2i MousePos)
{
if(sprite.getGlobalBounds().contains(MousePos)) //here is the problem
text.setColor(color_covered);
else
text.setColor(color_uncovered);
}
.contains() 函数需要
const vector2<T>&
准确的错误是:
no known conversion for argument 1 from 'sf::Vector2i {aka sf::Vector2<int>}' to 'const sf::Vector2<float>&'
我尝试过改变
void Button::updateColor(sf::Vector2i MousePos)
到
void Button::updateColor(const sf::Vector2i& MousePos)
这消除了常量问题,但我仍然不知道如何处理无效引用。我不知道如何正确传递鼠标位置。
感谢您的帮助。
错误消息很明确:您正在尝试传递 Vector2<int>
而不是预期的 Vector2<float>
。
因为 float
!= int
,这是行不通的。修改您的输入变量。
假设变量 sprite
是一个 sf::Sprite
object, the getGlobalBounds
函数 returns 一个 FloatRect
是 typedef
的 sf::Rect<float>
。 这就是 为什么 contains
函数需要一个浮点向量。
所以要解决您的问题,您需要一个浮点向量。
您可以编写一个函数将任何类型的 Vector2
转换为另一种类型(例如:Vector2f
转换为 Vector2i
,或 Vector2u
转换为 Vector2f
等)。
template <typename TO, typename FROM>
sf::Vector2<TO> toVector2(const sf::Vector2<FROM> &other)
{
return sf::Vector2<TO>(
static_cast<TO>(other.x),
static_cast<TO>(other.y));
}
然后,您可以按如下方式重写代码:
void Button::updateColor(sf::Vector2i MousePos)
{
if(sprite.getGlobalBounds().contains(toVector2<float>(MousePos))) // no more error
text.setColor(color_covered);
else
text.setColor(color_uncovered);
}