Skip to main content

Object pooling in game using a small coding example c++

When its comes to gaming either you are using unity or cocos2dx or unreal or godot or any other engine you need a object pool specially when you dealing with mobile and low hardware device because they have memory constraint. lets take a example of endless game where there is 100 of types of object that moves from either left to right or in 3d far to close using camera so one idea is that you can create graphic at runtime and remove its when its out of the screen but every time a new graphic created a new memory allocation happen and creating two many graphics at runtime can reduce frame rate and increase memory usage,

so its deal with it

1. create a object pool for example a c++ example

where bullet class and boom class can used same pool class and we can create two separate pool and each pool can hold 100 bombs and 100 bullet so when bomb or bullet out of the screen we can send it back to the pool.

2. so you are holding 200 instance at the same time and when they are not in use send them back to the pool and when they are in use get them from the pool so no new instance would be created,


#include <iostream>
#include <vector>
#include <list>
#include <queue>
#include <deque>
#include <algorithm>
#include <functional>

using namespace std;

//bullet class is a simple class which store bullet and its properties
class Bullet
{
private:
    string name;
public:
    Bullet(){};
    ~Bullet(){};
    string getName()
    {
        return  name;
    };
    void setName(string __name)
    {
        name=__name;
    }
};


//boob class stores boomb and its properties
class Boomb
{
private:
    string name;
public:
    Boomb(){};
    ~Boomb(){};
    string getName()
    {
        return  name;
    };
    void setName(string __name)
    {
        name=__name;
    }
};

//pool manager holds all pool items
template<class T>
class PoolManager
{
    private:
        deque<T*> poolQueue;
    public:
        //create a pool
        PoolManager(int size,string name)
        {
            for(int i=0;i!=size;i++)
            {
                T *t=new T();
                t->setName(name+to_string(i));
                poolQueue.push_back(t);
            }
        }
        ~PoolManager(){
            cout<<"pool is destroyed"<<endl;
        };
        deque<T*> getPoolItems()
        {
            return poolQueue;
        }
        //get items from the front of the pool
        vector<T*> getItemsFromFront(int size)
        {
            if( size>poolQueue.size() ) {
                throw "think again";
            }
            vector<T*> newItems;
            for(int i=0;i<=size;i++)
            {
                
                newItems.push_back(poolQueue.front());
                poolQueue.pop_front();
            }
            return  newItems;
        }
        //get items from the back
        vector<T*> getItemsFromBack(int size)
        {
            if( size>poolQueue.size() ) {
                throw "think again";
            }
            vector<T*> newItems;
            for(int i=0;i<=size;i++)
            {
                
                newItems.push_back(poolQueue.back());
                poolQueue.pop_back();
            }
            return  newItems;
        }
        //get pool size
        int poolSize()
        {
            return  poolQueue.size();
        }
        //get back to pool form backwards
        void backToPool(T *item)
        {
            poolQueue.push_back(item);
        }
        //get back to pool from front
        void frontToPool(T *item)
        {
             poolQueue.push_front(item);
        }
        
};


Comments

Popular posts from this blog

Creating a word Scramble game where you can drag and drop the word and create a complete word. (drag and drop word Scramble game).

Creating a word game using  phaser game engine which is a javascript based gaming engine  where u can drag and drop world like Word Scramble Game and complete a given word. your index.html file look like below < html > < head > < script src = "src/phaser.min.js" ></ script > < script src = "src/wordGame.js" ></ script > < script src = "src/main.js" ></ script > </ head > < body > </ body > </ html > 1.    <script src="src/phaser.min.js"></script> required to run the  phaser game engine. 2. rest of the two files deals with game logics      <script src="src/wordGame.js"></script>       <script src="src/main.js"></script> you can download whole project from https://github.com/manishchauhan/wordgame/tree/master just copy and paste the project in your local server and run ...

starting with three.js and react with a very simple example

 1. three.js is undoubtedly the best library to create interactive content for the web in 3d. link https://threejs.org/ a working sample of three with react can be found below https://stackblitz.com/edit/react-7n5qf9?file=src%2FApp.js why choose threejs 1. lightweight  2.fast 3.big community  https://discourse.threejs.org/ 4. even you can use unity or unreal to publish html5 content but i don't think that would be acceptable in many cases. 5. open-source project. i created a running sample with React  https://stackblitz.com/edit/react-7n5qf9?file=src%2FApp.js

A simple binary search tree with generic approach tree can store any type of data. (DFS and BFS)

 1. a binary search tree in c++ using a generic approach with both BFS and DFS approach    working tree    https://www.onlinegdb.com/edit/HkuQLdA-w code=> some properties of binary search tree-> 1. binary search tree is not always a balanced tree.  2. Inorder, traversing gives you sorted data.  3.  best is o(log n) and worst is O(n).  4. left node data is always less than root data and right node data always be greater than root data.  5. red-black tree STL map is a balanced binary search tree. *******************************************************************************/ #include <stdio.h> #include<iostream> #include<queue> using namespace std; template < typename T > class Node {   //can store any type of data private:   //genric data or store any type of data   T data;   //reference of left pointer   Node *left = nullptr;   //reference of right pointer   Node *rig...