gpt4 book ai didi

c++ - SFML 将 Sprite 置于中心

转载 作者:行者123 更新时间:2023-11-28 05:19:53 26 4
gpt4 key购买 nike

我已经尝试解决这个问题大约一个小时或更长时间...但找不到任何有用的答案。我试图将 Sprite 放在窗口的中央,但它显示在 TOP_LEFT 上。这是我的类的构造函数,如您所见,我将 surface.width 和 surface.height 除以 2

Spaceship::Spaceship(sf::RenderWindow& game_window){
auto surface = game_window.getSize();
signed int ss_x = surface.x/2;
signed int ss_y = surface.y/2;

int ss_width = 128;
int ss_height = 128;
int ss_radius = ss_width/2;
}
///////////////////////////////////////////
// For displaying the sprite on window //
///////////////////////////////////////////
void Spaceship::drawsprite(sf::RenderWindow& game_window){
sf::Texture ship;
if (!ship.loadFromFile(resourcePath() + "space-shuttle-64.png")) {
return EXIT_FAILURE;
}
sf::Sprite ss_sprite(ship);
ss_sprite.setPosition(ss_x, ss_y);
game_window.draw(ss_sprite);
}

我也尝试过:

   auto surface = game_window.RenderWindow::getSize();
signed int ss_x = surface.x/2;
signed int ss_y = surface.y/2;

但这也没有帮助。

更新:

我试图打印在构造函数中定义的变量,但我得到的都是 0。所以我的问题似乎是访问问题。但没有错误或警告告诉我这一点。

更新 2:

这是头文件:

#ifndef Spaceship_hpp
#define Spaceship_hpp
#include <iostream>
#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include <stdio.h>

using namespace std;

class Spaceship {
public:
Spaceship();
Spaceship(sf::RenderWindow&);
~Spaceship();
void moveship(char);
void drawsprite(sf::RenderWindow&);

private:
signed int ss_x, ss_y;
unsigned int ss_speed;
int ss_width, ss_height, ss_radius;

};

#endif /* Spaceship_hpp */

最佳答案

您没有在构造函数中正确初始化属性。

Spaceship::Spaceship(sf::RenderWindow& game_window){
auto surface = sf::VideoMode::getDesktopMode();
signed int ss_x = surface.width/2;
signed int ss_y = surface.height/2;

int ss_width = 128;
int ss_height = 128;
int ss_radius = ss_width/2;
}

应该是

Spaceship::Spaceship(sf::RenderWindow& game_window){
auto surface = sf::VideoMode::getDesktopMode();
ss_x = surface.width/2;
ss_y = surface.height/2;

ss_width = 128;
ss_height = 128;
ss_radius = ss_width/2;
}

在类的主体中声明变量意味着它们在类中是全局可见的,如果您在构造函数中重新声明一个变量,它将接替全局变量的角色。这称为变量阴影。对变量的所有修改都将起作用,但是一旦离开构造函数/函数/方法的范围,您就会丢失信息,因为您的属性变量未被修改。

有关作用域的更多信息:http://en.cppreference.com/w/cpp/language/scope

有关变量阴影的更多信息:https://en.wikipedia.org/wiki/Variable_shadowing?oldformat=true

关于c++ - SFML 将 Sprite 置于中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41729773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com