标签: sfml

SFML 2.0 循环相同的精灵

我正在使用 SFML 2.0 将入侵者精灵列表绘制到我的游戏中。目前,我必须不断复制并粘贴我的代码才能在以下位置绘制更多精灵:

//load the invaders images
sf::Texture invaders;
sf::Texture invaders2;
sf::Texture invaders3;
sf::Texture invaders4;
sf::Texture invaders5;
sf::Texture invaders6;
invaders.loadFromFile("images/invaders.png");
invaders2.loadFromFile("images/invaders.png");
invaders3.loadFromFile("images/invaders.png");
invaders4.loadFromFile("images/invaders.png");
invaders5.loadFromFile("images/invaders.png");
invaders6.loadFromFile("images/invaders.png");

//Sprites
sf::Sprite invadersSprite(invaders);
sf::Sprite invadersSprite2(invaders2);
sf::Sprite invadersSprite3(invaders3);
sf::Sprite invadersSprite4(invaders4);
sf::Sprite invadersSprite5(invaders5);
sf::Sprite invadersSprite6(invaders6);

invadersSprite2.setPosition(30,NULL);
invadersSprite3.setPosition(60,NULL);
invadersSprite4.setPosition(90,NULL);
invadersSprite5.setPosition(120,NULL);
invadersSprite6.setPosition(150,NULL);

if(Clock.getElapsedTime().asSeconds()>REFRESH_RATE)
        {

            //carry out updating tasks
            static float spriteTimer=0.0;  //keep track of sprite time
            spriteTimer+=Clock.getElapsedTime().asSeconds();

            static int count=0; //keep track of where the sub rect is
            if(spriteTimer>delay)
            {
                invadersSprite.setTextureRect(area);
                invadersSprite2.setTextureRect(area);
                invadersSprite3.setTextureRect(area);
                invadersSprite4.setTextureRect(area);
                invadersSprite5.setTextureRect(area);
                invadersSprite6.setTextureRect(area);
                ++count;
                invadersSprite.move(xVelocity, …
Run Code Online (Sandbox Code Playgroud)

c++ sfml

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

将视图坐标转换为窗口坐标 SFML

我有一个使用 SFML 编写的应用程序,其顶部有一个菜单栏,还有一个小框,可以让您在其下方移动内容。我需要将框中使用的视图中的坐标转换为窗口坐标,以便我可以检查它们是否在框内。我知道 Convertcoords 将窗口坐标转换为视图坐标,但是有没有办法反向执行此操作?

c++ window view sfml

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

为什么复制我的静态变量的新变量会更改我的静态变量?

class Graphics

    public static Image[] ImageArray = new Image[16];
Run Code Online (Sandbox Code Playgroud)

而在不同的班级里,

        //Copy original Array
        tempArray = Graphics.ImageArray;
Run Code Online (Sandbox Code Playgroud)

我正在尝试制作tempArray静态变量的精确副本,它永远不会改变,但tempArray需要改变。它似乎不是复制静态变量,而是向其中添加另一个变量名。

因为如果我改变了tempArray,就好像我改变了一样ImageArray。如何ImageArray通过制作tempArray非静态副本来简单地复制?

c# static sfml

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

C++ 中不熟悉的符号 [=]

当我遇到一行我从未见过的代码时,我正在使用 SFML 开发一个游戏,并且正在阅读一些教程。完整内容在SFML 游戏开发,但特定符号是 [=],这里是代码的简化形式。

template <typename data_type, typename Function>
std::function<void(data_type1&)> foo(Function x)
{
    return [=] (data_type1 y)
    {
        DoSomething(y);
    };
}
Run Code Online (Sandbox Code Playgroud)

我想我明白了代码的意思,但是等号周围的括号有什么意义?我没有在任何网站上找到提及它,除非我只是使用了糟糕的搜索词。

c++ templates sfml

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

使字符在屏幕中移动时,window.clear() 如何在 SFML 中工作?

嗯,我一直在看一个关于如何使用 SFML 的教程。我目前正在学习在屏幕上移动精灵。添加 window.clear() 之前;每次我移动精灵时,它都会像一条轨迹一样离开,就像精灵是刷子一样。然后教程人说在 window.draw(player); 之前添加 window.clear

你能解释一下这背后的逻辑吗?就像,窗口被清除,然后绘制角色并显示它。这是代码:

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

int main() {
    sf::RenderWindow window(sf::VideoMode(1920, 1080), "Screen", sf::Style::Default);
    sf::RectangleShape player(sf::Vector2f(100.0f, 100.0f));
    player.setFillColor(sf::Color::Green);

    //run as long as the window is open
    while (window.isOpen()) {
        // check all the window's events that were triggered since the last iteration of the loop
        sf::Event evnt;
        while (window.pollEvent(evnt)) {
            switch (evnt.type) {
            case sf::Event::Closed:
                window.close();
                break;
            case sf::Event::Resized:
                printf("New window width: %i New window height: %i\n", evnt.size.width, evnt.size.height);
                break;
            case sf::Event::TextEntered:
                if …
Run Code Online (Sandbox Code Playgroud)

c++ logic sfml

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

调试时 Visual Studio 跳过(和移动)断点 (C++/CMake)

我有一个在 Ubuntu 上创建的 CMake 项目,我现在正在 Visual Studio 上加载它(用于双引导开发)。

该项目可以在这里看到:http : //github.com/KiloMikeCodesStuff/Gravity

下图显示了问题: 图片

注意左边我是如何清楚地在第 5 行设置断点的。当我运行它时,断点移动并在第 8 行停止。

我试过了:

  • 打扫
  • 重建
  • 重命名变量

在所有情况下,结果都是一样的。我在想可能有一些代码优化(因为我选择为 x64 版本构建,因为这些是我为 SFML 拥有的唯一 DLL)。

这会是罪魁祸首吗?如果是这样,我如何禁用优化(记住它是一个 CMake 项目,而不是一个典型的 VS 项目)?

c++ debugging breakpoints cmake sfml

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

SFML 像素操作 - 更改窗口中单个字符的大小

有什么方法可以更改窗口中单个像素的大小,因为我宁愿处理 8x8 像素而不是 1x1 的单个控制台字符。

c++ sfml

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

SFML 窗口大小调整非常难看

当我调整 sfml 窗口的大小时,当我剪切调整大小以使其更小并调整大小以使其更大时,它会给您带来非常奇怪的效果。 剪出一个绿色圆圈 一束“激光束”从绿色圆圈中射出

如何使调整大小更漂亮?该代码来自 code::blocks 的安装教程。代码(与sfml网站上code::blocks安装教程中的代码相同):

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

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

        window.clear();
        window.draw(shape);
        window.display();
    }

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

c++ sfml

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

使用 SFML 的 C++ 中基于迭代器的循环和基于索引的循环之间存在显着的性能差异

我正在使用 C++ 中的 SFML 开发一个简单的 2D 网格可视化游戏引擎。我有一个带有 std::vector<sf::Vertex> 的 Grid 类,其中网格中的每个单元格由 6 个顶点表示。当我根据每个单元格的状态更新其颜色时,我观察到两个循环之间存在巨大的性能差异:一个循环使用向量的迭代器,另一个循环使用基于索引的方法。

这是差异所在:

inline void ChangeCellColor(Cell& cell, sf::Color color)
{
    // index-based loop
    auto index = cell.grid_y * width_ + cell.grid_x;
    for (int i = 0; i < 6; ++i)
    {
        vertices_[index * 6 + i].color = color;
    }

    // iterator-based loop (commented out for now)
    /*
    auto index = cell.grid_y * width_ + cell.grid_x;
    for (auto it = vertices_.begin() + index * 6; it != vertices_.begin() + index …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector sfml c++17

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

虽然循环混乱

题:

我的while循环没有退出.在调试期间,它非常明确地说stateID等于3.但是,当我添加时,无论调试器告诉我什么,总是std::cout << stateID;将值1写入控制台.

在代码中,我在输入循环渲染屏幕.这表明毫无疑问,输入循环正如预期的那样正确退出.此外,如果这还不够,则必须退出以使stateID首先更改.请不要再讨论嵌套循环了.而且我在循环之后也使用了断点,这些断点被正确击中.

码:

int main()
{

    stateID = 1;

    GameState* state = new GameStateTitle();

    sf::RenderWindow window(sf::VideoMode(1000, 600), "RPG");

    //GAME LOOP//
    while (stateID != 3)
    {//INPUT//
    sf::Event event;
    while (window.pollEvent(event))
    {
        switch (event.type)
        {
        //Window closed
        case sf::Event::Closed:
            set_next_state(3);
            break;
        }
    }

        change_state(state);

    //RENDERING//
    window.clear(sf::Color::Black);

    state->render(window);

    window.display();
    }
    /////////////

    window.close();

    return 0;
}

void set_next_state(int new_state)
{
    //Set the next state to take place
    next_state = new_state;
}

void change_state(GameState …
Run Code Online (Sandbox Code Playgroud)

c++ while-loop sfml

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

标签 统计

sfml ×10

c++ ×9

breakpoints ×1

c# ×1

c++17 ×1

cmake ×1

debugging ×1

logic ×1

static ×1

stdvector ×1

templates ×1

view ×1

while-loop ×1

window ×1