NSRage Thread

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ich ärgere mich gerade über die Umsetzung von SKSpriteKit Scenes.

    Man kann ja SpriteKit Scenes als kleinere Einheiten definieren und diese dann über eine SKReferenceNode zu einer großen MainScene zusammen setzen. Ich platziere also die SKReferenceNode so wie ich Sie in meiner MainScene benötige. Auf einige SKSpriteNodes in einer EinzelScene mache ich einen hit test. Und anstatt nun die Position der Elemente in der MainScene zu benutzen geht CGRectIntersectsRect(enemy.frame, spike.frame) auf die position der Elemente in der EinzelScene.

    WTF.

    Als ob die Postion der SKReferenceNode in der MainScene nicht zählt.


    :cursing: :cursing: :cursing:
  • Wenn ich es richtig verstanden habe, würde ich es haargenau so erwarten. Auch die Position von Views oder Layern ist doch immer relativ zu ihrem Elternobjekt. Steht auch so in der Doku. Für die Umrechnung gibt's spezielle Methoden, und zum Knoten finden gibt's auch etwas.

    Statt CGRectIntersectsRect(enemy.frame, spike.frame) lieber - intersectsNode:. Dann brauchst du dich um die Umrechnung nicht zu kümmern.
    „Meine Komplikation hatte eine Komplikation.“
  • ioscampus schrieb:

    ich finde es immer noch unlogisch.
    Wenn das Elternobjekt bewegt wird, sollen sich ja auch alle Kindobjekte bewegen. Wenn die absolute Werte hätten, müssten alle Knoten beim Verschieben geändert werden. Das kann schnell ziemlich aufwändig werden, insbesondere bei komplexeren geometrischen Operationen wie Drehen. Richtig kompliziert wird es dann mit Transformationen, wenn ein View beispielsweise seine Kinder verkleinert. Dann sind die absoluten Koordinaten nur noch sehr eingeschränkt brauchbar.

    Ein weiterer offener Punkt wäre, welchen Knoten (bzw. View) du als Urahn festlegst. Im Spritekit mag das noch relativ einfach sein, aber was nimmst du unter OSX? Das Fenster, den Bildschirm oder die Fläche, die alle Bildschirme enthält?

    Übrigens benutzt die reale Welt in der Regel auch relative Koordinaten zu der nächst höheren Einheit. Wenn du in eine Schublade ein Loch bohren sollst, gibst du ja im Allgemeinen die Entfernung zu den Rändern der Lade und nicht zu den Schrankwänden an.
    „Meine Komplikation hatte eine Komplikation.“
  • Wenn ich allerdings frage "hast du dir das Bein (= frame des Beins) am Stuhl (= frame des Stuhls) gestoßen?" interessiert mich die Lage der Objekte im Raum. In diesem Zusammenhang ist es unlogisch das der Stuhl seine Position als z.B. zweites Element der Sitzgruppe zurück gibt und somit fest der Meinung ist - "nein, an mir hast du dich nicht gestoßen"; obwohl ich es auf Grund des Schmerzes in meinem Bein besser weiß.

    Ich hatte einfach eine andere (falsche) Erwartung an die Funktionsweise von CGRectIntersectsRect. Aber gut - da hat Apple ja die anderen von dir aufgezeigten Möglichkeiten geschaffen.