Autor Beitrag
Dr. Hallo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Di 05.04.11 13:17 
hier ein asteroids clone..

Home: pc-002.bplaced.net/sdlspaceshooter.html
Download: pc-002.bplaced.net/d...s/monsteroids273.zip

v2.73
-Der Highscore kann jetzt direkt hochgeladen werden.
-Die alte Highscoreliste gibt es leider nicht mehr.
-Sonst hat sich nichts geändert.

v2.72
-Minen können sich gegenseitig auslösen, wenn sie zu dicht beieinander liegen.
-Aus Monsterkollisionen gehen, öfter als vorher, neue Monster hervor.
Dadurch wird das Spiel anspruchsvoller.
-Die Online-Highscoresliste muss jetzt per Button heruntergeladen werden.
-Änderung bei der Highscoreeinreichnung.


------------------------------------------------------------------------------------------------------

DIE MISSION: Monster und Würste abballern... Wenn Ihr 3 Minuten überlebt, dann Sieg. Wenn Zeitboni
eingeheimst wurden dauerts länger. Nach hinten raus gibt's Zeitboni!

MONSTEROIDS: Die Aggressivität der Monster äußert sich einmal in der Häufigkeit mit der sie generiert werden.
Zu Beginn eines Levels ist die Häufigkeit niedrig und steigert sich dann bis zum Levelende. Pro Level
muss eine bestimmte Anzahl von Monstern erledigt werden. Die Anzahl steigt mit den Leveln an. Dadurch nimmt
die nötige Zeit je Level zu und damit die Monsterhäufigkeit. Zum andern wächst die Schnelligkeit der Monster
Levelmäßig kontinuierlich. Ihre Wendigkeit nimmt zu je länger sie leben, also rumfliegen.

WÜRSTE: Würste haben eine levelmäßig wachsende Panzerung gegen's Lasergeschoss. Die Panzerung wird durch
Beschuss solange geschwächt bis die Wurst Explodiert. Für Würste Schuss ggf. bündeln (s. Controls).

DIVERSE REGELN: Der Spieler kriegt bei 100.000 Punkten eine Aufrüstung, heist: Effektivere Waffe + bessere
Panzerung. Folgende Boni zum einsammeln für Spieler Aufrüstungen stehen zu Verfügung:
Extra Life Laser Upgrade Shield Doublefire Repair Spaceship. Außerdem gibt's Zeitboni nach
Ablauf der halben Zeit. Höhe der Zeitboni richtet sich nach Anzahl Leben und Schaden am Raumschiff. Es ist
also wichtig, die Leben möglichst hoch und den Schaden niedrig zu halten um das Spiel zu verlängern. Es gibt
Punkte-Boni für's Abschließen eines Levels: Mehr Punkte gibts, je schneller der Level beendet wurde, und je
weniger Monster entkommen konnten. Je mehr Leben Ihr habt, desto zahlreicher werden die Gegner und umso mehr
Schaden richten sie an. Dadurch ist das halten von bspw. 5 Leben schwieriger als das von 3. Erst wenn man
Level 15 erreicht hat kann man 3 Pausen in Anspruch nehmen (Pause-Taste drücken).

PUNKTEVERGABE & PANZERUNG: Je kleiner das Monster, desto mehr Punkte gibt's. Würste bringen die meisten Punkte.
Je größer das Monster desto mehr Schaden erleidet die Panzerung (Damage) des Spielers. Die Panzerung von
Würsten kann durch Beschuss geschwächt werden, sodass sie weniger Schaden anrichten.

BONI: Eine Liste von Boni, die momentan zur Verfügung stehen ist unten links eingeblendet. Daraus wählt
ihr euch den aus der als nächstes generiert werden soll (s. Controls). Ein Bonus kann ignoriert werden, indem
er nicht eingesammelt wird. Wird ein Bonus eingesammelt, so blockiert dieser 15 Sekunden lang die Generierung
neuer Boni! Tip für Experten: Kommt ein Bonus geflogen, sofort nächsten Bonus auswählen und weiter Monster
erledigen, bis ein weiterer Bonus geflogen kommt. So könnt ihr dann gleich 2 (oder mehr) Boni aufsammeln.

