2D-Spiel Fragen und Hilfe bei Programmierung

Ok, hat funktioniert.
Wede mich dann morgen mal mit den Mouse Events in Glut beschäftigen, zum Verschieben der Spielfigur.
 
*aufhorch* berichte ausführlich - sowas such ich auch noch :ugly:

hab heute mal mal spaßenshalber fix übder die alte ogl1 version meines ur objectloader teils geschaut (also wo er die mesh-daten aus dem file liest) und da wird nur jede 2. fläche angezeigt :/ najut, bei manchen dingern gehts komischweise. ach was weis ich ^^ aber fetzt scho son bissl. benötigt aber wohl e weng finetuning noch ^^
 
So, jetzt gibts ein Update zum aktuellen Fortschritt.
Probierts aus, die Tasten sind wie gehabt, ihr könnt jetzt auch die Maus benutzen.
Die Demo mag sinnlos erscheinen, ist aber auch taufrisch aus der Entwicklung:daumen:.

Als nächstes kommt wahrscheinlich ein Münzsystem und Boni, Anregungen fürs fertige Spiel (Gameplaytechnisch) sind gerne willkommen:)

Ihr könnt ja ne kurze Rückmeldung geben, wies läuft.
 
Ich hab mal wieder ne Frage, hab heute das Snake-typische Fress-System integriert.
Wie kann ich mit OpenGL bewerkstelligen, dass bestimmte Objekte immer im Vordergrund sind? Am liebsten würde ich Attribute vergeben.

HAt das was mit dem "Alpha-Test" zu tun?
 
tiefenpuffer ausstellen -> glDisable(GL_DEPTH_TEST);

opengl zeichnet ein objekt nach dem anderen (logisch ^^). ein schon gezeichnetes objekt wird dann vom nächsten überpinselt. der tiefentest bewirkt nun, dass die z-koordinate im tiefenpuffer gespeichert wird (also für jeden pixel einzeln). mit aktiviertem tiefentest vergleicht er dann die z-werte der schon bestehenden objekte (also das, was im puffer steht) mit denen des neu zu rendernden objekts. is das neue objekt (am jeweiligen pixel) näher an der kamera als alle anderen, dann wird das dortige pixel im color-buffer überschrieben und der tiefenwert im depth-buffer aktualisiert. joa, ohne tiefentes - wird wieder blindlinks übermalt ^^

also erst szene malen, dann gui ohne tiefentest. und glEnable(GL_DEPTH_TEST); nich vergessen ^^
 
Äh du meinst MIT glEnable(GL_DEPTH_TEST)! :ugly:

Ansonsten kommts ja auf die Reihenfolge des Zeichnens drauf an, was man eben NICHT will.

Nur bei Spiegelungen stellt man den Depth-Test aus.

Oder haste das gerade SEHR unglücklich erklärt?
 
naja, wenn er erzwingen will, das irgendwas immer im vordergrund is - beim zeichnen davon depth test aus und er überschreibt alles, was dahinter is. natürlich sollte man sowas am ende der renderei machen. wo es noch sinn machen kann is bei ner skybox (wie auch immer geartet) zu beginn der szene. depthtest aus, skybox malen und dann die szene reingemalt mit reaktiviertem depthtest. da die skybox meist ned allzugroß is, würde mit aktivem depth testing beim malen später die "halbe" szene ned gerendert werden, da sie ausserhalb der skybox läge ^^
 
Ok, aber in meiner gesamten 2d-Grafik habe ich keine z-Koordinate:hail:.
Sollte ich da noch eine erstellen, sodass die Objekte theoretisch (ist ja nicht sichtbar) hintereinandr lägen?
 
DAS ist halt genau deine Entscheidung als Programmierer/Entwickler ;)

Wie du siehst, führen viele Wege nach Rom. DarkMo hat dir einen genannt und ich auch. BEIDE! haben ihre Vor- als auch Nachteile. Kommt immer drauf an, wie sich die ganze Sache später weiterentwickeln soll. Oft gibt es sogar einfach zwei gleichwertige Lösungen, wovon die eine schneller ist als die andere (hier wohl das zeichnen am Ende, aber du musst dir halt SICHER! sein, das du danach nichts mehr machst) und manchmal gibt es sogar mehrere Lösungen, die auch noch am Ende gleich schnell sind.

Das sind halt die Entscheidungen, die man fällen muss, und jeder Entscheidung beeinflusst das Gesamtkonzept, weil sich dann manche Sachen geschickt machen lassen, oder eben nicht....

Deswegen macht Softwareengineering auch bei größeren Projekten durchaus Sinn ;):schief:
 
