标签: sfml

关于我游戏中继承的一个问题

我有一个派生自Humanoid和Humanoid的Player类派生自Sprite

Sprite -> Humanoid -> Player
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.Sprite有虚方法

virtual sf::Sprite getSprite() { return sprite_; }
Run Code Online (Sandbox Code Playgroud)

sprite是一个可以绘制到屏幕上的图像对象.

人形机器人宣称 virtual sf::Sprite getSprite();

玩家定义 virtual sf::Sprite getSprite() { return sprite_; }

雪碧有一个成员sprite_; 这就是我想要做的:

1)在传递精灵的同时创建一个玩家类

Player::Player(sf::Image image)
    : Humanoid()
{   
    sprite_.SetImage(image); // Converts sf::Image to sf::Sprite
}
Run Code Online (Sandbox Code Playgroud)

2)从我的Game类中将它绘制在屏幕上

sf::Image playerImage;
if(!playerImage.LoadFromFile("Link/Link.png"))
    std::cin.get();

Player *player = new Player(playerImage);

/* ... */

App.Draw(player->GetSprite());
Run Code Online (Sandbox Code Playgroud)

测试程序,我发现该player->getSprite()方法确实被调用,但我担心我可能隐藏了该Sprite::getSprite()方法而不是实际导出和使用它.由于Sprite类有一个受保护的sprite_成员,我很困惑在调用函数时我实际返回的是哪个sprite_对象.

此外,似乎图像文件在该行的某处丢失,在我在SFML论坛中发帖之前,我想确认我的继承树是否实际上是正确的.

c++ inheritance sfml

1
推荐指数
1
解决办法
259
查看次数

OpenGL + SFML还是SDL?

嘿所以我刚刚开始像一天前开始使用SDL,因为我计划最终进入OpenGL,但最近研究了SFML,它显然更现代,更容易.我没有听到任何东西或看过SFML上的任何书籍,我听说有人说OpenGL + SDL非常好.将SFML与OpenGL一起使用也是如此吗?

opengl performance sdl sfml

1
推荐指数
1
解决办法
3753
查看次数

map迭代器擦除不调用适当的析构函数

gameObjects是一个std::map<sf::String,VisibleGameObject*>,results是一个std::map<sf::String,VisibleGameObject*>::iterator.当这运行:

return gameObjects.erase(results);
Run Code Online (Sandbox Code Playgroud)

我期望VisibleGameObject的析构函数运行,这是:

VisibleGameObject::~VisibleGameObject(){
    m_pSceneManager->removeSprite(name);
}
Run Code Online (Sandbox Code Playgroud)

永远不会运行,直到持有的类gameObjects被销毁,然后运行:

GameObjectManager::~GameObjectManager(){
    std::for_each(gameObjects.begin(),gameObjects.end(),GameObjectDeallocator());
}

struct GameObjectDeallocator{
        void operator()(const std::pair<sf::String,VisibleGameObject*>&p) const{
            delete p.second;
        }
    };
Run Code Online (Sandbox Code Playgroud)

然后它确实运行.为什么不在第一种情况下运行?

使用SFML 2.0

谢谢

c++ stdmap sfml

1
推荐指数
1
解决办法
6287
查看次数

使用MinGW编译SFML项目

好的,所以我有一个使用SFML的C ++项目,我希望能够使用MinGW从CMD进行编译。我有它,所以我可以编译comp.cpp,但是,我只需要知道我还要做些什么才能使其与SFML一起使用。我尝试使用CodeBlocks和MinGW对其进行编译,并且可以正常运行,直到尝试运行它为止,此时它告诉我计算机中缺少sfml-system.dll。这是否表示我安装不正确?据我所知,我一直遵循CodeBlocks的安装...我将include \ SFML放入MinGW的include \中,并将所有* .a都从lib \放入了MinGW的\ lib中。感谢您的帮助!

c++ mingw sfml

1
推荐指数
1
解决办法
1304
查看次数

SFML生成等距图块

我有一个精灵,一个正方形,仅用于正交投影.现在我想以一种非常基本的,简单的等距方式投影它.(我知道这可能不太漂亮,但我只是想弄清楚这一点)

鉴于我的方格,我将它旋转45度.现在,如果我理解正确,我仍然应该将我的身高除以2.这在SFML中是不可能的.有一个比例函数,但是如果我在y轴方向上以0.5的比例缩放,我的立方体就会被拉伸,而不是钻石形状.看起来SFML根据它自己的相对轴(在...之前旋转)来转换精灵.

既然你无法访问精灵的高度,我想知道这是否可能?

我可以在SFML中将方形精灵转换为菱形吗?

c++ graphics 2d sfml

1
推荐指数
1
解决办法
2874
查看次数

共享指针导致奇怪的行为

我在SFML 2.1中有以下代码

类ResourceManager:

shared_ptr<Sprite> ResourceManager::getSprite(string name) {
    shared_ptr<Texture> texture(new Texture);
    if(!texture->loadFromFile(resPath+spritesPath+name)) 
        throw new NotSuchFileException();
    shared_ptr<Sprite> sprite(new Sprite(*texture));
    return sprite;
}
Run Code Online (Sandbox Code Playgroud)