Eine sehr gute Punktezahl = 200.000

user defined image




vg


Zuletzt bearbeitet von Dr. Hallo am Mo 28.07.14 16:21, insgesamt 67-mal bearbeitet

Für diesen Beitrag haben gedankt: NoLe_Kazuik, Xion
Dr. Hallo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Di 21.06.11 23:50 
neu in v1.41
-bug fix
-nach unten vergrößerter bildschirm.
-ZEIT-BONÜSSE abhängig von den noch zur verfügung stehenden leben nach ablauf der HALBEN zeit:
Regeln hierfür wie folgt...

1 leben -> nix
2 leben -> 15 sek.
3 lenen -> 30 sek.
4 " -> 45 sek.
5 " -> 60 sekunden.

dadurch kann sich das spiel verlägern (logisch).

-Bremsen = ALT

vg
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Mi 22.06.11 07:03 
1) Warum hängst du das nicht hier als Anhang dran (1,83MB < 2MB Grenze)?
2) Beschreibe dein Spiel etwas näher (am besten im Eingangspost), damit sich auch alle was drunter vorstellen können.

Das Spiel ist richtig nett gemacht. Allerdings scheitere ich immer ... Irgendwann bin ich einfach mal in der Mitte geblieben und habe Dauerfeuer gemacht und mich nur im Kreis gedreht - hat bis Level 5 einwandfrei funktioniert. Vielleicht wäre hier eine Feuerpause angebracht, sodass man nicht einfach nur dauer-drücken kann, sondern dass sich das auch kurz erholen muss. Eine deutsche Variante wäre vielleicht auch nicht schlecht, auch wenn mich das persönlich nicht stört.
Zum Schluss noch: Die Musik steht anfangs auf so nen niedrigem Wert, die hör ich gar nicht. Und Effekt-Geräusche kamen bei mir auch nicht bei rum. Erst als ich die Musiklautstärke auf 15 gestellt hab hörte man etwas, dann auch Geräusche beim "Feuern".
Von der Grafik (auch in den Menüs) gelungen :D

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
Dr. Hallo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Mi 22.06.11 12:34 
@Webo

Danke für die Anregung.. :)

Ich werd bei zeiten mal in ruhe drüber nachdenken und mich drum kümmern. Die audioeinstellungen waren für mein system ok
aber vielleicht hab ich die lautstärke auch auf anschlag zu stehen mal kucken. :lupe:
Das dauerfeuer braucht man schon um das überhaupt bis zum ende zu schaffen, aber ok mal drüber nachdenken.

vg
Dr. Hallo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Do 30.06.11 23:13 
Hier einmal noch ein paar kleine Änderungen:

-Der Spieler driftet jetzt (ähnlich wie bei Neave Asteroids) Vielleicht wird dadurch etwas leichter.
-Monster reagieren etwas träger.
-Punkte nehmen mit dem Level zu (nicht mehr mit der Spielergeschwindigkeit)
-Die Musik Voreinstellung hab ich auf 0 gesetzt, wer will kann das ja ändern.
-Bug Fix Zeitboni

das 'Problem' mit dem Dauerfeuer hab ich noch nicht gelöst. Man muss halt immer schön die Spacetaste drücken bis der Arzt kommt. Ich seh ein das ist nicht so doll aber sooo doll solls ja auch nicht sein ;-)

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

himmel und hölle! sry schon wieder fehler beim posten


