标签: sfml

SFML白窗

由于某些奇怪的原因,我的 SFML 程序不会呈现任何内容,直到我将鼠标悬停在它上面,或按下某个键或执行任何符合事件资格的操作。

我该如何解决?

c++ sfml

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

我需要多线程来完成这个项目吗?

目标平台: Windows XP高中计算机

需要的库: SFML,GLEW,ODE,Python(用于嵌入)

计划的功能让我相信我可能需要多线程:

  1. 多达一百个机器人全部实时解释python脚本.
  2. 所有机器人及其组件在物理模拟中与其环境相关.
  3. 在玩家周围的大部分中生成详细的环境.
  4. 游戏运行时可能需要将文件写入硬盘.
  5. (除了这些功能,目标平台让我担心)

我需要多线程来完成这个项目吗?

c++ python multithreading sfml ode-library

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

如何在cmake中为code :: blocks编译sfml 2.2

我对新的sfml有一个巨大的问题,并花了一天时间试图找出它.我终于发现我需要用cmake编译它.最大的问题是cmake一直要求CMakeLists.txt而不是那里.请帮帮我,我只想在sfml中开始编码.我正在运行Windows 8.1,如果您需要更多信息,请问我,我会尽力给您.如果我看错的问题,请你提出一个新的解决方案.

c++ cmake codeblocks sfml

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

从引用的Vector获取SEGFAULT

问题:

所以,我一直在撞墙挡在头上.我有一个在OSX和Linux上编译并运行良好的应用程序,但是当我使用MingW64在Windows上编译它时,我在运行时获得了一个SEGFAULT.所以这就是发生的事情;

我有一个包含的Map类std::vector<Tilesheet*> m_tilesheets.我通过引用构造函数将此变量传递给另一个类MapLayer:

    MapLayer::MapLayer(std::vector<unsigned int>& p_data,
                   std::vector<MindTrip::Graphics::TileSheet*>& p_tilesheets)
        : m_data(p_data),
          m_tilesheets(p_tilesheets)
{
    DrawTexture();
}
Run Code Online (Sandbox Code Playgroud)

矢量存储为MapLayerClass中的引用, std::vector<MindTrip::Graphics::TileSheet*>& m_tilesheets;

如果我在该构造函数的第一行放置断点,则m_tilesheets具有_M_First的定义值.如果我在构造函数的最后一行放置一个断点,则m_tilesheets不再具有_M_First的定义值.我没有进行多线程处理,并且应用程序还没有离开这些变量定义的范围.

在它的下一个函数中DrawTexture(),有一个foreach循环遍历m_tilesheets,它不断给我一个SEGFAULT:

