gpt4 book ai didi

c++ - Cocos2D-X v3.0 Final 中的对象池 - 弃用 CCArray

转载 作者:行者123 更新时间:2023-11-30 04:04:41 28 4
gpt4 key购买 nike

在使用 cocos2d-X 寻找真正的随机性时,不需要过多的条件;感兴趣的算法利用 2 个 CCArray(s) 在两个不同的对象池上分配和组合函数。

我们为对象“leather”和“leatherSelection”创建了一个“pool”。我们用名为“SaddleManifold”的自定义类覆盖 CCSprite

/**

在 header 上,使用已弃用的 Cocos2D-x 定义了一个“皮革”类型的数组。

CCArray * _leather;
CCArray * _leatherSelection;

CCArray 的使用显然不适合新的cocos2D-x 库。我正在寻找使用引入 vector 的新 cocos2D-X V3 库重写代码的方法。

/** Destroyer **/
SaddleManifold::~SaddleManifold() { }

/**implementation class **/

_leather = CCArray::createWithCapacity(5);
_leather->retain();

//Attempt to overload

_leatherSelection = CCArray::createWithCapacity(4);
_leatherSelection->retain();

/** I get thrown an 'out-of-line' definition when building this signature **/
void SaddleManifold::initSaddleManifold(Saddle * saddle) {

.....}

现在,如果我尝试这样做:

/* Saddle is a Sprite! */

Saddle * saddle;

/*set boundaries*/
while (currentSaddletWidth < _minSaddleManifoldWidth) {

例如:马鞍从一系列皮革类型中随机选择;嵌入了宽度参数。以下是相关代码的摘录:

   saddle = (Saddle *) _leatherArray->objectAtIndex(_leatherArrayIndex);
_leatherArrayIndex+;

/**this does not run since it relies on that deprecated count()**/

if (_leatherArrayIndex == _leatherArray> count()) {
_leatherArrayIndex =0;
}

this->initSaddleManifold(saddle);

/** width assignment differential **/
currentSaddleWidth += saddle->getWidth();

_leatherSelection->addObject(obstacle);

从 CCArray 过渡到新替代方案的最佳方式是什么?运行时与使用 CCArray 有什么不同吗?

最佳答案

Cocos2d-x 带有一个新的 Vector 类,它取代了现已弃用的 CCArray。主要区别(与您的代码有关)是:

1) Vector 用作静态对象。您不需要声明指向它的指针:

class SpritesPool { 
....
protected:
cocos2d::Vector<cocos2d::Sprite*> _leather;
cocos2d::Vector<cocos2d::Sprite*> _leatherSelection;
};

SpritesPool::SpritesPool() : _leather(5), _leatherSelection(4) {}

2) Vector 类似于(并基于)一个普通的 std::vector 那么你就拥有了所有众所周知的 vector 函数:

saddle = (Saddle *) _leatherArray.at(_leatherArrayIndex); 
....
if (_leatherArrayIndex == _leatherArray.size()) {
_leatherArrayIndex =0;
}
...
_leatherSelection.pushBack(obstacle);

你还有一个从 vector 中随机选择对象的方法

saddle = (Saddle *) _leatherArray.getRandomObject(); 

这也许可以帮助您实现。

关于c++ - Cocos2D-X v3.0 Final 中的对象池 - 弃用 CCArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23646731/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com