Zuletzt bearbeitet von Dr. Hallo am Do 30.06.11 23:23, insgesamt 1-mal bearbeitet
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 15.08.11 09:31 
Also mir gefällts. Die Schwierigkeit find ich sehr gelungen. Für ne Langzeitmotivation bräuchte man irgendwie eine gemeinsame Highscoreliste(online). Hab "gewonnen" und 999k Punkte (Lvl 11) gemacht. Nur könnte man ja da noch viel mehr rausholen durch die Zeit-Boni.

Dass man bremsen kann seh ich jetzt erst, ich finds ohne irgendwie witziger weil man dann nicht ruhig stehen bleibt wenn man wieder gierig auf ein Item zuflogen ist. Macht das einsammeln ziemlich gefährlich ;)

Achja, das mit dem Dauerfeuer macht eigentlich nichts aus. Man hat eigentlich genug mit Zielen zu tun. Das man durch im Kreis drehen nicht gewinnen kann ist sehr gut (dachte schon, ich kann dein Spiel austricksen).

Das einzige was mich etwas gestört hat (War aber durch die relativ großen Monster nicht so schlimm), ist, dass man nicht genau zielen kann. Da wäre eine Steuerung per Maus (Schiff->Maus = Schussrichtung) interessant. Müsste man testen, ob das besser ist.

//Edit: hab jetzt 2.421.100 Punkte (Level 16). Und das ohne Bremse ;)
Ich glaube man kann das unendlich hochtreiben, da die Zeit, die man dazu bekommt, mehr ist als ein Level dauert.

Also die Bremse solltest du ausbauen (bzw. ich benutze sie nicht). Ist ja auch unrealistisch, eine Rakete bremst durch Umkehrschub (umdrehen und Gasgeben). Macht auch viel mehr fun ;)

Die Hitbox vom Raumschiff ist Klasse gemacht :D Öfters dreht man sich Haarscharf um ein grünes Monster rum...hat was von Matrix :) Bei vielen Spielen geht das nicht so, da die Hitbox ne Box ist, und man dann schon stirbt, obwohl es deutlich vorbei war.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Dr. Hallo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Di 16.08.11 12:06 
Hi Xion,
und danke für die Kritk. Ich werd mir deine Anregungen mal durch den Kopf gehen lassen. Für die online Highscore liste braucht es aber bestimmt noch etwas Zeit, weil ich kein Plan habe, wie das geht.
Die Hitbox ist einfach nur ein kreis, also eher ein Hitcircle. Das ist schon ne ganz gute Näherung, ich hab das aber mittlerweile durch eine 'Per Pixel' Kollisionsprüfung ersetzt, was dann wirklich genauer nicht mehr geht. Dieses Update stelle ich hier dann demnächst mal rein.
Unendlich lang kann das Spiel nicht dauern, denn die Anzahl der pro Level erzeugten Monster wächst unbegrenzt, so dass die Zeitboni irgenwann nicht mehr Ausreichen um das zu kompensieren.
Ja die Bremse ist zwar unrealistisch (in diesem ja sonst extrem realistischen Spiel;-)) aber ich benutz die schon. Aber wie dein Punktestand zeigt braucht man die nicht wirklich, denn damit bist Du besser als ich mit nur 2.180.600 Punkten Bestwert bisher. ;-)
vg
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Di 16.08.11 17:21 
user profile iconDr. Hallo hat folgendes geschrieben Zum zitierten Posting springen:
Für die online Highscore liste braucht es aber bestimmt noch etwas Zeit, weil ich kein Plan habe, wie das geht.
Also von Delphi aus sollte es nicht so schwer sein (idHTTP) aber du bräuchtest halt einen Server mit nem Progrämmchen, das dir die Highscores sortiert (eine Top 25 würde ja reichen, also nix mit Datenbank)

user profile iconDr. Hallo hat folgendes geschrieben Zum zitierten Posting springen:
Unendlich lang kann das Spiel nicht dauern, denn die Anzahl der pro Level erzeugten Monster wächst unbegrenzt, so dass die Zeitboni irgenwann nicht mehr Ausreichen um das zu kompensieren.
Das stimmt. Und wenn man dann noch in einem höheren Level DoubleFire einsammelt, dann gehts einen eh an den Kragen bei den Kettenreaktionen ;)

