Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


krrice

Member Since 06 Jan 2013
Offline Last Active Mar 05 2013 06:32 PM

Posts I've Made

In Topic: Need help with C++

05 March 2013 - 06:06 PM

I would recommend these tutorials. To me they would be easier to learn and make a game in the time frame you have. Part 5 begins an actual full game the first parts get you use to the framework.

 

http://fixbyproximity.com/2d-game-development-course/


In Topic: Error when destroying bitmap images

17 February 2013 - 11:23 AM

It looks like the bricks share an image but you are destroying it for every brick. You should only destroy the brick image once.

 

Thanks , it makes sense now. So at the end of main I need to delete the image like:

 

    delete paddle;
    delete ball;
    al_destroy_bitmap(brickImage);
    //SHELL OBJECTS=================================
    al_destroy_font(font18);
    al_destroy_timer(timer);
    al_destroy_event_queue(event_queue);
    al_destroy_display(display);

    return 0;
}

 

But don' I need to do something in the class for the bitmap pointers I create for each brick;

 

Brick::Brick(ALLEGRO_BITMAP *image,int x,int y, ALLEGRO_COLOR tint)
{
    width = al_get_bitmap_width(image);
    height = al_get_bitmap_height(image);
    this->image = image;
    this->x = x;
    this->y = y;
    this->tint = tint;
    alive = true;
}


In Topic: Error when destroying bitmap images

17 February 2013 - 08:07 AM

0xFEEEFEEE is the memory fill pattern that MSVC uses for freed memory with the debug heap. If you see an access violation in that area it generally means you've messed with memory that you've already deallocated. The first thing I'd look at is your Brick destructor.

 

My Brick Destructor is empty.


In Topic: Tile Map Collision

07 January 2013 - 04:32 PM

On collision you need to exit the loop. It only works on the last one because it will always run through the entire tree and always overwrite your 'collided' variable with the last "2" that was found.

 

I would give you some advice on how to restructure this but I don't know how you are trying to use it.

 

The simplest fix would be instead of collided = true; to simply do "return true;" remove the else and at the end of the loop do return false;

 

But I would say you need to rewrite this completely since you can obviously index into your array. (you're already doing it) and only test against the tile that you need to know if it had a collision on, instead of running a loop testing all possible points.

 

This is how i am using it for the moment. I have a MapLoader class that sends the Collision map, which is a vector of vectors to the Player class. In the Players Update that is where the for statement is.

I am just using the collided variable for testing right now. In main.cpp I have a text function displaying the collided varible and its value.So when ever I move over the tiles that are twos it will show 1 and if not 0. 

 

Here is Player.cpp

 

#include "Player.h"

Player::Player()
{}

void Player::Destroy()
{
	GameObject::Destroy();
}

void Player::Init(MapLoader *colMap,ALLEGRO_BITMAP *image = NULL)
{
	GameObject::Init(672, 554, 6, 6, 0, 0, 19, 15 );

	SetID(PLAYER);
	SetAlive(true);

	collided = false;

	map = colMap->GetColMap();

	lives = 3;
	score = 0;

	maxFrame = 4;
	curFrame = 0;
	frameDelay = 3;
	frameWidth = 36;
	frameHeight = 72;
	animationColumns = 4;
	animationDirection = 1;

	animationRow = 2;

	if(image != NULL)
		Player::image = image;
}

void Player::Update()
{
	GameObject::Update();

	if(x - boundX < 0)
		x  =  boundX;
	else if(x + boundX > WIDTH)
		x = WIDTH - boundX;

	if(y < 0)
		y = 0;
	else if(y > HEIGHT)
		y = HEIGHT;

	//Collision

	for(int i = 0; i < map.size(); i++)
	{
		for(int j = 0; j < map[i].size(); j++)
		{
			if(map[i][j] == 2)
			{
				if(x + 24 > j * 24 && x < (j * 24) + 24 &&
					y + 24 > i * 24 && y < (i * 24) + 24 )
				{
					collided = true;
				}
				else
					collided = false;
			}
		}
	}

	if(++frameCount >= frameDelay)
	{
		if(curFrame > 4)
			curFrame = 0;

		fx = (curFrame % animationColumns) * frameWidth;
		fy = animationRow * frameHeight;

		frameCount = 0;
	}
}
void Player::Render()
{
	GameObject::Render();

	//al_draw_rectangle(x + boundX,y + boundY,x - boundX,y - boundY,al_map_rgb(0,255,0),5);
	al_draw_bitmap_region(image, fx, fy, frameWidth, frameHeight,
		x - frameWidth / 2, y - frameHeight / 2, 0);
}

void Player::MoveUp()
{
	animationRow = 3;
	curFrame++;
	dirY = -1;
}
void Player::MoveDown()
{
	animationRow = 0;
	curFrame++;
	dirY = 1;
}
void Player::MoveLeft()
{
	animationRow = 1;
	curFrame++;
	dirX = -1;
}
void Player::MoveRight()
{
	animationRow = 2;
	curFrame++;
	dirX = 1;
}

void Player::ResetAnimation(int position)
{
	if(position == 1)
	{
		dirY = 0;
	}
	else
	{
		dirX = 0;
	}
}

void Player::Collided(int objectID)
{
	if(objectID == ENEMY)
		al_draw_rectangle(x + boundX,y + boundY,x - boundX,y - boundY,al_map_rgb(0,255,0),5);
		//lives++;
}


PARTNERS