Мяч зависает внизу экрана и вибрирует - PullRequest
0 голосов
/ 24 июня 2011

Вот мой код:

if (ball.position.y  < 0 || ball.position.y > size.height) {
    ball_speed.y *= -1;
}
    if (ball.position.x  < 0 || ball.position.x > size.width) {
    ball_speed.x *= -1;
}

Я делаю свою игру в cocos2d, ball - это спрайт, а ball_speed - это CGPoint.Что происходит, иногда мяч замирает на краю экрана и просто вибрирует.Может ли кто-нибудь помочь мне в этом было бы оценено.

1 Ответ

2 голосов
/ 24 июня 2011

Вы применяете логику «если мяч находится за пределами экрана, измените его скорость вдоль соответствующей оси», что неверно: возможно, мяч находится за пределами экрана, но уже движется в правильном направлении, Это происходит из-за того, что ваша скорость сильно зависит от отскоков (таких как гравитация или трение).

Первая часть решения заключается в явном указании направления:

if (ball.position.y < 0) 
  ball_speed.y = fabs(ball_speed.y);

if (ball.position.y > size.height)
  ball_speed.y = - fabs(ball_speed.y);

Это будет гарантировать, что шар действительно вернется в экран, так что нет возможности колебания на краю.

Вторая часть, которая является необязательной, но, тем не менее, полезной, если вам нужна правильная физика, - это возвращать шарик обратно на экран всякий раз, когда он уходит:

if (ball.position.y < 0)
  ball.position.y = 2 * 0 - ball.position.y ;

if (ball.position.y > size.height)
  ball.position.y = 2 * size.height - ball.position.y;

Обратите внимание на pos = 2 * limit - pos, который в основном отражает pos вокруг limit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...