user profile iconDr. Hallo hat folgendes geschrieben Zum zitierten Posting springen:
Ja die Bremse ist zwar unrealistisch (in diesem ja sonst extrem realistischen Spiel;-)) aber ich benutz die schon.
Ich finds nur wirklich lustig, wenn das Ding durch die Gegend driftet nach dem Einsammeln :)

Überhaupt find ich das Spiel recht professionell gemacht. Das Spiel ist fehlerfrei, durchdacht, die Grafik ist gelungen, dann der Sound (sind das "Raubkopien" oder hast du die selbst erstellt?). Auch die Kolissionserkennung und die Reaktion der Monster beim "zerplatzen" ist super.

Weiter so :zustimm:

//Edit:
Bin übrigens über meinen Rekord nicht mehr gekommen...Anfängerglück ;)
Verwendest du Timebased Movement? Weil sonst könnte es sein, dass ich mit meiner alten Kiste (Notebook von 2004) im Vorteil bin ;)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Dr. Hallo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Di 16.08.11 23:43 
Zitat:
Also von Delphi aus sollte es nicht so schwer sein (idHTTP) aber du bräuchtest halt einen Server mit nem Progrämmchen, das dir die Highscores sortiert (eine Top 25 würde ja reichen, also nix mit Datenbank)

Wie gesagt, auf dem Gebiet bin ich völlig blöd, aber für die Zukunft mal schauen, was sich ergibt. Hm, das Programm ist halt in C++ geschrieben, da nützt mir Delphi glaub ich nicht weiter. Aber ich bin ein großer SDL Freund und die sieht glaubich auch hierfür für Bibliotheken vor. Was ja dann auch noch dazu kommt, ist ja, dass das Spiel dann auch noch, gegen Gamehacking gesichert werden müsste (aber welches Spiel ist dagegen schon gefeit).

Zitat:
Das stimmt. Und wenn man dann noch in einem höheren Level DoubleFire einsammelt, dann gehts einen eh an den Kragen bei den Kettenreaktionen

Daran hab ich gedacht, dass sich das ganze Programm nicht am Ende in einer einzigen explosionsorgie :-) aufhängt, denn ab Level 20 erhöhen sich die pro Zeiteinheit generierten Monster nicht weiter.

Zitat:
Ich finds nur wirklich lustig, wenn das Ding durch die Gegend driftet nach dem Einsammeln

Ja , ich mach die doofe (Spaß)Bremse beim nächsten Update weg!

Zitat:
sind das "Raubkopien" oder hast du die selbst erstellt?

Sagen wir mal so, nein es sind keine Raubkopien und nein ich hab sie nicht selbst erstellt ;-).

Zitat:
Bin übrigens über meinen Rekord nicht mehr gekommen...Anfängerglück

Das wars bestimmt nicht, Du kannst offensichtlich gut mit Tastaturen umgehen, denn dein erstes Ergebnis ist für Anfänger auch schon tip top.
Zitat:

Verwendest du Timebased Movement?

Ja.

vg
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Mi 17.08.11 16:14 
Mir gefällt Dein Spiel auch gut :-) Das zeigt mal wieder, dass gerade so "einfach aufgebaute" Spiele einen hohen Suchtfaktor haben können.

Xion hat folgendes geschrieben:
Also die Bremse solltest du ausbauen (bzw. ich benutze sie nicht). Ist ja auch unrealistisch, eine Rakete bremst durch Umkehrschub (umdrehen und Gasgeben).
Mit Bremse kann man das Raumschiff besser kontrollieren. Wobei ich es auch reizvoll finde, die Bremse wegzulassen. Zwei Schierigkeitsgrade, einer mit und einer ohne Bremse wären auch denkbar.