主要方法:(我将省略大部分不相关的代码

shared_ptr<Sprite> sprite = ResourceManager::getSprite("sprite.png");

...

while(renderWindow.isOpen()) 
    renderWindow.draw(*sprite);
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这使我的精灵渲染完全变白,但如果我这样做:

shared_ptr<Sprite> ResourceManager::getSprite(string name) {
    Texture* texture = new Texture; // <------- From shared pointer to pointer
    if(!texture->loadFromFile(resPath+spritesPath+name)) 
        throw new NotSuchFileException();
    shared_ptr<Sprite> sprite(new Sprite(*texture));
    return sprite;
}
Run Code Online (Sandbox Code Playgroud)

它完美地运作.

那么这里发生了什么?我假设共享指针只能用作指针.它会被删除吗?我的主要方法是保留对它的引用,所以我真的不明白这里发生了什么:S

编辑:我完全知道删除精灵不会删除纹理,这是产生我必须处理的内存泄漏,这就是为什么我试图在第一个地方使用智能指针...

c++ sfml

1
推荐指数
1
解决办法
360
查看次数

虚函数调用,parrent的函数使用

关于StackOverflow的第一个问题.我要为我糟糕的英语道歉.

我实际上正在为视频游戏开发一个菜单.我想清除代码,所以我想用vector来调用不同的函数(比如为图片充电或修改文本)

这是代码:

Menu.hh:

class Menu
{
int _position
std::vector<Menu> _graph;
std::list<sf::Text> _text;
public:
//constructors and destructors
virtual std::list<sf::Text> &modifyText();
}
Run Code Online (Sandbox Code Playgroud)

Menu.cpp

std::list<sf::Text> &modifyText()
{
std::cout << this->_position << std::endl;
this->_text = this->_graph[this->_position].modifyText();
return (this->_text); // don't care of the return
}

void Menu::initGame()
{
this->_graph.push_back(MenuBase()); 
// if i Put this code on the constructor, the constructor call himself and not the MenuBase constructor
this->modifyText();
}
Run Code Online (Sandbox Code Playgroud)

MenuBase.hpp

class MenuBase : public Menu
{
//constructor and destructor
std::list<sf::Text &modifyText(){std::cout << "work" …
Run Code Online (Sandbox Code Playgroud)

c++ virtual function sfml

1
推荐指数
1
解决办法
75
查看次数

配置CLion,Cmake和SFML的问题

我目前正在尝试配置我的Cmake文件以包含SFML库.我的CMakeLists.txt.如果重要的话,我正在使用OS X Yosemite.

cmake_minimum_required(VERSION 2.8.4)
project(SFMLTest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=lib++")

set(SOURCE_FILES main.cpp)
add_executable(SFMLTest ${SOURCE_FILES})

#Detect and add SFML
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/Users/Home/SFML-2.2-osx-clang-universal/cmake/Modules" ${CMAKE_MODULE_PATH})
find_package(SFML 2.2 REQUIRED system window graphics network audio)
if (SFML_FOUND)
    include_directories(${SFML_INCLUDE_DIR})
    target_link_libraries(${main.cpp} ${SFML_Libraries})
endif()
Run Code Online (Sandbox Code Playgroud)

而我目前得到的错误是

Error:By not providing "FindSFML.cmake" in CMAKE_MODULE_PATH this project has asked 
CMake to find a package configuration file provided by "SFML", but CMake did notfind one.
Could not find a package configuration file provided by "SFML" (requested version 2.2) 
with any of the following names: …
Run Code Online (Sandbox Code Playgroud)

cmake sfml clion

1
推荐指数
1
解决办法
4108
查看次数

SFML :: View倒y轴标准?如何解决它?

我使用右手坐标(x =右,y =向上)将我的物体放在世界空间中.

当我必须使用SFML渲染它们时,我遇到了问题,因为我无法在sf :: View中使用(y = up)矩阵设置View矩阵,然后全部渲染y-flipped.

我正在考虑的一个解决方案是在渲染之前在每个对象上翻转y轴:

ObjectTransformMatrix * MatrixScale(1.0f,-1.0f)
Run Code Online (Sandbox Code Playgroud)

但我想我必须将sf :: View中心移动到:

y = y - (view_size.y / 2.0)
Run Code Online (Sandbox Code Playgroud)

为什么sf :: View是y-inverted?我的解决方案是否正确

opengl graphics 2d viewport sfml

1
推荐指数
1
解决办法
1775
查看次数

std :: unique_ptr是否干扰了某些sf :: RenderWindow函数?

sf::RenderWindow::getPosition()0, 0当我从创建窗口的同一范围调用它时,总是返回而不是正确的位置.

以下是重现问题的示例代码:

#include <iostream>
#include <memory>
#include <SFML/Graphics.hpp>

int main() {
  std::unique_ptr<sf::RenderWindow> window_;

  window_ = std::unique_ptr<sf::RenderWindow>(
    new sf::RenderWindow(sf::VideoMode(800, 600), "asd", sf::Style::Default)
  );
  window_->setFramerateLimit(30);
  window_->setVerticalSyncEnabled(false);

  while (window_->isOpen()) {
    sf::Event evt;
    while (window_->pollEvent(evt)) {
      if (evt.type == sf::Event::Closed) { window_->close(); }
    }
    window_->clear();
    window_->display();
  }

  const sf::Vector2i wpos = window_->getPosition();
  std::cout << "window position: " << wpos.x << "/" << wpos.y <<std::endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是:我有一个MainMenu我传递的类sf::RenderWindow *(带window_.get()).

当我打电话window_->getPosition()MainMenu它报告正确的位置时,所以getPosition() …

c++ pointers smart-pointers unique-ptr sfml

1
推荐指数
1
解决办法
166
查看次数