Cocos2d-x CCScrollview scrollen upside down
Grüße Stackoverflow,
Ich bin derzeit versuchen zu implementieren, ein Scroll-Menü in einem cocos2d-x-Spiel, das ich entwickle. Das problem ist, dass die Elemente der Bildlauf in die entgegengesetzte Richtung, die ich will. Zum Beispiel, wenn ich ziehen meine finger vom unteren Bildschirmrand nach oben, wird das sprite springt in seine ursprüngliche position zurück.
Und wenn ich ziehen Sie meinen finger von oben nach unten, die sprite-Folgen Sie meinem finger (bis zum erreichen der Grenze).
Dies ist mein code:
/////////////////////
//SCROLL VIEW + LAYER
CCLayer *layer = CCLayer::create();
layer->setContentSize( CCSizeMake( winSize.width, winSize.height ) );
layer->addChild( menu );
scrollView = CCScrollView::create();
scrollView->retain();
scrollView->setContentSize( CCSizeMake ( layer->getContentSize().width, layer->getContentSize().height ) );
scrollView->setDirection( CCScrollViewDirectionVertical );
scrollView->setPosition( ccp( 0,0 ) );
scrollView->setContainer( layer );
this->addChild(scrollView);
scrollView->setContentOffset( CCPointZero );
Anregungen oder Hilfe wird sehr geschätzt. Wenn Sie noch andere arbeiten, etwa für die Erstellung von ein Scroll-Menü mit einem anderen Ansatz, ich würde lieben, Sie zu hören.
Danke!
Beste Grüße
Andreas
Art des Menüs ist CCMenu. Die touch-Oberfläche funktioniert wie vorgesehen.
Hat dieser code funktioniert auch auf der iOS-Plattform?Dies kann Ihnen einige Tipps. cocos2d-x.org/boards/18/topics/17298?r=22307
Ich habe nicht versucht es auf ein iOS-Plattform noch nicht, aber ich fürchte, es wird genauso funktionieren, wie es funktioniert auf meinem Android-Gerät. Ich habe versucht, die Dinge, die vorgeschlagen wurden in diesem thread, aber ohne Erfolg. Ich eigentlich geantwortet, dass thread. Vielen Dank für Ihre Anregungen. 🙂
InformationsquelleAutor Prince John | 2013-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden: cocos2dx/extensions/GUI/CCScrollView/CCScrollView.cpp
Speziell
CCScrollView::minContainerOffset
undCCScrollView::maxContainerOffset
CCScrollView
arbeitet in OpenGL Koordinaten (im Gegensatz Fenster Koordinaten) - Werte sind relativ zu (Links, unten) mit positiver Y-Achse geht nach oben. Auch im Auge behalten, die scroll-view die Positionierung und die container verankert sind (CCNode::setAnchorPoint
) (Links, unten).Wenn Sie nach unten scrollen (verschieben/ziehen Sie den Inhalt nach oben, um zu sehen, die Inhalte unterhalb der cut/clip) sehen Sie den Inhalt unter dem unteren Rand des Bildschirms, aber es prallt zurück, der moment Sie loszulassen, die berühren/ziehen, weil
maxContainerOffset
zurück(0, 0)
Sie haben gerade zu bewegen versucht, um eine positive Inhalts-offset.Die Abbildung zeigt den Zustand des scrollview und die container, wenn Sie erstellt/initialisiert. Dies ist der Zustand, oder die Koordinaten zu "denken" bei der Einrichtung und der Positionierung der Kind-Elemente und container. Das graue Rechteck (Links, unten) zeigt die gültige region für das scrollen über die container. Stellen Sie sich den container Ankerpunkt bewegt sich innerhalb es.
Des Containers gescrollt werden, um oben zu beginnen (das, was Sie erwarten würde, wenn die Arbeit in Fenster Koordinaten), stellen die Inhalte entsprechend verrechnet (sofort nach Einstellung). Dadurch erhalten die erwarteten Ergebnisse/Verhalten.
Ein ausführlicheres Beispiel ist in den bearbeiteten code unten.
Eine "fix" erlauben das Blättern in der Fenster-Koordinate (positive Y-Achse nach unten) kann die Einstellung der Erweiterung, dies würde von Ihnen verlangen, um den Wiederaufbau der cocos2dx Bibliothek und wirken sich auf alle Projekte (auch andere Beispiel-code, den Sie versuchen können).Ein weniger aufdringlich hack, ist zum Maßstab der ScrollView Instanz auf -1 und die Kinder der container-Knoten auch auf -1. Sie haben auch die Neupositionierung der Kind-Knoten unter Berücksichtigung der inversen Skala. Das Ergebnis der Skalierung auf beiden Ebenen ist der Inhalt (Kind-Knoten) angesehen werden, gerade (nicht gekippt). Das Ergebnis der Skalierung der ScrollView " -1 " ist, dass das scrollen geschieht für Sie in der erwarteten Richtung. Hinweis: obwohl dieses "Update" flip scrolling in der X-Achse als auch und damit ist nur geeignet, wenn Sie möchten, scrollen Sie vertikal (CCScrollViewDirectionVertical
).Auch beachten Sie, dass die beiden Updates sind die oben genannten gegenseitig, tun nicht gelten beide.Antwort jetzt die cocos2d-x-forum auch.
InformationsquelleAutor PAT
@Zennichimaro,
@PAT ' s Antwort ist richtig und ist im wesentlichen eine vereinfachte version
In diesem Sinne, beachten Sie, dass 3 Dinge sind wichtig:
CCScrollView::setViewSize()
- Sie deutlich verpasste diesem einen, es werden die Breite und Höhe des sichtbaren Raumes (die Blaue box, ich denke, es ist Ihre gesamte Fenstergröße, wenn Sie wollen, dass es Vollbild)CCScrollView::setContentSize()
- dies unterscheidet sich von setContentOffset, sieht aus wie Sie haben verwechselt diese zu setContentOffset, wie auch immer, diese sollten gesetzt werden, um die Größe des gesamten Containers (die rote box, habt Ihr wahrscheinlichccp(windowSize.width,2496.0f)
)CCScrollView::setContentOffset()
- wenn Sie möchten, positionieren Sie es so, dass die oberste sichtbar ist zunächst das minimum und maximum angegeben ist, durch die kleinen grauen Rechteck-box in der Antwort (die graue box, habt Ihr wahrscheinlichccp(0.0f, windowSize.height-2496.0f)
)InformationsquelleAutor Hakim Hauston
Eine kürzere Antwort wäre:
Da der Ankerpunkt in die linke untere Ecke, wird der erste offset nicht null, aber eine negative Zahl.
InformationsquelleAutor mtet88
Wenn jemand eine scrollview wie in mmo-Spiele-chat-Tabellen (fügt Nachrichten nach unten und automatisch scrollt nach unten) dann vielleicht jemand findet das nützlich:
Teil des Codes meiner ChatTableView.h
InformationsquelleAutor Dainius Kreivys