簡體   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