在 Cocos2d-x 中存储屏幕尺寸、原点和其他全局变量的有效方法?

Efficient way to store screen size, origin, and other global variables in Cocos2d-x?

我正在使用 Cocos2d-x V3.x

构建一个 2d 游戏

我想知道,存储屏幕尺寸变量、原点变量和其他可以在整个游戏过程中保持不变的最佳方法是什么?

例如:

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

我相信这些可以设置为全局变量。

最有效的方法是什么?

有争议的单例是不是最好的方式?

或者我应该让每个 .cpp 文件在每次创建场景时都有自己的 windowSize 变量吗?

有很多种实现方式,如果你想用一个变量在所有场景中使用,你可以按照下面的方式实现。

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

};

//cpp file
BaseScene::BaseScene() {

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

现在从 BaseScene class 扩展每个场景并直接使用变量 windowSizewindowOrigin

我只是创建了一个非常简单的头文件。

/*
* 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_ */

这只是一种方法。只需调用 Constanst.h,您将拥有静态全局变量

#include "Constants.h"

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