Der Sound und die Hintergrundmusik haben bei mir Aussetzer. Manchmal laufen Sound und Hintergrundmusik, manchmal wiederum nicht. Einmal setzte die Musik direkt nach einem "Game over" wieder ein. Meistens bleibt es bei mir jedoch still.

Gruß
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 17.08.11 17:05 
user profile iconrushifell hat folgendes geschrieben Zum zitierten Posting springen:
Xion hat folgendes geschrieben:
Also die Bremse solltest du ausbauen (bzw. ich benutze sie nicht). Ist ja auch unrealistisch, eine Rakete bremst durch Umkehrschub (umdrehen und Gasgeben).
Mit Bremse kann man das Raumschiff besser kontrollieren. Wobei ich es auch reizvoll finde, die Bremse wegzulassen. Zwei Schierigkeitsgrade, einer mit und einer ohne Bremse wären auch denkbar.

Vielleicht könnte man es so machen, dass Bremsen Punkte kostet. Das wäre dann auch einfach umzusetzen. Ist natürlich die Frage, wie man das balanciert. Oder dass man während man bremst nicht schießen kann (sich nicht drehen können fänd ich zu hart ;) )

Die Bremse braucht man aber unbedingt für den "PeaceMode" (siehe Anhang). Zuvor hab ich die Bremse erst auf 30 gestellt. Leider ist die Lenkung etwas ungenau dafür, so dass ich es nur 1 Minute lang mit 0 Punkten aushalte :zwinker:
Einloggen, um Attachments anzusehen!
_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
storestore
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Mi 17.08.11 18:08 
Cool weiter so
Dr. Hallo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Mi 17.08.11 23:25 
Tach,

Zitat:
Der Sound und die Hintergrundmusik haben bei mir Aussetzer. Manchmal laufen Sound und Hintergrundmusik, manchmal wiederum nicht. Einmal setzte die Musik direkt nach einem "Game over" wieder ein. Meistens bleibt es bei mir jedoch still.


Hi rushifell, ich kann mir das ad hoc nicht erkären. Vielleicht verträgt sich dein System nicht mit dem im Programm gesetzen Audioformat(Standard 16 Bit Sound).. Falls das Problem auch bei anderen auftritt könnt Ihr mir das ja hier bescheid sagen.

Zitat:
Vielleicht könnte man es so machen, dass Bremsen Punkte kostet. Das wäre dann auch einfach umzusetzen. Ist natürlich die Frage, wie man das balanciert. Oder dass man während man bremst nicht schießen kann )

Ja wär ne Überlegung Wert, ich mach aber erstmal ohne Bremse, weil ich erstmal wieder etwas Ordnung in meinen Spaghetticode bringen muss..

vg
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Do 18.08.11 16:22 
Hallo,

ich kann das Problem nun etwas eingrenzen. Beim ersten Start des Spiels funktionieren Musik und Sound einwandfrei. Sobald "Game over" kommt, geht nichts mehr. Auch bei einem Neustart des Programms kommt keine Musik und kein Sound mehr. Ein Neustart des PC's behebt das Problem übrigens auch nicht. Wenn ich eine Kopie des Spiels erstelle und diese Kopie starte, kommt wieder Sound ... bis zum "Game over". Und so lässt sich das schön weiter reproduzieren...

Ich benutze Windows Vista und habe Admin-Rechte.

