SpriteKit zieht einen Knoten mit einem SKPhysicsJointSpring. Gibt es eine Möglichkeit, die Feder dazu zu bringen, ihren IOS

Programmierung für iOS
Anonymous
 SpriteKit zieht einen Knoten mit einem SKPhysicsJointSpring. Gibt es eine Möglichkeit, die Feder dazu zu bringen, ihren

Post by Anonymous »

Eine wichtige Mechanik eines Projekts, an dem ich arbeite, besteht darin, Objekte mit den Fingern zu ziehen und dafür zu sorgen, dass das Objekt, das gezogen wird, richtig mit der Physik interagiert und andere Objekte wegstößt.
Ich habe diesen Proof of Concept mit fünf grünen Kästchen erstellt, die von einem roten Kästchen getroffen werden sollen, das der Fingerposition folgt (im Debug-Modus blau markiert) und ein Federgelenk verwendet.
Das Knifflige hier ist, dass ich den Physikkörper für das rote Kästchen benötige, das ich bewegen möchte, um nicht dort zu sein statisch. Ich muss es also irgendwie so verschieben, dass die Physiksimulation darauf reagieren kann. Ich habe von Leuten gehört, die die Fingerbewegung als Geschwindigkeit auf den Physikknoten anwenden, aber ich erwarte nicht, dass dies annähernd so reibungslos funktioniert, als wenn ich ein sehr enges Gummiband simulieren könnte, das irgendwie schnell dämpft.
Probleme bei der Bewegung mit der Geschwindigkeit:
  • Wenn Sie die rote Box in ein Objekt drücken, drückt dieses Objekt zurück und infolgedessen befindet sich die rote Box nicht mehr unter Ihrem Finger und wird allmählich weiter entfernt.
Probleme mit der Feder:
  • Fühlt sich nicht stark genug am Zugknoten befestigt
  • Oszillationen/Vibrationen/Schleifen usw.
Siehe GIF und Code.
Gibt es Werte für Dämpfung/Frequenz/Reibung/Masse, die dafür sorgen können, dass sich das gut anfühlt? Als Hinweis: Ich bin mir nicht sicher, warum, aber der blaue Ziehgriffknoten kollidiert mit den grünen Kästchen, obwohl er statisch und so eingestellt ist, dass er nicht kollidiert ... Ich weiß nicht, warum.

Code: Select all

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..

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post