Lassen Sie den Benutzer einen Polygonkörper und ein Bild zeichnen


7

In meinem Spiel möchte ich dem Benutzer eine Zeichenfunktion zur Verfügung stellen.

Durch Freihandzeichnen erstellt der Benutzer eine Polygonform. Dann muss ich in meiner Spielimplementierung einen Körper für die gefundenen Eckpunkte erstellen und ein Bild basierend auf dieser Polygonform erzeugen.

Mein Problem ist, wie man ein Bild erstellt, das mit den vom Benutzer bereitgestellten Scheitelpunkten übereinstimmt. Ich habe gehört , dass cocos2d etwas genannt hat Bildmaskierung . Ich verstehe nicht, wie ich es in AndEngine implementieren könnte. Könnte jemand helfen?


Dies ist ein 2D-Bild, das ich annehme. Was versuchst du jetzt?
Joncodo

Zeichnest du nur deinen eigenen Charakter? Oder ist es eher so, als würde man eine Karte zeichnen oder etwas, bei dem die Eckpunkte etwas mit dem tatsächlichen Gameplay zu tun haben (außer zu definieren, was sichtbar ist)? Wenn es nur visuell ist, können Sie die Zeichnung des Benutzers einfach auf ein Quad legen und diese verschieben / transformieren, anstatt tatsächliche Scheitelpunkte zum Biegen zu erstellen.
Mario

Ich habe nur einen Ausgangspunkt, um zu arbeiten, der im folgenden Link beschrieben wird: emanueleferonato.com/2011/08/05/… . Jeder andere Vorschlag hilft mir also.
Siddharth

Antworten:


1

Das ist eine wirklich interessante Frage.

Ich denke, die Art und Weise, wie Sie dies mit Box2d tun könnten, wäre, alle Punkte in einer Art Array zu speichern und sie dann in die Polygonfunktion einzufügen.

Ich habe selbst noch nie eine Poly benutzt, aber danach zu urteilen:

/programming/4360084/creating-complex-shapes-with-box2d

Möglicherweise können Sie die Funktion createShape () verwenden.

Woran ich mich erinnere, ist, dass es definitiv eine Möglichkeit gibt, Vektoren in ein Gerät einzulesen. Die logischste Möglichkeit, dies zu tun, wäre eine Art Stapel.

Wenn Sie die Punkte bereits basierend auf Benutzereingaben erfasst haben, müssen Sie sie einfach in die box2d poly-Funktion einspeisen, ein Gerät / einen Körper oder so weiter erstellen und dann Ihrer Welt hinzufügen.

Was das Bild angeht, bin ich mir ziemlich sicher, dass Sie dies mit opengl tun können, aber ich bin mir nicht sicher, was Sie genau meinen. Wenn Sie nur möchten, dass sie eine Amöbenform zeichnen und diese dann mit einer Volltonfarbe füllen können, sollte dies einfach sein.

Wenn Sie jedoch ein vorhandenes Bild aufnehmen und es so verschieben möchten, dass es in die Form des Geräts passt, ist dies schwierig. Ich bin mir sicher, dass Sie es schaffen können. Hier ist ein Beispiel dafür, wie Blitting mit opengl aussieht (beachten Sie, dass dies in Java ist).

                glPushMatrix();
                glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
                glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
                dirPosd = i.shield.getPosition().mul(30);
                glTranslatef(dirPosd.x, dirPosd.y, 0);
                glRotated(Math.toDegrees(i.shield.getAngle()+52.9), 0, 0, 1);
                glColor3f(1,1,1);
                animationY.bind();
                sizer = 40;
                glBegin(GL_QUADS);
                glTexCoord2f(0f, 0f);

                glVertex2f( i.shield.getPosition().x - sizer-4, i.shield.getPosition().y - sizer-2);     //NW
                glTexCoord2f(1, 0);
                glVertex2f( i.shield.getPosition().x + sizer-4, i.shield.getPosition().y - sizer-2);   //NE
                glTexCoord2f(1, 1);
                glVertex2f( i.shield.getPosition().x + sizer-4, i.shield.getPosition().y + sizer-2); //SE
                glTexCoord2f(0, 1);
                glVertex2f( i.shield.getPosition().x - sizer-4, i.shield.getPosition().y + sizer-2);   //SW
                glEnd();
                glPopMatrix();

Ihre Lösung befindet sich irgendwo zwischen glBegin () und glEnd () und umfasst die Bearbeitung von glTexCoord2f () und glVertex2f (). Ich habe ein bisschen damit herumgespielt und bizarre Schrägstellungen erzielt, und ich bin sicher, dass Sie damit das erreichen können, was Sie versuchen zu tun.

Tatsache ist, ich habe keine Ahnung, wie es tatsächlich geht. Wahrscheinlich müssen Sie sich eingehend mit opengl befassen und sich auf einige der von mir erwähnten Funktionen konzentrieren.

BEARBEITEN >>>

Hinweis: Ja, dieser Code, den ich gepostet habe, ist offensichtlich ein Chaos, aber der Zweck ist es, ein grobes Beispiel zu liefern (aber es funktioniert). Für die Funktionalität, die Sie benötigen, benötigen Sie ein kompetentes Verständnis der opengl-Bibliothek.


-1

Warum lässt du den Benutzer nicht einfach direkt auf ein Bild zeichnen? In diesem Fall wäre eine Konvertierung nicht erforderlich. Sie können dieses Bild dann auf ein Quad legen und es in Ihrem Spiel so rendern.


Vielen Dank für die ungeklärte Ablehnung.
Tara
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.