ПрограммированиеФорумОбщее

Как передать значение переменной из одной сцены в другую

#0
18:56, 22 мая 2013

Есть сцена MainScene и сцена GameOverScene. Нужно передать переменную points из первой во-вторую, как это сделать подскажите. Заранее спасибо!

#1
19:24, 22 мая 2013

PlayaRC
> Есть сцена MainScene и сцена GameOverScene. Нужно передать переменную points из
> первой во-вторую, как это сделать подскажите. Заранее спасибо!
Сделать в движке глобальный пул переменных, доступный любой сцене.

#2
19:41, 22 мая 2013

Imaginary unit
> Сделать в движке глобальный пул переменных, доступный любой сцене.

А как это сделать не подскажите?

#3
19:55, 22 мая 2013

MDS
> Создай класс, какой-нибудь метод, который будет добавлять объекты.
> Допустим типа
> SetVar("My_Var1", "2"). Храни в виде строк. Так ты сможешь получить доступ к
> твоей переменной GetVar("My_Var1").

то есть примерно так:

class data
{
  data();
  ~data();

  string var;
  int num;

  void setvar(string, string);
  void getvar(string)
};

реализация:

void data::setvar(myvar, num);
{
  data::var = myvar;
  data::num = num;
}

так? если нет, то киньте реализацию setvar в общих чертах, пожалуйста

#4
4:54, 23 мая 2013

PlayaRC
> Есть сцена MainScene и сцена GameOverScene. Нужно передать переменную points из
> первой во-вторую, как это сделать подскажите. Заранее спасибо!

Все сцены наследуются от общего предка, который содержит внутри себя общий для всех функционал.

Например, он может содержать статическую protected переменную points. Статическая переменная будет создана в единственном экземпляре и доступна всем потомкам базового класса:

struct BaseScene
{
protected:
    static int points;
};
int BaseScene::points = 0;

struct MainScene : BaseScene
{
   void Work() { ++points; }
};

struct GameOverScene: BaseScene
{
   void Work() { ++points; }
};

Базовый класс сцен может содержать приватные общие данные, и обладать методами доступа к этим данным. Потомки через эти методы смогут получать/модифицировать эти данные.

Так же, через базовый класс можно организовать систему сообщений между потомками:

struct BaseScene
{
    struct Message_Points { int poits; };
    virtual ReadMessage(const Message_Points& msg){};

    BaseScene() { sub.push_buck(this); } 

    static std::vector<BaseScene*> sub;

    void SendMessage(const Message_Points & msg)
   { 
       const size_t size = sub.size();
        for(size_t n=0;n<size;++n)  sub[n]->ReadMessage(msg);
   }
};
int BaseScene::points = 0;

struct MainScene : BaseScene
{
   virtual ReadMessage(const Message_Points& msg) { std::cout<<"пришли данные о points: "<<msg.points<<std::endl; }
};

struct GameOverScene: BaseScene
{
   void Work() 
   {
       Message_Points msg = { 10 };
       SendMessage(msg); 
   }
};

...

MainScene ms;
GameOverScene gos; gos.Work(); //излучает по системе сообщений сообщение         Message_Points msg = { 10 };

//сообщение поймает и обработает объект ms
#5
11:22, 23 мая 2013

оверинженеринг во всей красе...
95% случаев с успехом удовлетворит один инстанс такой структуры
struct Stats
{
  int points;
  int enemyKiled;
  int headshots;
};
на все остальные советы не обращай внимания, это код ради кода.

ПрограммированиеФорумОбщее

Тема в архиве.