Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przypisanie zmiennej nullptr do oryginalnej zmiennej

Ostatnio zmodyfikowano 2024-07-23 15:28
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
» 2024-07-22 19:52:05
Pokazuje, że currentInventory jest nullptr. Ale Furniture::inventory nie jest nullptr;

C/C++
transferItem( currentInventory->items[ bagCursor ], currentInventory, player->bag );
if( currentInventory == nullptr )
   
 cout << "empty";
P-181362
pekfos
» 2024-07-22 19:53:13
A co ma currentInventory do Furniture::inventory?
P-181363
tBane
Temat założony przez niniejszego użytkownika
» 2024-07-22 19:54:03
To, że currentInventory jest obecnie przetwarzanym Furniture::inventory
P-181364
pekfos
» 2024-07-22 19:59:41
Jest osobną zmienną i została wyzerowana. Nijak się to ma do Furniture::inventory. Jak to w kodzie wygląda?
P-181365
tBane
Temat założony przez niniejszego użytkownika
» 2024-07-22 20:03:00
Zaraz wrzucę jeszcze na githuba.

C/C++
class Furniture
    : public GameObject
{
public:
   
Texture * texture;
   
sf::Sprite sprite;
   
   
Inventory * inventory;
   
Texture * takeItTexture;
   
sf::Sprite takeItSprite; // draw a hand to take it
   
bool showHand;
   
// ...
};

Inventory * currentInventory;

void setInventoryPanel( Inventory * & i ) {
   
   
currentInventory = i;
}

void transferItem( Item * item, Inventory * & from, Inventory * & to ) {
   
from->removeItem( item->name );
   
   
if( from->items.size() < 1 ) {
       
delete from;
       
from = nullptr; // delete empty inventory
   
}
   
   
to->addItem( item );
}

// ...
// main

transferItem( currentInventory->items[ bagCursor ], currentInventory, player->bag );
P-181366
pekfos
» 2024-07-22 20:07:53
Tracisz informację, który ekwipunek obecnie przetwarzasz. Należałoby mieć wskaźnik na wskaźnik by wyzerować oryginalny wskaźnik.
C/C++
Inventory * * currentInventory;

void setInventoryPanel( Inventory * & i ) {
   
   
currentInventory = & i;
}
if( currentInventory && * currentInventory )
   
 transferItem( currentInventory->items[ bagCursor ], * currentInventory, player->bag );
Tylko... po co? Założenie że każdy istniejący ekwipunek jest niepusty wydaje mi się nie mieć żadnego sensu. Niech łapka jest wyświetlana dla niepustych ekwipunków, a nie wszystkich. Jak wspomniano wcześniej, wygląda to jakbyś chciał sobie zrobić wyciek pamięci. Jak dla mnie pole inventory nawet nie powinno być wskaźnikiem. Niech każdy mebel może mieć w sobie przedmioty i tyle.
P-181367
tBane
Temat założony przez niniejszego użytkownika
» 2024-07-22 20:19:33
Dobra, teraz to się tak wysypało, że chyba cały inventoryPanel od nowa napiszę xD

// edit
dobra opanowałem systuację. Kiedyś ten kod będę musiał poprawić, dziś już nie mam sił i widzę wszędzie gwiazdki przed oczami xD

https://github.com/tBane1995/2D-RPG.git
P-181368
tBane
Temat założony przez niniejszego użytkownika
» 2024-07-23 14:40:56
W sumie to masz rację, bo gdy używam wskaźników to nie mogę w prosty sposób kopiować zawartości inwentarza. Nawet o tym nie pomyślałem.
P-181369
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona