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