我正在尝试使用SFML库制作简单的按钮。当我将鼠标放在它上面时,按钮应该改变它的文本颜色。
from .models import Choice
from rest_framework import viewsets
from .serializers import ChoiceSerializer
class ChoiceViewSet(viewsets.ModelViewSet):
queryset = Choice.objects.all()
serializer_class = ChoiceSerializer
.contains()函数需要
void Button::updateColor(sf::Vector2i MousePos)
{
if(sprite.getGlobalBounds().contains(MousePos)) //here is the problem
text.setColor(color_covered);
else
text.setColor(color_uncovered);
}
确切的错误是:
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)
这删除了constness的问题,但是我仍然不知道如何处理无效引用。我不知道如何正确传递鼠标位置。
感谢您的帮助。
答案 0 :(得分:1)
错误消息很明确:您尝试传递的是Vector2<int>
而不是预期的Vector2<float>
。
自float
!= int
以来,这不起作用。修改输入变量。
答案 1 :(得分:1)
假设变量sprite
是sf::Sprite
个对象,getGlobalBounds
函数会返回FloatRect
typedef
sf::Rect<float>
。 那是 contains
函数期望浮点数向量的原因。
因此,要解决您的问题,您需要一个浮动向量。
答案 2 :(得分:0)
您可以编写一个函数将任何类型的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);
}