Jump to content

Arkanoid Colisão


edub13
 Share

Recommended Posts

Boas pessoal, comecei à pouco a fazer um gênero de um Arkanoid só por brincadeira, e deparei me com o seguinte problema, quando a "bola" acerta nos quadrados eles não desaparecem (aliás alguns desaparecem na margem direita como deveria ser).

Aqui coloco as picturebox no form:

private void Load_Bricks()
	{
		brick = new PictureBox[bRICK_HORIZONTAL_MAX * BRICK_VERTICAL_MAX];

		for (int i = 0; i < BRICK_HORIZONTAL_MAX; i++)
		{
			for (int j = 0; j < BRICK_VERTICAL_MAX; j++)
			{
				brick[j] = new PictureBox();

				brick[j].Visible = true;

				brick[j].Location = new Point(i * BRICK_WIDTH, j * BRICK_HEIGHT);

				brick[j].Size = new Size(BRICK_WIDTH, BRICK_HEIGHT);
				brick[j].Image = Resources.brick;

				this.Controls.Add(brick[j]);
			}
		}

	}

sfg.png

Aqui está o código do Evento (Move) da "bola":

void ball_Move(object sender, EventArgs e)
	{
		foreach (PictureBox obj in brick)
		{
			if (ball.Bounds.IntersectsWith(obj.Bounds))
			{
				obj.Dispose();
			}
		}

	}

Como posso resolver isto ?

Cumps.

Edited by apocsantos
geshi

Learning:

C++
Link to comment
Share on other sites

eu não costumo vir a tópicos de c#, não porque não saiba a linguagem, mas porque não me sinto à vontade em relação a outras tecnologias.

no entanto, o título foi o que me chamou.

dei uma vista de olhos no problema e acho incrível de como o problema é tão simples, que passa despercebido por todos e viram o tópico ...

vamos ver se chegas lá sozinho respondendo a esta questão:

- quantas instâncias da classe PictureBox estão guardadas no array brick ?

ps : isto noutra linguagem dava um segmentation fault ...

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Acho que já percebi ...

No array estão guardadas 170 instâncias, mas só 10 é que estão "inicializadas" ? (Essas dez que desaparecem sem problema)

não ... o array só tem mesmo 10 instâncias ... (isto se BRICK_VERTICAL_MAX tiver o valor de 10)

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Pois é tens razão

for (int i = 0; i < BRICK_HORIZONTAL_MAX; i++)
		{
			for (int j = 0; j < BRICK_VERTICAL_MAX; j++)
			{
				brick[j] = new PictureBox();
				brick[j].Visible = true;
				brick[j].Location = new Point(i * BRICK_WIDTH, j * BRICK_HEIGHT);
				brick[j].Size = new Size(BRICK_WIDTH, BRICK_HEIGHT);
				brick[j].Image = Resources.brick;
				this.Controls.Add(brick[j]);
			}
		}

No segundo for só estou a instanciar 10 PictureBox, como é que eu mudo isso ?

EDIT:

Aliás vou tentar de outra maneira e já digo se resultou

EDIT 2:

Já consegui apenas mudei o array para multidimensional e funcionou perfeitamente, obrigado pela ajuda!

for (int i = 0; i < BRICK_HORIZONTAL_MAX; i++)
		{
			for (int j = 0; j < BRICK_VERTICAL_MAX; j++)
			{
				brick[i,j] = new PictureBox();
				brick[i, j].Visible = true;
				brick[i, j].Location = new Point(i * BRICK_WIDTH, j * BRICK_HEIGHT);
				brick[i, j].Size = new Size(BRICK_WIDTH, BRICK_HEIGHT);
				brick[i, j].Image = Resources.brick;
				this.Controls.Add(brick[i, j]);
			}
		}
Edited by edub13

Learning:

C++
Link to comment
Share on other sites

A mim o que me chamou mais à atenção foram as imagens e a ajuda relativamente ao colocar como não visível a imagem, daí ter dado aquela sugestão de código porque já tive ocasiões onde precisei de limpar o resource da picturebox para poder eliminar a mesma.

Acho que nem olhei para o código inicial e se olhei não percebi o erro à primeira.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.