2016-07-02 3 views
0

Ich baue ein 2D-Spiel mit Cocos2d-x V3.xEffiziente Möglichkeit, Bildschirmgröße, Ursprung und andere globale Variablen in Cocos2d-x zu speichern?

Ich frage mich, was die beste Methode wäre, um die Bildschirmgröße variabel, Herkunft Variable und andere zu speichern, die während des ganzen Spiels konstant bleiben können?

Zum Beispiel:

Size windowSize = Director::getInstance()->getVisibleSize(); 
Vec2 windowOrigin = Director::getInstance()->getVisibleOrigin(); 

Ich glaube, diese als globale Variablen gesetzt werden können.

Was wäre der effizienteste Weg, dies zu tun?

Ist der umstrittene Singleton der beste Weg?

Oder soll ich einfach jede .cpp-Datei jedes Mal, wenn die Szene erstellt wird, eigene windowSize-Variablen haben?

Antwort

1

Es gibt viele Möglichkeiten, es zu tun, wenn Sie eine Variable verwenden möchten, um in allen Szenen zu verwenden, können Sie es folgendermaßen tun.

//in header 
class BaseScene : public Scene 
{ 
protected: 
    Size windowSize; 
    Vec2 windowOrigin; 

}; 

//cpp file 
BaseScene::BaseScene() { 

    windowSize = Director::getInstance()->getVisibleSize(); 
    windowOrigin = Director::getInstance()->getVisibleOrigin(); 
} 

Jetzt jede Szene aus BaseScene Klasse erweitern und direkt verwenden variable windowSize und windowOrigin

1

ich eine sehr einfache Header-Datei nur erstellen.

/* 
* Constants.h 
* 
* Created on: Jul 2, 2016 
*  Author: OscarLeif 
*/ 

#ifndef CONSTANTS_H_ 
#define CONSTANTS_H_ 

#include "cocos2d.h" 
#include "ui/CocosGUI.h" 

#define CENTER_VECTOR Vec2(Director::getInstance()->getWinSize().width*0.5f,Director::getInstance()->getWinSize().height*0.5f) 
#define WIN_SIZE Director::getInstance()->getWinSize() 

USING_NS_CC; 
using namespace ui; 

class Constants 
{ 
public: 
    Constants(); 
    virtual ~Constants(); 
}; 

#endif /* CONSTANTS_H_ */ 

Dies ist nur eine Möglichkeit, dies zu tun. Rufen Sie einfach Constanst.h und Sie werden statische globale Variablen haben

#include "Constants.h" 

bool BaseScene::init() 
{ 
    if(!Layer::init()) 
    return false; 
    //Some Sprite that you have already created 
    sprite->setPosition(CENTER_VECTOR);// 
} 
Verwandte Themen