Original Post
Hello, I am trying to create collation detection between two objects and witch side one of the object gets hit. The problem is that only three out of four sides are currently working. And I can’t see what is wrong (I have probably become blind).
[source lang="csharp"]public int test(Vector2 collitionObject1, int width1, int hight1, Vector2 collitionObject2, int width2, int hight2)
{
int conclution = 0;
if (((collitionObject1.X > collitionObject2.X + width2 && collitionObject1.X < collitionObject2.X)
|| (collitionObject2.X > collitionObject1.X && collitionObject2.X < collitionObject1.X + width1))
&& (collitionObject1.Y > collitionObject2.Y && collitionObject1.Y < collitionObject2.Y))
{
conclution = 1;
}
else if (((collitionObject1.X +2> collitionObject2.X + width2 && collitionObject1.X < collitionObject2.X)
|| (collitionObject2.X > collitionObject1.X && collitionObject2.X < collitionObject1.X + width1))
&& (collitionObject1.Y + hight1 > collitionObject2.Y && collitionObject1.Y < collitionObject2.Y))
{
conclution = 2;
}
else if (((collitionObject1.Y > collitionObject2.Y && collitionObject1.Y < collitionObject2.Y + hight2)
|| (collitionObject2.Y > collitionObject1.Y && collitionObject2.Y < collitionObject1.Y + hight1))
&& (collitionObject1.X > collitionObject2.X && collitionObject1.X < collitionObject2.X + width2))
{
conclution = 3;
}
else if (((collitionObject1.Y > collitionObject2.Y && collitionObject1.Y < collitionObject2.Y + hight2)
|| (collitionObject2.Y > collitionObject1.Y && collitionObject2.Y < collitionObject1.Y + hight1))
&& (collitionObject1.X + width1 > collitionObject2.X && collitionObject1.X < collitionObject2.X))
{
conclution = 4;
}
return conclution;
}[/source]
And the method call:
[source lang="csharp"] //Ball collition
for (int i = 0; i < antal; i++)
{
//Mapblock collition
for (int j = 0; j < antaBlock; j++)
{
if (test.test(position, ball.Width, ball.Height, blockPosition[j], blocks.Width, blocks.Height) == 3
|| test.test(position, ball.Width, ball.Height, blockPosition[j], blocks.Width, blocks.Height) == 4)
{
//restoring position
position.Y = position_backup.Y;
up *= -1;
position.Y += speed * up;
}
if (test.test(position, ball.Width, ball.Height, blockPosition[j], blocks.Width, blocks.Height) == 1
|| test.test(position, ball.Width, ball.Height, blockPosition[j], blocks.Width, blocks.Height) == 2)
{
position.X = position_backup.X;
left *= -1;
position.X += speed * left;
}
}
}[/source]
Any Ideas or suggestions?
[source lang="csharp"]public int test(Vector2 collitionObject1, int width1, int hight1, Vector2 collitionObject2, int width2, int hight2)
{
int conclution = 0;
if (((collitionObject1.X > collitionObject2.X + width2 && collitionObject1.X < collitionObject2.X)
|| (collitionObject2.X > collitionObject1.X && collitionObject2.X < collitionObject1.X + width1))
&& (collitionObject1.Y > collitionObject2.Y && collitionObject1.Y < collitionObject2.Y))
{
conclution = 1;
}
else if (((collitionObject1.X +2> collitionObject2.X + width2 && collitionObject1.X < collitionObject2.X)
|| (collitionObject2.X > collitionObject1.X && collitionObject2.X < collitionObject1.X + width1))
&& (collitionObject1.Y + hight1 > collitionObject2.Y && collitionObject1.Y < collitionObject2.Y))
{
conclution = 2;
}
else if (((collitionObject1.Y > collitionObject2.Y && collitionObject1.Y < collitionObject2.Y + hight2)
|| (collitionObject2.Y > collitionObject1.Y && collitionObject2.Y < collitionObject1.Y + hight1))
&& (collitionObject1.X > collitionObject2.X && collitionObject1.X < collitionObject2.X + width2))
{
conclution = 3;
}
else if (((collitionObject1.Y > collitionObject2.Y && collitionObject1.Y < collitionObject2.Y + hight2)
|| (collitionObject2.Y > collitionObject1.Y && collitionObject2.Y < collitionObject1.Y + hight1))
&& (collitionObject1.X + width1 > collitionObject2.X && collitionObject1.X < collitionObject2.X))
{
conclution = 4;
}
return conclution;
}[/source]
And the method call:
[source lang="csharp"] //Ball collition
for (int i = 0; i < antal; i++)
{
//Mapblock collition
for (int j = 0; j < antaBlock; j++)
{
if (test.test(position, ball.Width, ball.Height, blockPosition[j], blocks.Width, blocks.Height) == 3
|| test.test(position, ball.Width, ball.Height, blockPosition[j], blocks.Width, blocks.Height) == 4)
{
//restoring position
position.Y = position_backup.Y;
up *= -1;
position.Y += speed * up;
}
if (test.test(position, ball.Width, ball.Height, blockPosition[j], blocks.Width, blocks.Height) == 1
|| test.test(position, ball.Width, ball.Height, blockPosition[j], blocks.Width, blocks.Height) == 2)
{
position.X = position_backup.X;
left *= -1;
position.X += speed * left;
}
}
}[/source]
Any Ideas or suggestions?
