Block Breaker , ANGLE calcution HELP!

Started by
10 comments, last by fantasyme 14 years ago
i try to make brick breaker game. i got 1 problem that the ball doesn't bounce correctly i thought for 2 days and i don't get the answer that i can understand from internet i use this fomula ball.x = sin(angle)*speed; ball.y = cos(angle)*speed; angle is in radian value; and whatever the ball hits, the angle will mutiply by minus which i think it gonna work but when i hit the wall not the brick the ball doesn't bounce and move like parallel. can someone tell me how to calculate the opposite site properly? Please. this is my assignment that i have to finish now
Advertisement
you don't negate the angle, but you negate either x or y depending on what wall you hit.

if(hit left or right wall) ball.x = -ball.x;
if(hit up or down wall) ball.y = -ball.y;
angle = atan2(x, y);

Everything is better with Metal.

Of course, if you keep ball.x and ball.y, there's no point in keeping an angle...
Quote:Original post by oliii
you don't negate the angle, but you negate either x or y depending on what wall you hit.

if(hit left or right wall) ball.x = -ball.x;
if(hit up or down wall) ball.y = -ball.y;
angle = atan2(x, y);


thanks for your help, i gonna try it
but i just want to learn.

i don't understand about what you wrote "angle = atan2(x, y);"

atan2??what is it? arctan? 2??
how can i use it?
Try googling "atan2"...it's quite helpful.
Quote:Original post by GregMichael
Try googling "atan2"...it's quite helpful.


well,
atan2 will make me get the opposite angle
it the reverse value of tan.

however, i try to apply for the program, it won't work


angle = atan2(ball.y,ball.x); // atan2 value is already radian
ball.x += sinf(angle)* speedX;
ball.y += cosf(angle)* speedY;

when the wall hit up or down -> speedY *(-1)
when the wall hit left or right -> speedX *(-1)

it doesn't work
when the ball hit block/brick , the ball move backward and
not collide to the bar....confused

i want to make this game work by some physic or math
because i can apply for another game too

please help.
you don't have to bother with angles. just negate the x or the y when you hit a wall or a side of a brick. The angle can be useful at the initial start to initialise the x and y, but after, it's overkill.

Everything is better with Metal.

Quote:Original post by oliii
you don't have to bother with angles. just negate the x or the y when you hit a wall or a side of a brick. The angle can be useful at the initial start to initialise the x and y, but after, it's overkill.


but it the ball hit the edge of the brick......
how can i do?
i understand your point and i agree with you
however, the next step that i want to try is billard game
so i want to know how to get the reflect angle
When you do billiards, you'll also be better off not using angles. If you have an incoming vector and a normal vector and you want to compute a reflected vector, you can do that with simple vector arithmetic. The formula is something like this:
reflected = incoming - 2*dot_product(incoming, normal)*normal


I don't know your maths level, but vector maths are pretty easy. for the very basics, see here.

Vector, triginometry, arithmetics, algebra, calculus, geometry, cartesian and polar coordinates, it's pretty much A-level maths, and that's 90% of collision detection and physics (the simple kind!) sorted. Vectors, matrices and geometrical properties being used extensively.

Everything is better with Metal.

This topic is closed to new replies.

Advertisement