|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
JkerryZ JLI Master Trainee
Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 09.07.2004, 09:22 Titel: Spinnt der Compiler? |
|
|
Ich habe jetzt eine passende Musik für mein Spiel gefunden und hab sie auch erfolgreich eingebaut. Nun wollte ich die Musik in eine Schleife bauen, was zur Folge hatte, dass die Musik gar nicht mehr abgespielt wurde.
Dann habe ich die Schleife wieder ausgebaut und die Musik ging trotzdem nicht mehr. Dann habe ich von einer älteren Projektsicherung den Code-Teil übernommen an dem ich herumgewerkelt habe und ihn mit dem neuen ersetzt. Dann ging die Musik wieder. Allerdings war der Code nicht richtig platziert (also es war unübersichtlich) dann hab ich den mit einem Tabulator und einmal Return drücken richtig ausgerichtet und nun geht die musik wieder nicht. Sämtliches einsetzen älteren Codes war nutzlos, größere Teile ersetzen auch.
Was ist da los? ist irgendwas kaputt??
Nach einem Neustart des Computers kann ich das noch einmal mit Musik starten wenn ich es aus dem Compiler ohne neu zu compilieren starte. Dann kann ich noch einmal den Teil einfügen aus der Sicherung, dann gehts noch einmal und dann muss ich den Computer wieder neu starten damit ich es wieder 2 mal mit Musik starten kann. |
|
Nach oben |
|
|
daybreaker Mini JLI'ler
Anmeldedatum: 05.07.2004 Beiträge: 9
Medaillen: Keine
|
Verfasst am: 09.07.2004, 11:51 Titel: |
|
|
Hi, in welcher Sprache Programmierst du? EIn Code-Ausschnitt wäre sicherlich hilfreich.. Bei C# kann es manchmal vorkommen das bei Schleifen oder if-Abfragen ein { oder } fehlt und das nicht gemeldet wird!
day _________________ Visit: www.software1987.de |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 09.07.2004, 11:51 Titel: |
|
|
verscuh vieleicht einfach nochmal alles zu löschen bis auf dei Quellcode dateien.
Danne rstellst du ein neues projekt und fügtrs die Dateien wieder ein und kompilierst es neu. Hat bei mir schon mal geholfen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
JkerryZ JLI Master Trainee
Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 09.07.2004, 13:14 Titel: |
|
|
Das hat leider auch nichts geholfen.
Jetzt spielt er nicht mal einamal die Musik ab.
Und programmieren tu ich das ganze in C++. |
|
Nach oben |
|
|
JkerryZ JLI Master Trainee
Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 09.07.2004, 21:47 Titel: |
|
|
Hier habe ich nochmal den betroffenen Code:
Code: | // DirectX Audio initialisieren
DXAudio.Init();
// Hintergrundmusik laden und abspielen
DXAudio.AddBackgroundMusic(SND_BACKGROUND);
DXAudio.PlayBackgroundMusic();
// Soundeffekte laden
DXAudio.AddSound(SND_EXPLOSION_1);
DXAudio.AddSound(SND_EXPLOSION_2);
DXAudio.AddSound(SND_PHOTON);
// GameManager initialisieren
GameManager.Init(Direct3D.GetDevice(),&ResourceManager,&DXAudio);
|
Und beim ersetzen dieser Stelle (also einmal neu einfügen) geht die Musik noch ein weiteres mal:
Code: | DXAudio.AddBackgroundMusic(SND_BACKGROUND); |
Und nach jedem Pc neustart gehts auch einmal.
Das heisst man könnte das Spiel genau einmal pro "Sitzung" spielen |
|
Nach oben |
|
|
daybreaker Mini JLI'ler
Anmeldedatum: 05.07.2004 Beiträge: 9
Medaillen: Keine
|
Verfasst am: 10.07.2004, 00:10 Titel: |
|
|
Naja ich geb zu ich hab keine Ahnung von C++.. aber beendest du denn auch alle Prozesse deines Programmes richtig? Steht vielleicht dein Programm noch bei den Prozessen im Task-Manager? Ansonsten weiß ich auch nicht weiter..
day _________________ Visit: www.software1987.de |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.07.2004, 11:09 Titel: |
|
|
Das könnte sein.
Vielleicht vergisst du auch ganz einfach, den Backgroundsound wieder zu releasen.
Zeig doch mal den Destruktor der Klasse(bzw. den Releasecode). _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
JkerryZ JLI Master Trainee
Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 10.07.2004, 15:01 Titel: |
|
|
Also eigentlich müsste das gehen, da ich die DXaudioclass vom Buch für die Musik verwendet habe. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.07.2004, 20:10 Titel: |
|
|
Bist du sicher, dass kein Fehler drin ist?
Vielleicht wird der Code auch gar nicht aufgerufen _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
JkerryZ JLI Master Trainee
Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 10.07.2004, 22:37 Titel: |
|
|
hmmm...vielleicht auch das. Aber da der ja einmal den Sound abspielt gehts ja in irgendeiner Weise. Allerdings geht das nur einmal.
Und die Hintergrundmusik ist eine *.wav Datei, das geht ja auch oder wär midi besser? Die Ballergeräusche sind allerdings auch *.wav Dateien und funktionieren ohne Probleme. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 11.07.2004, 11:40 Titel: |
|
|
JkerryZ hat Folgendes geschrieben: | hmmm...vielleicht auch das. Aber da der ja einmal den Sound abspielt gehts ja in irgendeiner Weise. Allerdings geht das nur einmal. |
Ja, und wenn der Sound nur einmal abgespielt wird und beim Neustarten des Proggys nicht mehr, dann sollte doch die logischste Folgerung sein, dass es nicht richtig released wird _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
JkerryZ JLI Master Trainee
Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 11.07.2004, 13:12 Titel: |
|
|
achso meinst du das: das wird einmal abgespielt, die Musik dann nicht richitg beendet und kann beim nächsten mal nicht gestartet werden. Sondern erst nach neustart des Pc´s und den dadurch entstandenden DirectX "reset".
Dann poste ich also doch mal den Code:
Code: | void DirectXAudio::Init(void)
{
// COM initialisieren
CoInitialize(NULL);
CoCreateInstance(CLSID_DirectMusicPerformance, NULL,
CLSCTX_INPROC, IID_IDirectMusicPerformance8,
(void**)&lpPerformance );
CoCreateInstance(CLSID_DirectMusicLoader, NULL,
CLSCTX_INPROC, IID_IDirectMusicLoader8,
(void**)&lpLoader);
// Initialisieren
lpPerformance->InitAudio(
NULL,
NULL,
NULL,
DMUS_APATH_DYNAMIC_STEREO,
8,
DMUS_AUDIOF_ALL,
NULL
);
// Suchpfad auswählen
WCHAR wstrSearchPath[MAX_PATH];
MultiByteToWideChar( CP_ACP, 0, "../../media", -1, wstrSearchPath, MAX_PATH );
// Suchpfad setzen
lpLoader->SetSearchDirectory(GUID_DirectMusicAllTypes,
wstrSearchPath,
FALSE
);
}
void DirectXAudio::AddBackgroundMusic(string Name)
{
// Name der Datei
WCHAR wstrFileName[MAX_PATH];
MultiByteToWideChar(CP_ACP,0,Name.c_str(),-1,wstrFileName,MAX_PATH);
if (FAILED(lpLoader->LoadObjectFromFile(
CLSID_DirectMusicSegment,
IID_IDirectMusicSegment8,
wstrFileName,
(LPVOID*) &lpSegBackgroundMusic)))
{
MessageBox( NULL, "Fehler beim Laden der Datei",
"AddBackgroundMusic", MB_OK );
}
// Segment hinzufügen
lpSegBackgroundMusic->Download( lpPerformance );
}
void DirectXAudio::AddSound(string Name)
{
WCHAR wstrFileName[MAX_PATH];
MultiByteToWideChar(CP_ACP,0,Name.c_str(),-1,wstrFileName,MAX_PATH);
if (FAILED(lpLoader->LoadObjectFromFile(
CLSID_DirectMusicSegment,
IID_IDirectMusicSegment8,
wstrFileName,
(LPVOID*) &SoundEffectsMap[Name])))
{
MessageBox( NULL, "Fehler beim Laden der Datei","AddSound", MB_OK );
return;
}
// Segment hinzufügen
SoundEffectsMap[Name]->Download(lpPerformance);
}
void DirectXAudio::PlayBackgroundMusic(void)
{
lpPerformance->PlaySegmentEx(
lpSegBackgroundMusic, // abzuspielendes Segment
NULL,
NULL,
DMUS_SEGF_SECONDARY, // im sekundären Buffer
0, // Stelle, an der gestartet werden soll
NULL,
NULL,
NULL
);
}
void DirectXAudio::PlaySoundEffect(string Name)
{
lpPerformance->PlaySegmentEx(
SoundEffectsMap[Name], // abzuspielendes Segment
NULL,
NULL,
DMUS_SEGF_SECONDARY, // im sekundären Buffer
0, // Stelle, an der gestartet werden soll
NULL,
NULL,
NULL
);
}
DirectXAudio::~DirectXAudio()
{
map<string,IDirectMusicSegment8*>::iterator it;
for(it=SoundEffectsMap.begin();it!=SoundEffectsMap.end();it++)
{
(*it).second->Release();
}
// Segment freigeben
if(lpSegBackgroundMusic)
{
lpSegBackgroundMusic->Release();
lpSegBackgroundMusic = NULL;
}
// performance freigeben
if(lpPerformance)
{
lpPerformance->Stop(NULL,NULL,0,0);
lpPerformance->CloseDown();
lpPerformance->Release();
lpPerformance = NULL;
}
// Loader freigeben
if(lpLoader)
{
lpLoader->Release();
lpLoader = NULL;
}
// COM beenden
CoUninitialize();
}
|
So das ist der Code von DXAudioclass.cpp
Und vielen Dank nochmal.
Zuletzt bearbeitet von JkerryZ am 12.07.2004, 13:59, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 11.07.2004, 21:01 Titel: |
|
|
Sieht das jetzt nur so aus, oder wird das ganze gleich wieder in der Init-Funktion freigegeben? o_O _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
fowly JLI'ler
Anmeldedatum: 25.01.2004 Beiträge: 196 Wohnort: Detmold - NRW Medaillen: Keine
|
Verfasst am: 11.07.2004, 21:49 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: | Sieht das jetzt nur so aus, oder wird das ganze gleich wieder in der Init-Funktion freigegeben? o_O |
ich denke mal er hat den ganzen mittleren teil weggeschnitten... _________________ <-- Noch in der Entwicklungsphase: http://www.uranus-entertainment.de -->
Das Spiel zu unserer Schule:
http://www.grabbe-game.de |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 12.07.2004, 11:45 Titel: |
|
|
Hmm...ja.
Aber das wäre ja auch wichtig, weil er sicher sein muss, dass der Code auch aufgerufen wird.
@JkerryZ: Hast du schonmal daran gedacht, vielleicht eine Art Logfile in deine Projekte einzubauen? Das hat mir schon öfters geholfen, festzustellen, wo ein Fehler liegen kann bzw. wo das Programm scheitert. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|