PDA

Просмотр полной версии : Столкновение мяча с углом кирпича


mihael_p
16.09.2011, 12:09
Доброго времени суток всем. Проблема вот в чем : представьте, есть мяч и кирпич. Мяч, ударяясь об низ, верх и бок кирпича отскакивает как надо, но как только попадет в угол кирпича - он в него "влезает" и начинает "биться в истерике " пока не вылезет из него, вот код всей этой проверки :

if (brickObj != null && this.hitTestObject(brickObj))
{

if (this.y > brickObj.y && this.y < (brickObj.y + brickObj.height))
{
if (this.x < brickObj.x ||this.x > (brickObj.x+brickObj.width))
{

ballAngle = -180 - ballAngle;
}else
{
ballAngle = -ballAngle;
}


}

break;
}
else if (this.x > brickObj.x && this.x < (brickObj.x + brickObj.width))
{
if (this.y < brickObj.y || this.y > (brickObj.y+brickObj.height))
{

ballAngle = 180 - (180 + ballAngle);
}else
{
ballAngle = -ballAngle;
}
}


Подскажите как быть ?

this - это мяч
brickObj - кирпич

мяч : W:16 H: 16 (X:-8 , Y:-8)
кирпич : W:60 H:20 (X: 0 ,Y: 0)

SvetozarPNZ
16.09.2011, 12:23
Судя по всему, у вас скорость мяча меняется и однажды войдя в кирпич не может выйти из него. Попробуйте, кроме изменения угла движения мяча отодвигать его от кирпича в момент столкновения. Если координаты объектов это координаты их центра, то высчитывайте расстояние между центрами, а также расстояние между центрами, если бы объекты только соприкоснулись. На разницу и отодвигайте.

ЗлОй ПрОграММер
16.09.2011, 12:27
в код не вникал, но скажу что стоит сделать исключение: либо мяч ударился об вверх, либо об низ.
не должно быть такого что он ударился сразу и об вверх и об низ

lumaca
16.09.2011, 12:31
Если условия "<" и ">", то "==" ничем не охвачено.

-De-
16.09.2011, 12:50
Да он у вас и когда об угол не бьётся летит хреново. Например, под кирпичом и над кирпичом он спокойно пролететь не сможет. Вообще страх и ужас. Это только переписать.

mihael_p
16.09.2011, 12:59
Подскажите пожалуйста, как переписать, я в программировании новичок .

Genzo
16.09.2011, 13:22
Как высчитываете ballAngle и почему не учитываете параметры шара (ширина / высота) ?