2016-01-25 6 views
1

Я делаю реакционную игру, где вы можете уничтожать врагов и зарабатывать очки, но если вражеские узлы пересекают узел игроков, это уменьшает жизнь на один. Его реакционная игра, поэтому я хочу дать некоторые точки толерантности в пересечении. Поэтому, если они пересекаются, я не хочу сразу видеть сокращение.CGRectIntersectsRect переносит некоторые моменты перед реакцией

Вот мой код:

if (CGRectIntersectsRect(enemy.frame, player.frame)) { 
    lives--; 
} 

Моя цель порог терпимости к перекрестку. Надеюсь, кто-то может мне помочь. (код в объективе c пожалуйста)

+0

вы пробовали просто уменьшив размер либо enemy.frame или player.frame для этой цели? Если вы сделаете их меньше, хит будет обнаружен «позже» – luk2302

+0

, если вы используете SpriteKit, тогда я бы настоятельно рекомендовал использовать встроенный физический движок для коллизий через «SKPhysicsBody». Я также согласен с luk2302, просто уменьшаю размер физического тела. – Hamish

+0

Я не буду работать, потому что мне нужна переменная физика для моей игры, и это невозможно. @ luk2302 Что вы имеете в виду, когда размер кадра меньше? вы имеете в виду изображение? Но это не то, что я ищу .. – ccdev

ответ

0

Из комментариев по вопросу, я предполагаю, вы не понимаете, что означает «вставка».

Если у вас есть прямоугольник с началом (10,20), шириной 100 и высотой 50, то если вы вставляете прямоугольник на 10 по оси x и 5 по оси y, то результатом является прямоугольник с началом (20,25), ширина 80 и высота 40.

Обратите внимание, что прямоугольник вставки содержится в исходном прямоугольнике. Предложение @ luk2302 вместо того, чтобы проверить, пересекаются ли прямоугольники фреймов ваших двух объектов, проверьте, пересекаются ли два меньших прямоугольника. Вы можете создавать эти меньшие прямоугольники, вставляя прямоугольники рамки на некоторую величину.

Вы можете, конечно, рассчитать прямоугольник вставки непосредственно с несколькими строками кода, но есть API-адрес CGRectInset (а также NSInsetRect), который сделает это для вас в одной строке.

НТН

+0

Теперь я понимаю, что это значит, но я до сих пор не знаю, как реализовать этот CGRectInset в то же время с CGRectIntersectsRect, чтобы обнаружить перекрытие .. Извините за все это noobness .. – ccdev

+0

? ? Если у вас есть переменная 'x', функция' sqroot' и функция 'sin', как вы вычисляете' sin' 'sqroot'' x' и помещаете результат в 'ans'? (1) 'tmp = sqroot (x); ans = sin (tmp); 'или более непосредственно (2)' ans = sin (sqroot (x)) '. Теперь у вас есть две функции, два прямоугольника, и вы хотите их объединить ... – CRD

Смежные вопросы