void MapLayer::DrawTexture() {
    for(unsigned int tile_val: m_data)
    {
        // SEGFAULT ON THIS LINE
        for(MindTrip::Graphics::TileSheet* tileSheet : m_tilesheets)
        {

        }
    }
}`
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

我已经尝试将其转换为常规for循环,但仍然会遇到同样的问题.

我尝试使用引用通过将foreach循环转换为向量来抓取向量中的对象: for(auto& tileSheet : m_tilesheets).同样的问题

如果我将m_tilesheets移出MapLayer类及其构造函数并将其作为参数传递给DrawTexture作为参考:

MapLayer::DrawTexture(std::vector<MindTrip::Graphics::TileSheet*>& p_tilesheets)

M_data开始在其foreach循环中抛出段错误.这很奇怪,因为m_data的foreach循环实际上发生在m_tilesheet之前的行上:for(unsigned int tile_val: m_data)

所以,为了回应这个问题,我尝试将m_data移动到DrawTexture的参数并将其作为成员删除,就像我为m_tilesheets所做的那样,通过引用传递:

MapLayer::DrawTexture(std::vector<MindTrip::Graphics::TileSheet*>& p_tilesheets, std::vector<unsigned int>& p_data)

当我尝试这个时,我使用for循环而不是foreach.p_tiles表中应该有1个条目,p_data中应该有10000个条目.这次segfault抛出了我访问p_tilsheet数据的行,p_tilesheet[j]; j并没有超出范围并被设置为0.

尝试了所有这些之后,我将代码重置回原来的样本,而不是决定使用std :: copy()来复制向量中的数据,而不是使用类中的引用,我只是实例化了新的变量对于m_tilesheets和m_data.我将foreach切换回常规for循环,然后再次获得段错误访问m_tilesheets的元素[j].

我对你的记忆甚至发生了什么感到困惑.m_tilesheets和m_data在被访问时不为null,并且甚至在构造函数结束之前,它们的_M_First属性也会以某种方式取消设置.

再一次,只发生在Windows上.OSX和Linux工作正常.在我实现map类之前,应用程序在windows上正常运行.不只是寻找修复作为答案,而是发生错误的原因.

编辑:

这是Map的构造函数,我在这里定义这些值并将它们传递给MapLayer的新实例.

Map::Map(const char* …
Run Code Online (Sandbox Code Playgroud)

c++ vector segmentation-fault sfml

-2
推荐指数
1
解决办法
79
查看次数

双跳问题

我真是一言不发。我一直坐在电脑前,试图弄清为什么它不起作用。我试图使播放器无法在空中跳跃。但是由于某种原因,玩家仍然可以跳两次,与此同时,如果玩家尝试第三次或第四次跳跃等。它不会和我的代码工作。但是,为什么我仍然能够跳一跳?我不知道这一点。感谢所有帮助。

#include "pch.h"
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>

using namespace std;

int width = 800;
int height = 600;

int main()
{
    sf::RenderWindow window(sf::VideoMode(width, height), "In Development");
    window.setFramerateLimit(70);
    window.setVerticalSyncEnabled(true);

    sf::RectangleShape player;
    player.setSize(sf::Vector2f(50, 50));
    player.setFillColor(sf::Color::Cyan);
    player.setPosition(width / 2, 0);

    sf::Vector2f velocity(0, 0);
    float gravity = .1;

    bool jumping = true;

    sf::Event event;
    while (window.isOpen())
    {
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();

            if (event.type == sf::Event::KeyPressed)
            {
                if (event.key.code == sf::Keyboard::Space)
                {
                    if (jumping == false)
                    {
                        velocity.y = …
Run Code Online (Sandbox Code Playgroud)

c++ sfml

-2
推荐指数
1
解决办法
60
查看次数

为什么我不能在字符串中使用"%20"?

我使用了一个我在这个问题中找到的函数,适用于用"%20"替换所有空格(可能会更有效地完成!):

## Heading ##std::string Main::SpacesForWeb(std::string text) {
    for (std::string::iterator it = text.begin(); it != text.end(); ++it) {
        if (*it == ' ') {
            *it = '%20';
        }
    }
    return text;
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将它用于字符串时Local Live Test Server,输出是这样的:

在此输入图像描述

我的最后一个问题涉及string的问题,并发现stringtypedef编为指向内部CryString在游戏SDK类型我使用(Cryengine2引擎).我现在正在使用std::string以解决这个问题.

此问题也反映在我转换发生后使用的数据库中,并将数据发送到数据库:

在此输入图像描述

为什么我不能%20以这种方式使用(也许还有其他URL编码符号),我怎样才能使它工作?我试图对此进行一些研究以便自己解决这个问题,但是没有任何相关内容出现.

我已尝试使用*it = (char)"%20";原位*it = (char)"%20";,但是这实际上删除了0出现在字符串中而不是替换空格%20.

c++ string url-encoding sfml crysis

-3
推荐指数
2
解决办法
1159
查看次数

我无法访问基类的功能

目前,我正在学习c ++而且只是为了好玩,我想编写一个小型国际象棋游戏(当然没有AI).我使用visual studio社区,SFML 2.5作为渲染器和图形对象.我试图为所有数字制作一个名为"数字"的模型.所以我有一个继承自sfml sprite(一个drawable)和一个从该图继承的pawn类fe的figure类.Sf :: sprite - > figure-> pawn/queen/tower等...但由于某种原因,我不能将pawn用作精灵,例如,我无法使用windowRenderer的draw函数绘制它.但是函数文档说它需要一个可绘制的对象.我收到一条错误消息,上面写着:基类中无法访问的对话无效.我做错了什么或是不可能使用像这样的精灵.这是我的构造函数,因为我认为我最有可能在那里犯了一个错误.到目前为止我只用java编码所以分离到头文件和实现文件对我来说有点陌生,构造函数语法也不同.

figure.h:

class figure : sf::Sprite {
public:
    figure(int startPosition);
    void changeImage(std::string);
    void dissapear();
    void loadImage(std::string);
private:
    sf::Image img;
};


figure.cpp:

figure::figure(int startPosition):sf::Sprite(){

}


pawn.h:

class pawn :
    public figure
{
public:
    pawn(int startPosition);
    ~pawn();

private:
    void move(bool canBeat, bool isAsStart);
};


pawn.cpp:
pawn::pawn(int startPosition):figure (startPosition)
{

}


in main.cpp:

pawn pawn1(position);
sf::RenderWindow window(sf::VideoMode(sets.windowX, sets.windowY), "frame");
window.draw(pawn1);
Run Code Online (Sandbox Code Playgroud)

c++ inheritance sprite sfml

-4
推荐指数
1
解决办法
62
查看次数

找不到.NET错误的来源,需要帮助

我正在使用.NET Framework 2.0来编写一个2d平台游戏.我正在使用SFML .NET,因为它是跨平台并且由MONO支持并且具有成熟的API.我的问题是,虽然我的程序编译正确并且运行正常,但在关闭它时会出错.

"0x5ed0530e"处的指令引用"0x0000051c"处的存储器.内存无法"读取"

仔细调试后,我注意到在初始化SFML String2d类后出现问题.

怎么了; 关闭程序时为什么会出现此错误?即使没有任何问题,仍然可以停止接收错误,以便我的程序的用户不会被它烦恼?

使用系统; 使用SFML.Graphics; 使用SFML.Window;

namespace ProGUI
{
    class TextBox : Sprite
    {
        private String2D Text;
        public TextBox(RenderWindow App)
        {
            Image = new Image(App.Width, App.Height / 4, new Color(0, 0, 0));
            Position = new Vector2(0, App.Height - App.Height / 4);
        }

        public void SetText(string text)
        {
            Text = new String2D(text);
            Text.Font = new Font("Greyscale_Basic_Bold.ttf");
            Text.Position = new Vector2(Position.X + 5, Position.Y + 5);
            Text.Size = 12;
        }

        public string GetText()
        {
            return Text.Text; …
Run Code Online (Sandbox Code Playgroud)

.net c# 2d sfml

-6
推荐指数
1
解决办法
1105
查看次数