繁体   English   中英

我将如何使用多个 getPositions 和多个 getScale

[英]how would I use multiple getPositions and multiple getScale

我正在创建一个回合制 RPG,我将 SFML 用于 window 和 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+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!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM