SFML setPosition()

时间:2015-04-24 15:10:15

标签: c++ sfml

我的功能有问题。我使用SFML库,我不知道为什么setPosition()dosent工作。 但是,当我在函数调用下放置setPosition()时,它可以正常工作。有什么建议吗?

void foodRandPos(Sprite spriteFood,  int blockDimensionXY, int foodDimensionXY, int windowSizeX, int windowSizeY ){

int frameWidth = (windowSizeX - (2 * blockDimensionXY) ) / blockDimensionXY;
int frameHeight = (windowSizeY - (2 * blockDimensionXY) ) / blockDimensionXY;
int foodRandPosX = ( ( (rand()%frameWidth) + 1) * foodDimensionXY);
int foodRandPosY = (( (rand()% frameHeight) + 1) * foodDimensionXY);
spriteFood.setPosition((float) foodRandPosX + 300, (float) foodRandPosY);}

5 个答案:

答案 0 :(得分:3)

您希望通过引用将Sprite传递给函数。您正在代码中复制它,并且setPosition调用正在移动副本。

将您的功能签名更改为

void foodRandPos(Sprite & spriteFood,  int  ... ){

答案 1 :(得分:0)

如果您不希望在setPostion()中将值转换为float,则可以使用sf :: Vector2f()。就像你可以把你的两个参数放在这个参数中,它们会自动转换为浮动。

答案 2 :(得分:0)

就像Omera提到的那样,sf :: Vector2f()允许你输入2个参数,特别是(x,y)坐标,这使得它在你的代码中更容易实现。然后你可以将Vector2f作为要设置的位置传递给。

答案 3 :(得分:0)

尝试将此声明作为参数

sf::vector2f((float) foodRandPosX + 300.0f, (float) foodRandPosY)

而不是

(float) foodRandPosX + 300, (float) foodRandPosY

答案 4 :(得分:0)

  

void foodRandPos(Sprite spriteFood,

你传递值spriteFood也许你想让它成为指针或引用

git cherry -v develop

当你将一个参数传递给一个函数时,它会复制该值并将其发送到函数中,一旦示波器超出它被“删除”的功能,sprtieFood会像局部变量一样被处理,所以你不想要在这种情况下,您想要其地址的值,您传递对该变量的引用