SFML community forums

Help => General => Topic started by: JohnB on March 25, 2012, 04:57:11 am

Title: [Help] Creating a Map
Post by: JohnB on March 25, 2012, 04:57:11 am
I have a class called Block and a bunch of other classes extend this class. I have a problem however... I want to store all the blocks into an array. However, I am having a problem. The plan is to have the max number of blocks in the game 256 width 512 height. I want to efficiently store these into an array or any method to hold them.


Should I make a list of addresses pointing to them or what?
Title: Re: [Help] Creating a Map
Post by: DeanOfLeicester on March 25, 2012, 07:04:15 am
I have a class called Block and a bunch of other classes extend this class. I have a problem however... I want to store all the blocks into an array. However, I am having a problem. The plan is to have the max number of blocks in the game 256 width 512 height. I want to efficiently store these into an array or any method to hold them.


Should I make a list of addresses pointing to them or what?


Erm...probably like this :-
 
#define width 256;
#define height 512;

cBlock Blocks[width][height]; //An instance of your block class

// render your blocks
For(int i=0; I<width; I++)
{
   For(int j=0; j<height; j++)
     {
        App.Draw(Blocks[i][j]);
      }
}
 
Title: Re: [Help] Creating a Map
Post by: JohnB on March 25, 2012, 05:17:08 pm
Thanks, didn't know if there was a better way.
Title: Re: [Help] Creating a Map
Post by: JohnB on March 25, 2012, 07:54:01 pm
Erm... I am still having a problem....
Here is my Block.h and GrassBlock.h

I define Draw as a virtual function... But when I go through the Block[][] and call Draw, it calls it on the block side. Even though the value stored in teh array is a GrassBlock, or StoneBlock, or even WoodBlock it all calls the Draw of the Block class.

Code: [Select]
#pragma once
#include "SFML/Graphics.hpp"

class Block
{
public:
void SetBoundingBox(int offSetX, int offSetY, int width, int height);
void SetPosition(int x, int y);

Block();

virtual void Initialize(sf::Image &image);
virtual void Update(sf::RenderWindow &window);
virtual void Draw(sf::RenderWindow &window);

virtual bool ContainsPoint(int x, int y); //doesn't check if the edges are hit
virtual bool CollidesWithPoint(int x, int y); //checks edges and inside
void output();

bool active;
protected:
sf::Sprite blockSprite;
int hardness, objId, health, maxHealth;
int offsetX, offsetY, width, height; //bounding box
int positionX, positionY;
};

Code: [Select]
#pragma once
#include "Block.h"

class GrassBlock : public Block
{
public:
void Initialize(sf::Image &image);
void Draw(sf::RenderWindow &window);
void Update(sf::RenderWindow &window);
};