So, ich hab das Grundzeugs des Spiels soweit fertig, jetzt fehlt nur noch enn Menü das erscheint wenn man das Spiel startet/stirbt und fragt ob man n och einmal spielen möchte.

Ich arbeite aktuell noch an einem letzten "Extra", dass alle 500 Punkte (Toleranz 10 Punkte) ausgelöst werden soll.
Nur bin ich grad zu blöd, einen Algorithmus zu finden der mir sagt, ob alle 500 Punkte +- 10 erreicht ist.

BSP: Wenn es eine Funktion wäre, dann sollte sie positiv zurückgeben bei z.B. 500, 1000, 1005, 2010, 3009, 8000 und negativ bei z.B. 0, 400, 499, 8011, 4022, 2460 usw.

Fällt euch da was ein?:hail:
 
Hallo, ich habe deine Spielentwicklung schon eine Weile hier mitverfolgt.
Finde ich ne super Sache und auch ne nette Idee. Ist mal wirklich was, das man mal fix zwischendurch ein Stück spielen kann ;)
Leider kenne ich mich mit OpenGL nicht so aus, deswegen habe ich mich bisher nicht beteiligen können.
Ich glaube aber, bei deiner aktuellen Frage kann ich dann doch auch mal was beisteuern:

Ich würd das einfach über die Modulo-Funktion regeln. Sprich "Punktestand Modulo 500". Wenn das Ergebnis positiv und kleiner gleich 10 ist, oder zwischen 490 und 499 liegt, hast du deinen +/- 10 Toleranz.
Ich verstehe nur nicht ganz, warum es bei 499 auch negativ zurückliefern soll? Das ist doch +/- 10 von 500?
Ich hoffe, ich konnte dir helfen :)
 
Zuletzt bearbeitet:
Sodele, hab jetzt ein kleines Menü integriert und einen Highscore, der auch nach dem Neustart noch gültig ist.
Was würdet ihr mir bezüglich der Verschlüsselung von einer Zahl empfehlen?
EIgnet sich da das Prinzip die Bits mit ^ umzudrehen oder gibts da was besseres? Es muss nicht bombenfest verschlüsselt werden, man sol nur nicht die Datei öffnen können und eine Million reinschreiben damit man dann einen unmöglichen Highscore bekommt.
Gegen Hacker muss der Schutz nicht herhalten, nur gegen "dumme Cheater" :)
 
So, das Spiel ist jetzt komplett fertig, einige skalierungsbugs wurden noch gefixt und die Datei, in der die Punkte gespeichert werden besteht nur aus Buchstaben und Zeichen:daumen:.
Das mit der OpenCL Implementierung lass ich sein, da der Nutzen ziemlich gering wäre (CPU Limitiert nicht, bei mehreren Bällen verändert sich dioe Framerate nicht).

Als nächstes wird dann - wenn Visual Studio 2012 draußen ist - eine Portierung in eine Metro App vorgenommen (ohne neuen Funktionen), sodass ich das Spiel vll. inm den AppStore von Windows 8 stellen kann.:schief:

Wenn dass klappt, wirds vll. noch auf Windows Phone 8 portiert.:daumen:

Wer den Quelcode oder das fertig kompillierte spiel haben möchte, meldet sich einfach bei mir. Hab nur keine Lust irgendwelchen Leuten die von google hierher kommen das Zeug in den Arsch zu schieben:D
 
Zuletzt bearbeitet:
Jetzt muss ich den Thread nochmal auskramen, da ich gerade dabei bin das Ganze unter Linux zu kompilieren.

Ich verwende CodeBlocks mit dem GNU GCC Compiler.
Seltsamerweise sind alle benötigten Bibliotheken schon enthalten gewesen :daumen: und die Quelldateien wurden auch alle ohne Fehler kompiliert, beim Linken jedoch kommt folgender Fehler:

