SFML 设置位置()

SFML setPosition()

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

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

将您的函数签名更改为

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

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

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

试试这个陈述作为论据

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

而不是

(float) foodRandPosX + 300, (float) foodRandPosY

void foodRandPos(Sprite spriteFood,

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

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

当你将一个参数传递给一个函数时,它会复制该值并将其发送给函数,基本上 sprtieFood 就像一个局部变量一样,一旦范围离开它获得的函数 "deleted" 所以你不想要它的值你想要它的地址在这种情况下你传递对该变量的引用