Autor Wątek: Cocos2dx v3 Dynamiczne tworzenie obiektow i ich usuwanie.  (Przeczytany 1816 razy)

Offline kokos22

  • Użytkownik

# Wrzesień 19, 2014, 12:09:50
Klasy, z których korzystam :
class GameScene :public BaseScene
{
public:

void Load();
void Unload();
void StartScene();
GameScene(GameState*);
~GameScene(void);

private:

Sprite * pBackground;
void CreateBackground();
void DestroyBackground();

void BackToMenu(cocos2d::Ref* pSender);


};

class BaseScene : public Layer
{
public:
BaseScene(GameState*);
virtual ~BaseScene(void);

virtual void Load()=0;
virtual void Unload()=0;
virtual void StartScene()=0;

protected :
GameState*state;

};
Jak w sposób dynamiczny tworzyć i usuwać obiekty tej klasy ?
operatorem new ? Dziedziczony layer ma własną funckje create, init.
Jak to później usunąć ?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kopacz

  • Użytkownik

# Wrzesień 19, 2014, 12:35:52
GameScene* obj = new GameScene(...); // zamiast ... wstaw wskaźnik na GameState
// tutaj jakiś kod
delete obj;

Możesz też zrobić tak:
BaseScene* obj = new GameScene(...); // zamiast ... wstaw wskaźnik na GameState
// tutaj jakiś kod
delete obj;

Inna kwestia to te metody create i init z klasy Layer. Init - albo będziesz wywoływał już na stworzonym obiekcie, albo w konstruktorze, create tak samo - cholera wie co dokładnie robią. Masz dostęp do tej klasy Layer? Niewykluczone, że Layer nie ma publicznego konstruktora i stąd te create.

Offline kokos22

  • Użytkownik

# Wrzesień 19, 2014, 16:13:00
http://www.cocos2d-x.org/reference/native-cpp/V2.2/d9/d66/classcocos2d_1_1_c_c_layer.html
Wszystko teoretycznie działa ale przy usuwaniu, jak zauważyłem nie zmniejsza się zajmowany ram. Do tego program kończy się kodem 1 (0x1)

Offline kornfan

  • Użytkownik

# Wrzesień 19, 2014, 22:10:35
http://cocos2d-x.org/wiki/How_To_Subclass_Sprite_And_Add_Event_Listeners

Tu masz pokazane jak powinno się tworzyć obiekty w cocosie. Create ma w sobie klasyczny konstruktor, ale też funkcję init() z klasy nadrzędnej (lub Twojej jeśli ją przeciążysz) oraz autorelease() żeby AutoreleasePool mógł obiekt sam usunąć w odpowiednim momencie. Wszystkie obiekty z cocosa oraz te które po nich dziedziczą muszą być dodane przez addChild().