Code:
g++  -o Snake-Klon .objs/ballverwaltung.o .objs/bewegung.o .objs/kollision.o .objs/renderer.o .objs/Snake-Klon.o .objs/spiel.o    
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
.objs/renderer.o: In function `displayliste()':
renderer.cpp:(.text+0x17): undefined reference to `glGenLists'
renderer.cpp:(.text+0x2f): undefined reference to `glNewList'
renderer.cpp:(.text+0x39): undefined reference to `glBegin'
renderer.cpp:(.text+0x99): undefined reference to `glVertex2f'
renderer.cpp:(.text+0xb0): undefined reference to `glEnd'
renderer.cpp:(.text+0xb5): undefined reference to `glEndList'
renderer.cpp:(.text+0xca): undefined reference to `glNewList'
renderer.cpp:(.text+0xcf): undefined reference to `glPushMatrix'
renderer.cpp:(.text+0x150): undefined reference to `glScalef'
renderer.cpp:(.text+0x15a): undefined reference to `glBegin'
renderer.cpp:(.text+0x1d2): undefined reference to `glVertex2f'
renderer.cpp:(.text+0x1ed): undefined reference to `glEnd'
renderer.cpp:(.text+0x1f7): undefined reference to `glBegin'
renderer.cpp:(.text+0x20a): undefined reference to `glColor3f'
renderer.cpp:(.text+0x219): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x228): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x237): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x246): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x24b): undefined reference to `glEnd'
renderer.cpp:(.text+0x255): undefined reference to `glBegin'
renderer.cpp:(.text+0x268): undefined reference to `glColor3f'
renderer.cpp:(.text+0x277): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x286): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x295): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x2a4): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x2a9): undefined reference to `glEnd'
renderer.cpp:(.text+0x2b3): undefined reference to `glBegin'
renderer.cpp:(.text+0x2c6): undefined reference to `glColor3f'
renderer.cpp:(.text+0x2d5): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x2e4): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x2f3): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x2f8): undefined reference to `glEnd'
renderer.cpp:(.text+0x302): undefined reference to `glBegin'
renderer.cpp:(.text+0x315): undefined reference to `glColor3f'
renderer.cpp:(.text+0x324): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x333): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x342): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x351): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x356): undefined reference to `glEnd'
renderer.cpp:(.text+0x35b): undefined reference to `glEndList'
renderer.cpp:(.text+0x370): undefined reference to `glNewList'
renderer.cpp:(.text+0x37a): undefined reference to `glBegin'
renderer.cpp:(.text+0x389): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x398): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x3a7): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x3b6): undefined reference to `glVertex2i'
renderer.cpp:(.text+0x3bb): undefined reference to `glEnd'
renderer.cpp:(.text+0x3c0): undefined reference to `glEndList'
renderer.cpp:(.text+0x3d5): undefined reference to `glNewList'
Process terminated with status 1 (0 minutes, 19 seconds)
50 errors, 0 warnings (0 minutes, 19 seconds)

und

Code:
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crt1.o||In function `_start':|
(.text+0x20)||undefined reference to `main'|
.objs/renderer.o||In function `displayliste()':|
renderer.cpp|| undefined reference to `glGenLists'|
renderer.cpp|| undefined reference to `glNewList'|
renderer.cpp|| undefined reference to `glBegin'|
renderer.cpp|| undefined reference to `glVertex2f'|
renderer.cpp|| undefined reference to `glEnd'|
renderer.cpp|| undefined reference to `glEndList'|
renderer.cpp|| undefined reference to `glNewList'|
renderer.cpp|| undefined reference to `glPushMatrix'|
renderer.cpp|| undefined reference to `glScalef'|
renderer.cpp|| undefined reference to `glBegin'|
renderer.cpp|| undefined reference to `glVertex2f'|
renderer.cpp|| undefined reference to `glEnd'|
renderer.cpp|| undefined reference to `glBegin'|
renderer.cpp|| undefined reference to `glColor3f'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glEnd'|
renderer.cpp|| undefined reference to `glBegin'|
renderer.cpp|| undefined reference to `glColor3f'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glEnd'|
renderer.cpp|| undefined reference to `glBegin'|
renderer.cpp|| undefined reference to `glColor3f'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glEnd'|
renderer.cpp|| undefined reference to `glBegin'|
renderer.cpp|| undefined reference to `glColor3f'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glEnd'|
renderer.cpp|| undefined reference to `glEndList'|
renderer.cpp|| undefined reference to `glNewList'|
renderer.cpp|| undefined reference to `glBegin'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glVertex2i'|
renderer.cpp|| undefined reference to `glEnd'|
renderer.cpp|| undefined reference to `glEndList'|
renderer.cpp|| undefined reference to `glNewList'|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build finished: 50 errors, 0 warnings (0 minutes, 19 seconds) ===|

Kennt jemand das Problem ?
 
Hi,
ich benutze kein Codeblocks und weis daher nicht wo du das ändern kannst. Auf jedenfall musst du an deinen Compileraufruf -lopengl32 anhängen, um ihm zu sagen das er diese Library mitbenutzen soll. Dann sollten die fehler weg sein.
 
nimm einfach den GCC und schreib ein Makefile.

Auch wenns Arbeit ist, du lernst was dadurch, und wirst es immer und immer und immer wieder brauchen, wenn du in Linux Sachen machst.
 
Zurück