JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=5dde978ea45efad802d9c7c666f26c20Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Spinnt der Compiler?
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 09.07.2004, 09:22    Titel: Spinnt der Compiler? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
daybreaker
Mini JLI'ler



Anmeldedatum: 05.07.2004
Beiträge: 9

Medaillen: Keine

BeitragVerfasst am: 09.07.2004, 11:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 09.07.2004, 11:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 09.07.2004, 13:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 09.07.2004, 21:47    Titel: Antworten mit Zitat

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 Razz
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
daybreaker
Mini JLI'ler



Anmeldedatum: 05.07.2004
Beiträge: 9

Medaillen: Keine

BeitragVerfasst am: 10.07.2004, 00:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 10.07.2004, 11:09    Titel: Antworten mit Zitat

Das könnte sein.
Vielleicht vergisst du auch ganz einfach, den Backgroundsound wieder zu releasen. Wink

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 10.07.2004, 15:01    Titel: Antworten mit Zitat

Also eigentlich müsste das gehen, da ich die DXaudioclass vom Buch für die Musik verwendet habe.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 10.07.2004, 20:10    Titel: Antworten mit Zitat

Bist du sicher, dass kein Fehler drin ist?

Vielleicht wird der Code auch gar nicht aufgerufen Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 10.07.2004, 22:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 11.07.2004, 11:40    Titel: Antworten mit Zitat

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 Rolling Eyes Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 11.07.2004, 13:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 11.07.2004, 21:01    Titel: Antworten mit Zitat

Sieht das jetzt nur so aus, oder wird das ganze gleich wieder in der Init-Funktion freigegeben? o_O Shocked
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
fowly
JLI'ler



Anmeldedatum: 25.01.2004
Beiträge: 196
Wohnort: Detmold - NRW
Medaillen: Keine

BeitragVerfasst am: 11.07.2004, 21:49    Titel: Antworten mit Zitat

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 Shocked


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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 12.07.2004, 11:45    Titel: Antworten mit Zitat

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. Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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

Impressum