IPhone SDK, более точное обнаружение столкновений и установить рамки / границы UIImageView - PullRequest
0 голосов
/ 07 апреля 2010

Эй, у меня сейчас большая проблема с моим приложением, оно слишком неточное.

У меня есть изображение воздушного шара, https://dl.dropbox.com/u/2578642/Balloonedit.png

И у меня есть дротиккоторый, если он сталкивается с воздушным шаром, игра заканчивается.

В данный момент я заполняю изображение воздушного шара 8 UIImageViews.и я обнаруживаю, поражает ли их дротик, это должно было сделать его действительно точным, но это не так, дротик в значительной степени проходит через воздушный шар, когда он должен столкнуться, поэтому у меня есть план, есть ли способ обнаружить, когдадротик попадает в реальное изображение воздушного шара, а не в UIImageView, или есть какой-нибудь способ нарисовать границу вокруг воздушного шара и определить, попадет ли он в это?

В настоящее время я использую этот код для обнаружения столкновения:

if (CGRectIntersectsRect(pinend.frame, balloonbit1.frame)){
    [maintimer invalidate];
    accelManeger.delegate = nil;
[ball setImage:img];
[UIImageView beginAnimations:nil context:NULL];
[UIImageView setAnimationDuration:0.3];
ball.transform = CGAffineTransformMakeScale(2, 2);
[UIImageView commitAnimations];

}

Таким образом, в одном методе есть 40 таких битов кода, и, как вы можете себе представить, не очень точно / быстро реагировать.Итак, как я сказал, есть ли способ нарисовать границу или что-то вокруг воздушного шара и обнаружить столкновение между границей и дротиком?Потому что тогда я мог бы предположить, что он будет работать слишком медленно, потому что он будет обрабатывать только 5 бит кода.

Спасибо за любую помощь.

Это большой вопрос, так что если вы можете ответитьэто я куплю ваше приложение:)

Ура, Гарри: /

Ответы [ 2 ]

0 голосов
/ 07 апреля 2010

Ваши воздушные шары - почти идеальный эллипс. Я думаю, что вы можете использовать что-то вроде этого, чтобы проверить столкновение

(x-cx)**2 / a**2 + (y-cy)**2 / b**2 <= 1.0

где ..

  • x, y = положение штифта
  • cx, cy = центр воздушного шара
  • a = ширина баллона / 2
  • b = высота воздушного шара / 2

Однако я до сих пор не понимаю, почему ваш код работает не так гладко. Проблемы могут не быть здесь.

0 голосов
/ 07 апреля 2010

Тревожные колокола начали звонить, когда я достиг "... 40 из этих битов кода ...".Почему бы вам не преобразовать это в один метод, который вы вызываете неоднократно?

Не зная природу вашего приложения, я не уверен, подходит ли это, но могу ли я предложить вам использовать физический движок, такой как Физика бурундука ?Это позволит вам определять формы столкновений, гравитацию на движущихся объектах и ​​запускать обратные вызовы, когда вещи сталкиваются друг с другом.Это будет на порядок быстрее, чем то, что вы делаете сейчас.

...