Search…

Design Pattern: Object Pool

Phạm Đình TríPhạm Đình Trí
22/09/20202 min read
Object Pool là một mẫu thiết kế được sử dụng trong game khi có một đối tượng được sử dụng lại nhiều lần.

Việc khởi tạo và hủy đối tượng trong game là một việc gây tốn rất nhiều tài nguyên. Ví dụ như trong game bắn máy phải tạo hàng ngàn viên đạn trong thời gian ngắn. Sử dụng một mẫu thiết kế là Object Pool để giải quyết vấn đề này.

Object pool giúp cải thiện hiệu suất sử dụng bộ nhớ bằng việc sử dụng lại các đối tượng từ một pool cố định thay vì việc khởi tạo và hủy bỏ chúng.

Object Pool

Objects pool là một lớp dùng để lưu trữ lại các đối tượng. Khởi tạo tối đa số lượng đối tượng có thể được sử dụng và đưa vào pool, khi đối tượng được sử dụng xong không hủy nó mà sẽ đưa nó ra khỏi màn hình hiển thị hoặc ẩn đi. Object pool được sử dụng khi:

  • Cần tạo và hủy đối tượng liên tục.
  • Các đối tượng tương tự nhau.
  • Các đối tượng có thể tái sử dụng.

Hiện thực

Lớp Object Pool cơ bản gồm 2 phương thức: getObject, addObject.

Object Pool trong cocos2d-x v3 kế thừa từ Vector

#pragma once
#include "cocos2d.h"
USING_NS_CC;

template <class T>
class ObjectPool:public Vector<T>
{
private:
	int m_index;
public:
	ObjectPool<T>() : m_index(0)
	{		
	}

	T getObject()
	{
		T ObjIndex;
		if (m_index <this->size())
		{
			ObjIndex =this->at(m_index);
			m_index++;
		}
		else
		{
			ObjIndex = this->at(0);
			m_index = 1;
		}

		return ObjIndex;
	}

	void addObject(T obj)
	{
		this->pushBack(obj);
	}
};

Khởi tạo số lượng đối tượng đủ lớn bằng cách tăng biến m_index để đảm bảo việc lấy nhiều đối tượng chưa được sử dụng trong pool.

Sử dụng Object Pool

Khai báo:

ObjectPool<CatActor*> catActorPool;

Khởi tạo đối tượng:

for (int i = 0; i < 10; i++)
{
	CatActor* cat = CatActor::create();
	catActorPool.addObject(cat);
	addChild(cat);		
}

Khi cần dùng đối tượng:

CatActor* cat = catActorPool.getObject();
IO Stream

IO Stream Co., Ltd

developer@iostream.co
383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2025