Breakout OPENGL
-
Hallo,
ich habe ein Breakout Clone mit Opengl , glut in C programmiert. Nun möchte ich eine Funktion einbauen, sodass zu einem beliebigen Zeitpunkt, ein Item auf dem Bildschirm erscheint, welches (wenn von der Kugel getroffen) dann die Größe vom Board, Ballgeschwindigkeit o. Ä. verändert.
Meine Ideen dazu lassen sich bisher aber nicht umsetzen, deswegen poste ich sie erstmal nicht. Das Problem besteht bei mir darin, die Funktion nur für einen bestimmten Zeitraum aufzurufen.
Hat jemand einen Realisierungsvorschlag??
-
Wie realisierst du denn bisher die ganzen Zeitabläufe in deinem Spiel!?
-
Über einen Timer, der alle 10ms aufgerufen wird und die Veränderungen neu zeichnet. Deswegen kann ich diese Funktion auch nicht über den Timer aufrufen, denke ich?!
-
Wieso, du darfst deine Funktion eben nur innerhalb des bestimmten Zeitraumes aufrufen und sonst eben nicht!?
-
Und wie definiere ich den bestimmten Zeitraum??
Zum Beispiel alle 10sekunden für 5sek aufrufen?Also mein Timer wird so aufgerufen
glutTimerFunc(10, timer, 0);und zeichnet
glutDisplayFunc(drawScene);alle 10ms neu. Wie kann ich jetzt in drawScene den Aufruf gestalten, das in dem oben geannten Zeitraum, ein Punkt zum Beispiel gezeichnet wird
-
du rufst drawscene alle 10ms auf. Willst alle 5sek beispielsweise was machen. Dann zähl doch einfach in drawscene wie oft es aufgerufen wurde und sobald es 5000/10 = 500 mal aufgerufen wurde setzt du den zähler wieder auf 0 und malst deinen punkt oder was auch immer.
//edit funktioniert natürlich nur wenn drawscene relativ schnell von statten geht und zu genau ist es auch nicht.
-
Das kann ich nachvollziehen, nur müsste ich dann ja auch noch einen zweiten Zählindex einführen, der erneut bis 500 zählt, damit der Punkt auch 5s gezeichnet wird und nicht einmal gezeichnet und nach 10ms wieder verschwindet. Irgendwie sehr umständlich, gibt\\'s da nicht vielleicht eine sauberer Lösung?
Es funktioniert, allerdings wird das gesamte Spiel dadurch sehr langsam...
-
Teejay90 schrieb:
Das kann ich nachvollziehen, nur müsste ich dann ja auch noch einen zweiten Zählindex einführen, der erneut bis 500 zählt, damit der Punkt auch 5s gezeichnet wird und nicht einmal gezeichnet und nach 10ms wieder verschwindet. Irgendwie sehr umständlich, gibt\\'s da nicht vielleicht eine sauberer Lösung?
Es funktioniert, allerdings wird das gesamte Spiel dadurch sehr langsam...
saubere lösungen dauern noch länger weil du dort genauer zählen musst.
Wieso wird das Spiel sehr langsam wenn du pro frame eine zahl inkrementierst und dann prüfst? das leuchtet mir nicht ein das braucht gerade mal ein paar takte. Zeig mal deine implementierung. Selbst auf ner 1Mhz CPU müsstest du das mehrere hundert-tausend mal pro sekunde machen können.