Czy trzymać sf::RectangleShape w pamięci oraz inteligentne wskaźniki
Ostatnio zmodyfikowano dzisiaj: 9h » 17 min
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-28 22:24:53 No bo dopiero co zaczynam przygodę z inteligentnymi wskaźnikami. Cały czas pracowałem z surowymi i było ok. I pojawiłeś się Ty :D i teraz mój światopogląd obrócił się o 180 stopni i nie rozumiem :D Dam przykład: -mamy grę i zbiór potworów. Każdy z potworów jest obiektem i ma wskaźnik na sprajt. Ten wskaźnik to wskaźnik inteligentny. Teraz chcemy zebrać wszystkie sprajty potworów do renderowania to zbieramy je w std::vector<Monster*> monsters i możemy przetwarzać potworki? for( auto & monster: monsters ) { window.draw( monster->sprajt.sprite ); }
|
|
pekfos |
» 2025-10-28 22:30:09 Sam się kręcisz w kółko od tego obracania o 180 co chwila. Wskaźniki inteligentne to narzędzia które nie zastąpią zwykłego wskaźnika w 100% i nie mają tego robić. Nie bez powodu masz 3 rodzaje w bibliotece standardowej. One mają ułatwić życie w konkretnych zastosowaniach. Jeżeli masz do czynienia z takim zastosowaniem, powinieneś z nich skorzystać, bo zwyczajnie łatwiej napisać kod który jest poprawny i bez wycieków pamięci. Możesz też pisać wszystko ręcznie zwykłymi wskaźnikami, ale napisanie kodu poprawnie wymaga uwzględnienia różnych niuansów - patrz przykład który podałem, w którym jest możliwy wyciek pamięci mimo wykonania delete w destruktorze. Teraz chcemy zebrać wszystkie sprajty potworów do renderowania do zbieramy je w std::vector<Monster*> monsters? Skoro chcesz zebrać sprajty, to powinny to chyba być wskaźniki na sprajty. Czy nie? |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-28 22:37:51 Masz rację. Tu też zastąpić surowe wskaźniki inteligentnymi ? class Dialog_Load_SpriteSheet : public Dialog { public: sf::Image spriteSheet; Animation * _animation; sf::Texture _frameTexture; sf::Time _lastFrameTime; TextInput * _widthOfFrame; TextInput * _heightOfFrame; TextInput * _animationsCount; TextInput * _frameCount; sf::Text * _widthOfFrameText; sf::Text * _heightOfFrameText; sf::Text * _animationsCountText; sf::Text * _frameCountText; sf::RectangleShape _rect; ColoredButtonWithText * _confirmBtn; ColoredButtonWithText * _cancelBtn; };
|
|
pekfos |
» 2025-10-28 22:43:10 Zależy jak są używane. Jeżeli wskazują na obiekty, których czas życia jest zarządzany przez klasę Dialog_Load_SpriteSheet, możesz je zmienić na inteligentne. Wtedy część tego zarządzania (zwalnianie) będzie robić wskaźnik inteligentny. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-28 22:45:34 Czyli jakoś tak ... class Dialog_Load_SpriteSheet : public Dialog { public: sf::Image spriteSheet; Animation * _animation; sf::Texture _frameTexture; sf::Time _lastFrameTime; std::unique_ptr < TextInput > _widthOfFrame; std::unique_ptr < TextInput > _heightOfFrame; std::unique_ptr < TextInput > _animationsCount; std::unique_ptr < TextInput > _frameCount; std::unique_ptr < sf::Text > _widthOfFrameText; std::unique_ptr < sf::Text > _heightOfFrameText; std::unique_ptr < sf::Text > _animationsCountText; std::unique_ptr < sf::Text > _frameCountText; sf::RectangleShape _rect; std::unique_ptr < ColoredButtonWithText > _confirmBtn; std::unique_ptr < ColoredButtonWithText > _cancelBtn; };
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-28 22:50:22 Tyle zmian, aż dziwne, że się w tym jeszcze nie pogubiłem i program działa. Widać na prawdę słaby kod pisałem :-/ Z dwa dni to jeszcze będę poprawiał :D |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-29 00:15:00 Poczytałem i znalazłem jeszcze std::shared_ptr
Może przydać się do tego pola do scrollowania |
|
| 1 2 3 4 « 5 » |