sfml 相关问题

SFML(简单快速多媒体库)是一种用C ++编写的便携且易于使用的多媒体API。您可以将其视为SDL的现代,面向对象的替代方案。 SFML由几个软件包组成,完全满足您的需求。您可以将SFML用作与OpenGL交互的最小窗口系统,或者作为用于构建游戏或交互式程序的全功能多媒体库。

Eclipse - SFML 库破坏了代码并且无法工作

在讨论这个问题之前,我会写下我对设置所做的所有操作: 从 SFML 官方网站下载 GCC 13.1.0 MinGW (DW2) - 32 位,并从同一网站下载其正确的编译器。 广告...

回答 0 投票 0

如何将三个正方形精灵变成一个立方体?

我想通过组合三个精灵来实现这种效果(其中两个通过剪切和缩放进行变换): sf::Transform createShearTransform(浮点剪切X,浮点剪切Y){ sf::特兰...

回答 1 投票 0

我在 Windows 上使用 C++ 中的 SFML,当我放大或缩小时,它不会单击鼠标下方的单元格

这是一个生命游戏,所以有一个方格网格。我这样做了,我们可以通过单击单元格(左键单击)在网格上绘图。另外(通过视图)您可以通过右键单击从一侧移动到另一侧并放大...

回答 1 投票 0

C++ 代码或我的文件管理出现问题

我是 C++ 新手,我不明白我的代码有什么问题。我正在为我的项目使用代码块,我什至不知道如何看到错误消息。所以我知道出了什么问题,但我不知道...

回答 1 投票 0

SFML 项目在本地编译,但在运行 CI 时崩溃 - 错误:“class sf::Rect<float>”没有名为“getPosition”的成员

我想为我的项目设置 GitLab CI,但收到错误“class sf::Rect”没有名为“getPosition”的成员。该代码在 manjaro 上编译。这是 ci 文件: 图片:海湾合作委员会 之前的脚本: -...

回答 1 投票 0

Multimap 不接受玩家输入的名字

我目前正在尝试使用多地图实现排行榜,让玩家输入他们的名字。 当我给它一个普通字符串但由于某种原因不接受播放器输入时它起作用......

回答 1 投票 0

SFML Flappy Bird 游戏中不会生成管道

我正在使用 SFML 开发 Flappy Bird 克隆,但无法正确渲染管道。鸟精灵渲染得很好,但管道没有显示在屏幕上。 我创造了...

回答 1 投票 0

如何在CMake sfml中链接FLAC?

我是cmake和sfml的新手,我想学习cpp游戏开发。 在我的 Linux 机器上我收到这个错误: [1/1] 链接 CXX 可执行文件 SFMLApp 失败:SFMLApp : && /usr/bin/c++ -g CMake...

回答 1 投票 0

collect2.exe:错误:ld 返回 1 退出状态

有一个带有 SFML 的简单 C++ 脚本。当我尝试编译它时,编译器出现一些错误。 请注意,代码编辑器中不会显示与脚本相关的错误。 脚本: #包括<...

回答 1 投票 0

显示一个白框而不是精灵(C++、SFML)

我最初将精灵纹理代码放在主cpp中并且它正在工作,我在将其迁移到玩家类后遇到了这个问题。 目前只有方向仍然是精灵,...

回答 1 投票 0

如何在SFML中查找矩形形状的坐标?

我想使用矩形在屏幕上绘制一条连续的线。我修改了矩形的厚度,所以它看起来像一条线,而不是矩形。现在,既然我...

回答 2 投票 0

如何将 SFML 库与 CMake 链接?

我正在尝试在 Ubuntu 上使用 SFML 库创建一个 C++ 项目(使用 VSCode,如果重要的话)。 过去,我曾经使用以下命令编译 SFML: g++ main.o -o sfml-app -lsfml-graphics -ls...

回答 2 投票 0

如何将 SFML 库链接到 cmake?

我正在尝试在 Ubuntu 上使用 sfml 库创建一个 C++ 项目(使用 vscode,如果有的话)。 过去,我曾经使用以下方法编译 sfml: g++ main.o -o sfml-app -lsfml-graphics -lsfml-win...

回答 1 投票 0

MouseMoved 事件后将 sf::Sprite 移动到新位置的问题

我正在使用 C++ 中的 SFML 开发国际象棋游戏,并且遇到了拖放精灵的问题。我实现了一个功能,允许玩家通过点击和拖动来移动棋子......

回答 1 投票 0

包含来自不同项目的标头时无法打开源文件 SFML/Graphics.hpp

这个项目就是一个游戏引擎。然而,对于这方面,我尝试添加一个使用 SFML 来显示图形的开发工具。我已成功链接 SFML 以使其正常工作...

回答 1 投票 0

从(整数到字符串)显示为点的文本的 SFML 转换

#包括 #包括 #包括 使用命名空间 std; 结构帕特拉{ 长双问候语; //大量的 sf::RectangleShape 形状; 长...

回答 1 投票 0

有人能找出 CHESS 的 sfml 代码有什么问题吗

抱歉写了糟糕的代码,我是 cpp 新手 所以问题是无论我做什么,精灵位置都不会改变。我无法弄清楚。 #包括\ #包括\ 抱歉写了糟糕的代码,我是 cpp 新手 所以问题是无论我做什么,精灵位置都没有改变。我无法弄清楚。 #include \<SFML/Graphics.hpp\> #include \<vector\> #include \<string\> #include\<iostream\> #include \<unistd.h\> int main() { // Create a window sf::RenderWindow window(sf::VideoMode(800, 800), "Chess by devtony"); sf::RectangleShape board\[8\]\[8\]; sf::Color blck(128,128,128); sf::Color wth(255,204,204); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { board[i][j].setPosition(i*100,j*100); board[i][j].setSize(sf::Vector2f(100, 100)); board[i][j].setFillColor((i + j) % 2 == 0 ? wth : blck); } } sf::Texture pieces\[4\]\[8\]; for (int i = 0; i \< 8; i++) { if (!pieces\[1\]\[i\].loadFromFile("assets/w_pawn.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } } //rooks for (int i = 0; i \< 8; i++) { if (!pieces\[2\]\[i\].loadFromFile("assets/b_pawn.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } } if (!pieces\[0\]\[0\].loadFromFile("assets/w_rook.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[0\]\[7\].loadFromFile("assets/w_rook.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[0\].loadFromFile("assets/b_rook.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[7\].loadFromFile("assets/b_rook.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } //bishop if (!pieces\[0\]\[2\].loadFromFile("assets/w_bishop.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[0\]\[5\].loadFromFile("assets/w_bishop.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[2\].loadFromFile("assets/b_bishop.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[5\].loadFromFile("assets/b_bishop.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } //horse if (!pieces\[0\]\[1\].loadFromFile("assets/w_knight.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[0\]\[6\].loadFromFile("assets/w_knight.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[1\].loadFromFile("assets/b_knight.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[6\].loadFromFile("assets/b_knight.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } //queen if (!pieces\[0\]\[4\].loadFromFile("assets/w_queen.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[0\]\[3\].loadFromFile("assets/w_king.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[3\].loadFromFile("assets/b_queen.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } if (!pieces\[3\]\[4\].loadFromFile("assets/b_king.png")) { std::cout \<\< "Error loading image!" \<\< std::endl; return EXIT_FAILURE; } //king // Create a sprite sf::Sprite sprites\[4\]\[8\]; for (int i = 0; i \< 4; i++) { for (int j = 0; j \< 8; j++) { sprites\[i\]\[j\].setTexture(pieces\[i\]\[j\]); sprites\[i\]\[j\].setScale(0.5,0.5); sprites\[i\]\[j\].setOrigin(50,50); } } // Flag to check if a piece is selected bool isPieceSelected = false; sf::Sprite\* selectedPiece = nullptr; sf::Vector2f clickOffset; // Main loop while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) { window.close(); } if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) { if (sprites[i][j].getGlobalBounds().contains(window.mapPixelToCoords(sf::Mouse::getPosition(window)))) { isPieceSelected = true; selectedPiece = &sprites[i][j]; clickOffset = window.mapPixelToCoords(sf::Mouse::getPosition(window)) - selectedPiece->getPosition(); break; } } if (isPieceSelected) break; } } else if (event.type == sf::Event::MouseMoved && isPieceSelected) { sf::Vector2f newPosition = window.mapPixelToCoords(sf::Mouse::getPosition(window)) - clickOffset; std::cout \<\< "New Position: " \<\< newPosition.x \<\< ", " \<\< newPosition.y \<\< std::endl; selectedPiece-\>setPosition(newPosition.x,newPosition.y); } else if (event.type == sf::Event::MouseButtonReleased && event.mouseButton.button == sf::Mouse::Left) { isPieceSelected = false; } } // Clear window window.clear(); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { window.draw(board[i][j]); } } for (int i = 0; i < 8; i++) { for (int j = 0; j < 4; j++) { if (j<2) { sprites[j][i].setPosition(sf::Vector2f(100*(i+1)-50,100*(j+1)-50)); }else{ sprites[j][i].setPosition(sf::Vector2f(100*(i+1)-50,100*(j+5)-50)); } } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) { window.draw(sprites[i][j]); } } // Draw the sprite // Display window contents window.display(); } return 0; } 我正在使用 C++ 中的 SFML 开发国际象棋游戏,并且遇到了拖放精灵的问题。我实现了一项功能,允许玩家通过在棋盘上单击并拖动棋子来移动棋子。然而,精灵并没有像预期那样随着鼠标拖动而移动。 单击时会正确检测到精灵,并且 isPieceSelected 标志设置为 true。计算 clickOffset 是为了保持相对于鼠标光标的正确位置。但是,当我尝试拖动精灵时,它不跟随鼠标。窗口已聚焦,并且没有设置可能影响响应能力的帧速率限制。 我尝试过使用 setPosition 和 move 方法来更新精灵的位置,但都没有解决问题。尽管没有错误,但精灵根本没有移动,并且程序编译成功。 您的问题是您在窗口循环的每次迭代中将棋子的位置设置在其起始位置。这发生在循环中: for (int i = 0; i < 8; i++) { for (int j = 0; j < 4; j++) { if (j < 2) { sprites[j][i].setPosition(sf::Vector2f(100 * (i + 1) - 50, 100 * (j + 1) - 50)); } else { sprites[j][i].setPosition(sf::Vector2f(100 * (i + 1) - 50, 100 * (j + 5) - 50)); } } } 这可以通过引入一个初始化函数来轻松解决,该函数接受精灵矩阵并仅设置其原始位置一次。 创建一个这样的函数: void setPiecesInStartingPosition(sf::Sprite(&sprites)[4][8]) 并将初始化代码移至函数中,即: for (int i = 0; i < 8; i++) { for (int j = 0; j < 4; j++) { if (j < 2) { sprites[j][i].setPosition(sf::Vector2f(100 * (i + 1) - 50, 100 * (j + 1) - 50)); } else { sprites[j][i].setPosition(sf::Vector2f(100 * (i + 1) - 50, 100 * (j + 5) - 50)); } } } 最后,确保只在开始 while 循环之前的某个地方调用它一次。也许在创建精灵矩阵之后立即是一个好主意。 另外,我建议删除break语句并将布尔检查移到for循环上方 for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) { if (sprites[i][j].getGlobalBounds().contains(window.mapPixelToCoords(sf::Mouse::getPosition(window)))) { isPieceSelected = true; selectedPiece = &sprites[i][j]; clickOffset = window.mapPixelToCoords(sf::Mouse::getPosition(window)) - selectedPiece->getPosition(); break; } } if (isPieceSelected) break; 所以像这样: if (!isPieceSelected) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 8; j++) { if (sprites[i][j].getGlobalBounds().contains(window.mapPixelToCoords(sf::Mouse::getPosition(window)))) { isPieceSelected = true; selectedPiece = &sprites[i][j]; clickOffset = window.mapPixelToCoords(sf::Mouse::getPosition(window)) - selectedPiece->getPosition(); break; } } } }

回答 1 投票 0

SFML 麻烦 if(font.loadFromFile(FONT_PATH)) -> 预期声明

sf::Font 字体 const std::string FONT_PATH = "$(SolutionDir) esources\Fonts\Oswald-Regular.ttf"; if (!font.loadFromFile(FONT_PATH)) 返回-1; ... if 语句有错误......

回答 1 投票 0

有没有办法配置 VS 代码以直接使用“运行代码”按钮使用 SFML 库?

我一直在尝试将 SFML 库与 Visual Studio Code 和 C/C++ v1.19.9 Microsoft 扩展一起使用。我的目标是配置 Visual Studio Code 以直接从

回答 1 投票 0

使用 SFML 绘制函数

我是 SFML 新手。我在 Google 上搜索,找到了一种从方程在 SFML 中绘制多个点的方法。例如,我想绘制 200 个点 (x,y),使得 y = 2x,范围为 (-10 < x < 10). ...

回答 2 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.