Ich habe drei Unterschichten mit der folgenden z-Ordnung und Dimensionen (keine Offsets) als Kinder eines cocos2d geordneten Schicht:Parallax: Konvertieren eines Punkts auf einer Schicht zur anderen Parallaxe Schichten Koordinatenraum
oberste Schicht z:: -1 Breite: 2048 Länge: 2048
mittel~~POS=TRUNC: z: -2 Breite: 1536 Länge: 1536
tiefste Schicht: z: -3 Breite: 1024 Höhe: 1024
Verwendung ein UIScrollView (an ein V angehängt) iewController) als Subview des GLview von cocos2d verwendet, übersetzen I (und deshalb bewegen) der Position jeder Schicht mit den folgenden Verhältnissen (also den 3D-Effekt zu erzielen):
oberste Schicht: dragPt.x * 1 (gleiche gilt für y)
mittel~~POS=TRUNC: dragPt.x * 0,75 (das gleiche gilt für y)
tiefsten Schicht: dragPt.x * 0,5 (das gleiche für y)
I detektieren auf jeder Schicht eine Benutzereingabe wie folgt:
- fügen Sie eine weitere Unteransicht (nennen wir es seeThrough) an die glView w it den folgenden Abmessungen 480x320 (die App ist im Querformat)
- unter Verwendung -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
in dieser Unteransicht speichern ich den Punkt der Berührung in einer iVar namens "touchLocation".
- meine cocos2d-Schicht dann I den folgenden Code verwenden, um die Berührungsposition auf jeder Schicht zu bestimmen:
CGPoint pointOnTopMostLayer = ccp(seeThrough.touchLocation.x - topMostLayer.position.x, (320 - seeThrough.touchLocation.y) - topMostLayer.position.y);
CGPoint pointOnMidLayer = ccp(seeThrough.touchLocation.x - midLayer.position.x, (320 - seeThrough.touchLocation.y) - midLayer.position.y);
CGPoint pointOnDeepestLayer = ccp(seeThrough.touchLocation.x - deepestLayer.position.x, (320 - seeThrough.touchLocation.y) - deepestLayer.position.y);
(320 ist die Bildschirmhöhe und subtrahieren es notwendig ist, Y aus der UI zu konvertieren das gl-Koordinatensystem)
Beim Scrollen der Ebenen sind ihre Positionen negativ. Wenn Sie die seeThrough-Ansicht als Referenzplattform zum Erfassen der Berührung auf einer 480x320-Oberfläche verwenden, kann ich die Berührungsstelle im Koordinatensystem jeder Ebene ermitteln, indem Sie einfach die negativen Positionswerte jeder Ebene von dem in der seeThrough-Ansicht erfassten Punkt subtrahieren.
Das Problem ist, wenn es überhaupt keinen Referenzpunkt gibt, zum Beispiel wenn ich versuche, die Position eines Sprites auf einer der Ebenen ohne Benutzereingabe zu bekommen.
Da ich keinen Bezugspunkt habe, kann ich keine Lösung finden, die es mir ermöglicht, einen bestimmten Punkt auf einer der cocos2d-Schichten zu bestimmen.
Ich versuchte mehrere Methoden (convertToNodeSpace, convertToWorldSpace, und als der Tag schließlich wilde Mathematik ging), keiner von ihnen mit Erfolg.
Meine Frage ist also: Wie kann ich die Position von sagen wir ein Sprite auf einer der Schichten bestimmen und in den Raum einer der anderen Schichten konvertieren?
Szenarien:
- ein Sprite auf der deepestLayer ist, aber ich will es an eine Stelle auf dem MIDLAYER
bewegen - ein Sprite auf der topmostLayer ist, und ich will es auf die deepestLayer bewegen
- etc ...
Große Antwort und eine Lösung mit beeindruckender Wirkung! Es hat die seethroughView überflüssig gemacht und ich kann jeden beliebigen Punkt auf jeder Ebene bestimmen! Vielen Dank!! – svrs
Ich bin neu hier. Freut mich, geholfen zu haben :) –