SFML setPosition()

SFML setPosition()

本文关键字:setPosition SFML      更新时间:2023-10-16

我的函数有问题。我正在使用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);}

你想通过引用将精灵传递到函数中。您正在代码中复制它,并且副本正在由setPosition调用移动。

将函数签名更改为

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

如果你不想在你的setPostion()中将你的值转换为float,你可以使用sf::Vector2f()。像这样,您可以将两个参数放入此参数中,然后它们会自动转换为浮点数。

就像

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

尝试将此语句作为参数

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

而不是

(float) foodRandPosX + 300, (float) foodRandPosY

虚空食物RandPos(雪碧精灵食物,

你通过值传递雪碧食物,也许你想把它变成一个指针或一个引用

    void foodRandPos(Sprite & spriteFood,  int blockDimensionXY, int foodDimensionXY, int windowSi)

当你将一个参数传递给一个函数时,它会复制该值并将其发送到函数,基本上sprtieFood就像一个局部变量,一旦作用域脱离函数,它就会被"删除",所以你不想要它的值你想要它的地址在这种情况下,你传递对该变量的引用