#pragma once
#include "cocos2d.h"
#include "Food.h"
USING_NS_CC;
class PoolFood : public Object
{
public:
PoolFood(void);
~PoolFood(void);
virtual bool init();
CREATE_FUNC(PoolFood);
public:
/** 回收对象*/
void rebackFood(Food* food);
/** 从回收池中获取对象*/
Food* getFood();
private:
/** 创建对象*/
Food* createFood();
/** 重置对象*/
void reset(Food* food);
private:
Array* list;
static const int MAX_FOOD_COUNT = 200;
static const int MIN_FOOD_COUNT = 50;
};
#include "PoolFood.h"
PoolFood::PoolFood(void) : list(Array::create())
{
list->retain();
}
PoolFood::~PoolFood(void)
{
list->release();
}
bool PoolFood::init()
{
//预先创建制定个数对象
for (int i = 0; i < MIN_FOOD_COUNT; i++)
{
list->addObject(createFood());
}
return true;
}
/** 回收对象*/
void PoolFood::rebackFood(Food* food)
{
if (list->count() > MAX_FOOD_COUNT)
{
return;
}
list->addObject(food);
log("reback an food to pool list count is: %d",list->count());
}
/** 从回收池中获取对象*/
Food* PoolFood::getFood()
{
if (list->count() == 0)
{
list->addObject(createFood());
}
Food* food = (Food*)list->getLastObject();
food->retain();
list->removeObject(food);
log("used an food from pool");
return food;
}
/** 创建对象*/
Food* PoolFood::createFood()
{
return Food::create();
}
/** 重置对象*/
void PoolFood::reset(Food* food)
{
Size winSize = Director::getInstance()->getWinSize();
food->setPositionX(winSize.width + food->getContentSize().width * 2);
}