Я создаю проект (Fishing Game), который включает в себя длинную линию с крючком в конце, который должен ловить объекты (рыбу), перемещающиеся через экран. Когда рыба сталкивается с крюком, я хочу, чтобы функция запускалась. Однако я хочу, чтобы функция запускалась только тогда, когда к крюку связывается не остальная часть строки. Крючок является частью того же SKSpriteNode, что и линия. Как я могу заставить физическое тело линии находиться на самом дне, так что функция вызывается только тогда, когда рыба попадает в крючок или нижнюю часть линии? Я уже знаю, как изменить размер физического тела, а не место.Создание физического тела определенного размера и положения на объекте. (SpriteKit)
ответ
Сделайте свою линию 2 «Спрайты», «Линия» и «крюк», и у вас есть крючок, являющийся дочерью линии. Дайте каждому спрайту свой физический организм с его собственной категорией. Делая это таким образом, вы можете создать некоторые аккуратные эффекты, если вы используете SKPhysicsJoint, чтобы придать ему вид крюка, свисающего с линии. Если вы все еще хотите сохранить его как 1 спрайт, тогда, когда вы создаете физическое тело, некоторые из конструкторов имеют центр, с которым вы можете манипулировать. Другим вариантом является использование SKNode, добавление к нему физического тела, добавление этого нового узла в ваш спрайт и перенос узла на крючок.
При использовании didBeginContact(contact: SKPhysicsContact)
функции, вы можете иметь contact.bodyA.node
е contact.bodyB.node
, два объекта, связанные с контактом, но вы должны также contact.contactPoint
, точка, где два объекта прикоснулось.
О крючок, Я preefer сделать два разных объекта:
- крюк (в
SKShapeNode
с точнымCGPath
) - леске
, но это не ваш случай.
Итак, у вас есть кадр спрайта со свойствами происхождения, размера и положения. Предположим, у вас есть крючок внизу вашего спрайта, рядом с точками происхождения. Когда вы знаете, что произошел контакт, вы просто подсчитаете расстояние между contact.contactPoint
и точками вашего спрайта, чтобы узнать, что является самым коротким расстоянием, и какова часть вашей лески, которая была задействована в этом контакте.
func getDistance(p1:CGPoint,p2:CGPoint)->CGFloat {
let xDist = (p2.x - p1.x)
let yDist = (p2.y - p1.y)
return CGFloat(sqrt((xDist * xDist) + (yDist * yDist)))
}
- 1. Создание пользовательского физического тела
- 2. Касаясь «через» другого Физического тела? Swift/Spritekit
- 3. Изменение рамки физического тела в spritekit
- 4. Блокировка физического тела до оси X Spritekit Swift
- 5. Проблема с удалением физики тела от физического мира (spritekit)
- 6. Выполнение столкновения Физического тела SpriteKit/Контакт по касанию Конец
- 7. Render a Проецирование определенного размера и положения на другое
- 8. HTML-элементы физического размера
- 9. Создание согласованного физического размера шрифта в мобильном браузере
- 10. Создание физического тела для SKSpriteNode, чтобы обнаружить контакт
- 11. AndEngine положения тела
- 12. физика SpriteKit тела края
- 13. Создание границ листка определенного размера
- 14. Создание окна сюжета определенного размера
- 15. Создание возможных комбинаций определенного размера
- 16. Создание экрана AVD на основе физического устройства
- 17. Создание целочисленной переменной определенного размера
- 18. Corona SDK - Измените размер движущегося физического тела
- 19. Изменение положения и размера пути
- 20. Установка нового положения тела на событие BeginContact
- 21. Как можно сделать только одну сторону физического тела, активную в SpriteKit?
- 22. Добавление динамического физического тела к нарисованной линии
- 23. Добавление физического тела в Sprite в SpriteKit меняет свое положение дробно
- 24. Как физика SpriteKit двигает тела?
- 25. Загрузка физического тела для подклассов SKSpriteNode
- 26. Физика тела критической кривой SpriteKit
- 27. Как интерпретировать этот примерный пример Swift SpriteKit системы битовой маски физического тела
- 28. комплекта Sprite создать спрайт без физического тела
- 29. Swift, SpriteKit: положение физического тела неправильно для SpriteNode при использовании edgeLoopFromRect
- 30. Изменение размера сцены SpriteKit
У меня возникли проблемы с SKShapeNodes, я нахожу это лучше, если они необходимы чтобы преобразовать узел в текстуру во время фазы загрузки и просто использовать SKSpriteNodes, пока яблоко не исправляет ошибки – Knight0fDragon
Жаль, что Apple еще не настроила библиотеку SKShapeNode. Знаете ли вы некоторые новости о iOS 10, хорошие новости или всегда ту же ситуацию? –
нет, не смотрел WWDC в этом году – Knight0fDragon