2017-10-29 5 views
1

Ich versuche etwas wirklich Einfaches zu schreiben - und verwende SpriteKit für diese Instanz. Die Art, wie ich es auf anderen Plattformen gemacht habe, ist, indem ich ein unsichtbares Kind "Stick" ein wenig herausstrecken. Durch die Erkennung der Kollision zwischen den unsichtbaren "Stäben" kann ich feststellen, ob sich das Objekt in der Nähe der Wand befindet oder nicht. Ich versuche, dasselbe mit SpriteKit zu replizieren. Natürlich hätte ich lieber einen unsichtbaren "Strahl", der aus dem Objekt kommt und mir Distanz gibt - aber das ist wahrscheinlich zu viel Aufwand.Objektnähe zu Wänden erkennen

Ich würde jede Art und Weise schätzen, um mein dummes Projekt zu verbessern, das ich bis jetzt bekommen habe.

My Project so far

Dank.

+0

holy crap its a mac Projekt :) ich das tun zu – Fluidity

Antwort

0

Hier ist, was ich damit kam nicht Physik beteiligt ...

Ziehen Sie die Maus, um das Auto, und das Etikett in der Mitte Updates zu sagen Sie den Abstand zur nächsten Wand zu bewegen. Lassen Sie die Maus los, um das Auto zurückzusetzen.

Sehr einfaches Beispiel, kann aktualisiert werden, um genauere Messungen zu geben.

class GameScene: SKScene { 


    let car = SKSpriteNode(color: .blue, size: CGSize(width: 50, height: 100)) 
    let label = SKLabelNode(text: "") 


    func findNearestWall() -> CGFloat { 

    // you can make this more advanced by using the CGPoint of the frame borders of the car, or even 6+ points for more accuracy 

    let closestX: CGFloat = { 

     if car.position.x < 0 { // left wall 
     return abs(frame.minX - car.position.x) 
     } else { // right wall 
     return abs(frame.maxX - car.position.x) 
     } 
    }() 

    let closestY: CGFloat = { 
     if car.position.y < 0 { // bottom wall 
     return abs(frame.minY - car.position.y) 
     } else { // top wall 
     return abs(frame.maxY - car.position.y) 
     } 
    }() 

    if closestX < closestY { 
     return closestX.rounded() // as closest wall distance 
    } else { 
     return closestY.rounded() // as closest wall distance 
    } 
    } 


    override func didMove(to view: SKView) { 
    removeAllChildren() 
    label.fontSize *= 2 
    addChild(car) 
    addChild(label) 
    } 

    override func mouseDown(with event: NSEvent) { 
    } 

    override func mouseDragged(with event: NSEvent) { 
    let location = event.location(in: self) 
    car.position = location 
    } 

    override func mouseUp(with event: NSEvent) { 
    car.position = CGPoint.zero 
    } 

    override func didEvaluateActions() { 
    label.text = String(describing: findNearestWall()) 
    } 
} 
+0

, dass, ist großartig, aber ich brauche einen Vektor -, die AI weitergegeben würden. Es muss ein vordefinierter Vektor sein, der aus dem Auto oder einem anderen Objekt kommt. Das Berechnen der Entfernung ist ziemlich einfach, und ich hätte das getan - wenn das alles war, was ich brauchte. – GregJaskiewicz

+0

@GregJaskiewicz Ich bin verwirrt. Kannst du mehr in deiner Frage ausarbeiten, vielleicht mit einem Diagramm? – Fluidity

+0

Sicher. Stellen Sie sich vor, Sie ziehen 4 Linien aus dem Quadrat - bei 15 und 30 Grad des Zentrums in beide Richtungen. Ähnlich wie ich es in dem Projekt versucht habe, das dieser Frage beigefügt ist. – GregJaskiewicz

Verwandte Themen