不知道从sf :: Vector2i到const sf :: Vector2i <float>&amp;的参数1的转换

时间:2015-08-22 11:09:49

标签: c++ sfml

我正在尝试使用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的问题,但是我仍然不知道如何处理无效引用。我不知道如何正确传递鼠标位置。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

错误消息很明确:您尝试传递的是Vector2<int>而不是预期的Vector2<float>

float!= int以来,这不起作用。修改输入变量。

答案 1 :(得分:1)

假设变量spritesf::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);
}