SpriteKit перетаскивает узел с помощью SKPhysicsJointSpring. Есть ли способ заставить пружину плотно отслеживать свою тоIOS

Программируем под IOS
Ответить
Anonymous
 SpriteKit перетаскивает узел с помощью SKPhysicsJointSpring. Есть ли способ заставить пружину плотно отслеживать свою то

Сообщение Anonymous »

Важная механика проекта, над которым я работаю, будет включать в себя перетаскивание объектов пальцами и правильное взаимодействие перетаскиваемого объекта с физикой, отталкивание других объектов.
Я создал это доказательство концепции с 5 зелеными прямоугольниками, которые должны ударяться красным прямоугольником, который следует за положением пальца (в режиме отладки, отмеченным синим) и использует пружинное соединение.
Сложность здесь в том, что мне нужно физическое тело для красного ящика, который я перемещаю, чтобы его не было статический. Поэтому мне нужно как-то переместить его так, чтобы физическая симуляция могла отреагировать. Я слышал о людях, применяющих движение пальцев в качестве скорости к физическому узлу, но я не ожидаю, что это будет работать так же гладко, как если бы я мог каким-то образом имитировать очень тугую резиновую ленту, которая каким-то образом быстро затухает.
Проблемы с перемещением со скоростью:
  • Если вы нажимаете красную рамку на объект, этот объект отталкивается назад, и в результате красная рамка больше не находится под вашим пальцем и постепенно удаляется.
Проблемы с пружиной:
  • Недостаточно прочно прикреплена к узлу перетаскивания.
  • Колебания/вибрации/петли и т. д.
См. gif и код.
Есть ли значения демпфирования/частоты/трения/массы, которые могут заставить это чувствовать себя хорошо? В качестве примечания: я не уверен, почему, но синий узел ручки перетаскивания сталкивается с зелеными прямоугольниками, хотя он статичен и настроен на отсутствие столкновений... Не знаю, почему.

Код: Выделить всё

class GameScene: SKScene {
let box = {
let node = DraggableNode(color: .red, size: CGSize(width: 50, height: 50))
node.position = CGPointMake(150, 150)
node.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 50, height: 50))
node.physicsBody?.allowsRotation = false
node.physicsBody?.affectedByGravity = false
node.physicsBody?.isDynamic = true
return node
}()

override func didMove(to view: SKView) {
physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
addChild(box)

// Add smaller boxes to collide with
let targetCount = 5
let targetSize = CGSize(width: 30, height: 30)
let targetY = size.height * 0.75
for i in 0..

Подробнее здесь: [url]https://stackoverflow.com/questions/79796303/spritekit-dragging-a-node-with-a-skphysicsjointspring-is-there-a-way-to-get-the[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»