对象池

#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);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值