c++ - 我将如何使用多个 getPositions 和多个 getScale
问题描述
我正在创建一个回合制 RPG,我正在将 SFML 用于窗口和 2d 图形,计划稍后将 OpenGL 用于 3d 图形。
我想知道,有没有办法以 getvector 格式组合不同的实体?例如,我有一个绿色矩形,现在是草,并试图为玩家使用垂直缩放的矩形。问题是,如果我有多个 vector2f get(enter vector here(positions, scale etc.)) 那么它会给我一个错误。我将如何结合这两个实体?
我尝试过像 &&、&= 这样的操作数。+= 等,但它们都不起作用。我也尝试在两个实体之间使用逗号,但无济于事
这是错误
main.cpp:35:18: error: redeclaration of ‘sf::Vector2f position’
35 | sf::Vector2f position = ground.getPosition();
| ^~~~~~~~
main.cpp:32:18: note: ‘sf::Vector2f position’ previously declared here
32 | sf::Vector2f position = player.getPosition();
| ^~~~~~~~
main.cpp:36:18: error: redeclaration of ‘sf::Vector2f scale’
36 | sf::Vector2f scale = ground.getScale();
| ^~~~~
main.cpp:33:18: note: ‘sf::Vector2f scale’ previously declared here
33 | sf::Vector2f scale = player.getScale();
| ^~~~~
这是代码
#include <SFML/Graphics.hpp>
int main()
{
sf::RectangleShape ground(sf::Vector2f(120.f, 50.f));
sf::RectangleShape player(sf::Vector2f(120.f, 50.0f));
// Manipulate `ground`.
// Manipulate `player`.
sf::Vector2f position = player.getPosition();
sf::Vector2f scale = player.getScale();
sf::Vector2f position = ground.getPosition();
sf::Vector2f scale = ground.getScale();
// Use `player` and `ground`.
}
知道我在 linux 上可能也很重要。ubuntu 如果这很重要。
解决方案
您的错误对我来说看起来很不言自明。你有两个声明position
和两个声明scale
。这与您的代码相同
int main()
{
int position = 1;
int position = 2; // ERROR!
int scale = 3;
int scale = 4; // ERROR!
}
这不起作用。如果您想“组合”值,则将它们组合起来,而不是尝试创建多个具有相同名称的变量。(鉴于您提到尝试使用+=
,我假设“组合”意味着“添加”。)
对于我的非 SFML、非向量示例,可以使用
int position = 1 + 2;
//^^^ ^^^^^^^^ ^^^^^
//type identifier expression
或者
int position = 1;
position += 2; // NOTE: Not declaring a new variable!
或(更长的形式)
int position = 1;
position = position + 2; // NOTE: Not declaring a new variable!
由类型名称后跟标识符=
和表达式组成的行定义了一个新变量,该变量被初始化为表达式的值。缺少类型名称的行使用现有变量并为其分配新值。允许重复使用现有变量;定义具有相同名称(和相同范围)的第二个变量不是。
相同的语法规则适用于其他类型,例如sf::Vector2f
. 由于 SFML 已经定义了适用的operator+
and operator +=
(赋值,而不是初始化),所以这里没有什么特别的。
sf::Vector2f position = player.getPosition() + ground.getPosition();
//^^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//type identifier expression
或者
sf::Vector2f position = player.getPosition();
position += ground.getPosition(); // NOTE: Not declaring a new variable!
或(更长的形式)
sf::Vector2f position = player.getPosition();
position = position + ground.getPosition(); // NOTE: Not declaring a new variable!