SpriteKit problem mit contactPoint (oder etwas ganz anderem?)

  • SpriteKit problem mit contactPoint (oder etwas ganz anderem?)

    Hallo Leute,
    ich habe da ein Problem mit meinem kleinen Spiel. Ich habe erst Anfang Dezember begonnen mit Swift zu Programmieren und bin insgesamt noch nicht so lange dabei. Also verzeiht mir wenn ich nicht alles auf anhieb verstehe oder mein Code ein bisschen komisch ist ^^

    Hier mal der Code mit dem ich Probleme habe:

    C-Quellcode

    1. //fragt ab ob die beiden Objekte kollidieren (funktioniert)
    2. if ballBody.categoryBitMask == ballCategory && goalOrGroundBody.categoryBitMask == ballCircleCircleCategory {
    3. let nodeToRemove = goalOrGroundBody.node as SKSpriteNode
    4. let contactPoint = contact.contactPoint
    5. //entfernt das eine Objekt der Kollision
    6. nodeToRemove.removeFromParent()
    7. //entfernt das andere Objekt der Kollision
    8. removeBall()
    9. println("contactpoint: \(contactPoint)")
    10. //erstellt das neue Objekt
    11. let ball = SKSpriteNode(imageNamed: "Ball2")
    12. ball.name = "ball2"
    13. ball.physicsBody = SKPhysicsBody(circleOfRadius: CGRectGetHeight(ball.frame) / 2)
    14. ball.physicsBody?.friction = 0
    15. //Wichtig: contactPoint stimmt laut println() oben
    16. ball.position = contactPoint
    17. self.addChild(ball)
    18. //position stimmt immer noch
    19. println("child added: \(ball.position)")
    20. }
    21. override func update(currentTime: NSTimeInterval) {
    22. //hier stimmt die position nicht mehr
    23. let node = childNodeWithName("ball2")? as? SKSpriteNode
    24. if node != nil {
    25. println(node?.position)
    26. }
    27. }
    Alles anzeigen
    Console Ausgabe:
    contactpoint: (219.408203125,111.748443603516)
    child added: (219.408203125,111.748443603516)
    Optional((0.0,0.0))
    Optional((-10.724986076355,-0.305910587310791))
    Optional((-10.724986076355,-1.01913499832153))
    Optional((-10.724986076355,-2.13899564743042))
    Optional((-10.724986076355,-3.66481566429138))
    usw...


    Erklärung:

    Ich will nachdem 2 Objekte auf dem Spielfeld kollidiert sind diese beiden entfernen und 1 neues an dem contactPoint erstellen. laut meiner Konsolen Ausgabe stimmt CGPoint aus contact.contactPoint.
    Sobald ich aber in der Updatefunktion die Position auslese wird die 1. Position schoneinmal falsch bei 0.0, 0.0 festgelegt und ab dann fällt der ball ins nicht sichtbare leere.
    Ich finde den Fehler einfach nicht und dachte hier könnte mir evtl. jemand weiterhelfen. Der Code ist der Einfachheit halber zusammengefasst, immoment läuft der aber auch so in meinem Programm mit dem Fehler...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Waffeln ()

  • Die physikalische Welt hat eine Gravitation von -9.8. die Welt ist auch von Wänden umgeben bzw. der Bildschirm. Da an der Position 0.0,0.0 eine Wand ist, kann da eigentlich nichts sinnvolles erstellt werden. Dadurch wird der erstellte Ball dort wohl aus dem Frame gedrückt. Ich hatte mal versucht 6 Bälle hintereinander zu spannen und da wurden 3 Stück IN den Frame gedrückt bzw. in den sichtbaren Bereich.

    Ich entferne den Ball weil der neu erstellte eine andere Grafik hat.

    Ich kann mir halt irgendwie mittlerweile nurnoch vorstellen das es nicht an der Programmierung liegt, sondern an Swift oder spritekit...
    Ich werde mal versuchen einen Delay einzubauen der erst nach ein paar Millisekunden den Ball erstellt. Das wäre noch ein möglicher Lösungsweg der mir in den Sinn kommt.

    Edit:
    Scheint einfach nicht zu funktionieren.

    stackoverflow.com/questions/25…messes-up-the-positioning

    Apple schrieb:

    Engineering has determined that this is an issue for you to resolve based on the following:
    You can't modify a tree which it is being simulated, and this is clearly stated in Programming Guide.


    Edit 2:
    mit nem delay von 0.01 funktioniert es jetzt. Bin ich jetzt zwar nicht komplett zufrieden mit, aber sollte hoffentlich im fertigen Programm nicht auffallen...
    Wenn jemand eine bessere Idee hat dann her damit :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Waffeln ()