Gruß
Dr. Hallo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Fr 19.08.11 12:02 
@rushifell: Danke für die Eingrenzung des Problems. Das hört sich jetzt so an als hätte das Problem was mit der monteroids.rio Datei was zu tun (oder auch nicht), wo ja die Settings und Scores gespeichert werden. um das Problem weiter einzugrenzen, kannst Du ja mal versuchen nur diese Datei (->monteroids.rio) zu Kopieren und zu kucken obs danach wieder läuft. Leider hab ich nicht die Möglichkeit unter Vista zu Testen.
vg Dr.Hallo
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Fr 19.08.11 16:10 
Also, sobald das "Game Over" auf dem Bildschirm erscheint, kommt kein Ton mehr. Das Überschreiben der Dateien (Kopieren und Ersetzten aus anderem Verzeichnis) bringt nichts. Es bringt auch nichts, wenn ich den Spiel-Ordner umbenenne. Das einzige, was etwas bringt, ist, wenn ich die exe umbenenne, z.B. in monsteroidsx. Dann kommt beim Neustart des Spiels wieder Musik und Sound. Wenn ich bis zum "Game Over" spiele, kommt allerdings auch wieder kein Sound. Wenn ich die exe wieder in monsteroids.exe zurück umbenenne, kommt immer noch kein Sound. Sehr merkwürdig. Der Knackpunkt muss beim Game Over liegen. Sobald "Game Over" erscheint, geht bzgl. des Sounds gar nichts mehr. Verlasse ich das Spiel vor dem Game Over, läuft alles normal. Vielleicht hast Du vergessen, irgend etwas im Speicher wieder freizugeben? Oder Beschreib doch mal, wie Du das mit dem Sound implementiert hast. Mit anderen SDL-Spielen hatte ich bisher keine Probleme :-(

Gruß
Dr. Hallo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Sa 20.08.11 00:15 
Danke fürs testen. Hört sich auch für mich sehr, sehr, sehr rätselhaft an, .. da weiß ich nicht einmal im Ansatz wo das dran liegt, denn eigendlich wird auch alles korrekt freigegeben.
Ich benutze den SDL_mixer. Also normalerweise, wird die Musik bei Erscheinen von Game Over langsam ausgeblendet indem die Lautstärke bis 0 ständig neu gesetzt wird.

also über eine Memberfunktion mit einem Timer..

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
void CAudio::FadeAwayMusic(float fFadeOutTime)
{
    fFadeOutTime *= 0.9;
    _fFadeTimer += g_pTimer->_fElapsed;
    if(_fFadeTimer <= fFadeOutTime)
    {
        _fMusicVolume = _nDefaultMusicVolume * (fFadeOutTime - _fFadeTimer) / fFadeOutTime;
        if(_fMusicVolume < 0) _fMusicVolume = 0;
        Mix_VolumeMusic(ToVolume128(_fMusicVolume, MAX_VOLUME));
    }
}


die wird in der Haupschleife so aufgerufen..

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
if(!_bGameFinished)
{
    _pMenu->RenderGameOver();
    _nResetDelay = 5;
    g_pAudio->FadeAwayMusic(_nResetDelay);
}



die Resource gebe ich am Spielende wieder frei..

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
void CAudio::Quit()
{
    ...
    Mix_FreeMusic(_pMusic);
    ...
}

naja, ich glaub das hilft nicht viel weiter, weil man das immer im Kontext betrachten muss und den ganzen Code kann ich hier unmöglich reinstellen, da blickt eh keiner mehr durch. Im nächsten Update mach ich vielleicht ne ini-Datei, wo man die audio daten verändern kann. Vielleicht find ich auch noch ein weg das mal unter Vista zu testen.
vg
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Sa 20.08.11 07:34 
Hallo,

also mit dem SDL_Mixer kenn ich mich nicht aus. Ich vermute mal dass, es mit dem Fade out zusammenhängt. Wenn ich das Spiel verlasse, läuft der Sound noch einwandfrei weiter. Nur, sobald ich das Game Over durchlaufe, läuft bei mir gar nichts mehr.
Es kommt auch kein Fade out, der Sound stoppt sofort. Lass doch einfach mal probeweise das Fade out weg oder probiers mal mit dem Fade out vom SDL_Mixer:
ausblenden Quelltext
1:
int Mix_FadeOutChannel(int which, int ms);					

und danach stellst Du die Lautstärke wieder normal.

Wann gibst Du die Resourcen wieder frei? Meinst Du mit Spielende das Programmende oder beim Game Over? Geladen werden die Dateien beim Programmstart, oder?

Freigegeben wirds bei Dir folgendermaßen?
ausblenden Quelltext
1:
2:
Mix_FreeMusic(_pMusic);
_pMusic = NULL;
Dr. Hallo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Sa 20.08.11 12:50 
Soviel zum Thema, warum einfach wenns auch kompliziert geht. Danke für den Tipp. Dadurch bin ich nämlich auf folgende Funktion gestoßen..

Mix_FadeOutMusic()

das ist das Gegenstück zu Deiner Mix_FadeOutChannel() Funktion..
damit sieht die Funktion jetzt so aus..

ausblenden C#-Quelltext
1:
2:
3:
4:
void CAudio::FadeAwayMusic(float fFadeOutTime)
{
    Mix_FadeOutMusic(fFadeOutTime * 1000);
}


Na, den Musikzeiger geb ich genau so frei, wie Du es gezeigt hast und zwar am Programmende, also nicht zwischen jedem einzelnen Spiel, dann müsste ich ja jedesmal die Musik wieder neu laden. Achso nein, mir fällt grad auf ich lade die Musik ja tatsächlich bei jedem neustart wieder neu..
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
void CAudio::PlayMusicGame()
{
    if(!_bIsMusicPlayin)
    {
        char buf[30];
        int i = rand() % _vMusFiles.size();
        sprintf(buf, "sounds/music/%s", _vMusFiles[i].c_str());
        _pMusic = Mix_LoadMUS(buf);

        Mix_PlayMusic(_pMusic, -1);
        _bIsMusicPlayin = true;
    } 
}


..Da siehst du aber mal dass ich den Zeiger nicht Freigebe! Ich glaub so oder ähnlich wärs besser..

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
void CAudio::PlayMusicGame()
{
    if(!_bIsMusicPlayin)
    {
        char buf[30];
        int i = rand() % _vMusFiles.size();
        sprintf(buf, "sounds/music/%s", _vMusFiles[i].c_str());
        if(_pMusic != NULL) Mix_FreeMusic(pMusic);
        _pMusic = Mix_LoadMUS(buf);

        Mix_PlayMusic(_pMusic, -1);
        _bIsMusicPlayin = true;
    } 
}


OK, ich bring dann erstmal demnächst die nächste Version, dann kannst Du nochmal testen und vielleicht bescheid sagen wenns weiter hackt.
Danke, Dr. Hallo
Dr. Hallo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: So 21.08.11 19:02 
Neu in Version 1.5

Optimierungen:
-Kollisionsprüfung (Per Pixel Collision), als Nebeneffekt
können sich jetzt die kleinen Monster auch zwischen den beiden lasern bewegen.
-Performance allgemein

Punktevergabe:
die kleinen Monster bringen jetzt die meisten Punkte, gefolgt von den mittleren und großen Monster.

Die Ausgangsspielzeit hab ich auf 3 Minuten runtergesetzt. Das ändert aber an der möglichen gesamtspieldauer nicht viel, denn man bekommt entsprechen früher (nach ablauf halber zeit) Zeitboni.

ini-Datei (monsteroids.ini):
Audiodaten können hier verändert werden.
@rushifell: falls das mit dem Musikausblenden nicht klappt, kannst Du in der ini-Datei den Key FadeOutMusic=n setzen. Vielleicht hilft das!?

Highscoreliste:
Die hab ich auf 25 Einträge erweitert und ein bischen Statistik hinzugefügt.
Außerdem, Man kann jetzt auch Umlaute beim Eintragen benutzen.

Monstergenerierung ist jetzt etwas unregelmäßiger.

Und die Bremse hab ich entfernt.

..so das wars eigendlich. Leider ist die Datei wieder etwas angeschwollen, was vor allem an einer gewissen ttf Datei liegt. Meldet Euch, falls irgendwas nicht funktioniert oder es verbesserungs Vorschläge gibt!