Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Toxic

Frischling

  • »Toxic« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Niedersachsen

Beruf: Ingenieur

  • Private Nachricht senden

1

01.04.2009, 15:03

Schwierigkeit bei Variablen mit SDL_Mixer

Hallo, ich habe ein Problem mit dem SDL_Mixer.
Ich würde gerne eine kleine Sound-Klasse schreiben die ich dann eben auch in anderen Projekten einsetzen kann, hier bin ich aber auf ein Hindernis gestossen.

Wenn ich die Variablen in der Klasse deklariere und sie dann in der Memberfunktion initialisiere kommt es während der Laufzeit zu einem Fehler. Es wird keine direkte Fehlermeldung ausgeben, sondern es erfolgt lediglich der Hinweis: SDL_Game.exe hat einen Fehler festgestellt, sollen die Daten an Microsoft gesendet werden...

Halte ich die Variablen dagegen lokal in der Funktion läuft alles einwandfrei. Das möchte ich aber halt nicht so machen...

Über die Textausgabe mit cout habe ich übrigens herausgefunden das der Fehler auftritt sobald audio_rate einen Wert bekommt.
Bringe ich cout danach im Quellcode ein erfolgt keine Textausgabe mehr.

So tritt ein Fehler auf.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void CSound::Load()
{
 
    //Variablen setzen 

    audio_rate = 22050;
    audio_format = AUDIO_S16SYS;
    audio_channels = 2;
    audio_buffers = 1000;


So nicht.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void CSound::Load()
{
 
    //Variablen setzen 

    int audio_rate = 22050;
    Uint16 audio_format =AUDIO_S16SYS ;
    int audio_channels = 2;
    int audio_buffers = 1000;
Wenn Architekten ihre Häuser so bauen würden wie Programmierer ihre Programme, könnte ein einziger Specht ganze Städte zerstören !

2

01.04.2009, 15:05

Ich weiß es jetzt nicht so genau, aber ich glaube, du must ein public oder so was davor schreiben

Also so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
public:

int Irgendwas 1
int Irgendwas 2

private:

// was  nicht "global sein muss"

Toxic

Frischling

  • »Toxic« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Niedersachsen

Beruf: Ingenieur

  • Private Nachricht senden

3

01.04.2009, 15:12

Daran liegt es glaube ich nicht, ich würde dann eine Fehlermeldung vom Compiler bekommen das er die Variable nicht kennt.

Die Klasse CSound ist bei mir in Sound.hpp definiert worden.
Am Beginn von Sound.cpp wird mit include Sound.hpp auch eingebunden.

Orientiert habe ich mich übrigens an diesem thread.
https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=11454
Ganz unten ist Quellcode für SDL_Mixer und ein Link zu einem Tutorial zu finden.
Wenn Architekten ihre Häuser so bauen würden wie Programmierer ihre Programme, könnte ein einziger Specht ganze Städte zerstören !

4

01.04.2009, 15:13

In der Klassendefinition die Variablen deklarieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CSound
{
...
    Datentyp m_audio_rate;
    Datentyp m_audio_format;
    Datentyp m_audio_channels;
    Datentyp m_audio_buffers; 
   // Datentyp steht für SDL eigenen Typ, oder C++ Basistypen (int...) 


}

void CSound::Load()
{
    //Variablen initialisieren

    m_audio_rate = 22050;
    m_audio_format = AUDIO_S16SYS;
    m_audio_channels = 2;
    m_audio_buffers = 1000; 
}
fka tm

Toxic

Frischling

  • »Toxic« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Niedersachsen

Beruf: Ingenieur

  • Private Nachricht senden

5

01.04.2009, 15:21

Genau so habe ich es gemacht. (Ich habe noch keine m_ verwendet, das ist der einzige Unterschied :D )
Wenn Architekten ihre Häuser so bauen würden wie Programmierer ihre Programme, könnte ein einziger Specht ganze Städte zerstören !

6

01.04.2009, 15:23

Dann lass den Code mal rüber! ;)
fka tm

Toxic

Frischling

  • »Toxic« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Niedersachsen

Beruf: Ingenieur

  • Private Nachricht senden

7

01.04.2009, 15:27

Ok das ist ersteinmal Sound.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef SOUND_HPP
#define SOUND_HPP

#include <SDL.h>
#include <SDL_mixer.h>
#include <iostream>

using namespace std; 

class CSound
{
public:
void Load();

private: 
int audio_rate;
Uint16 audio_format;
int audio_channels;
int audio_buffers;


};

#endif


Und das ist Sound.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "Sound.hpp"

void CSound::Load()
{
 
    //Variablen setzen 

    audio_rate = 22050;
    audio_format =AUDIO_S16SYS ;
    audio_channels = 2;
    audio_buffers = 1000;

    //Öffnen

    if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) != 0) {
        cout << "Konnte Sound nicht starten: " << Mix_GetError() << endl;
    }
 
    //Sound 

    //Unser Sound-File laden


    //Variable 

    Mix_Chunk *sound = NULL;

    //Datei laden 

    sound = Mix_LoadWAV("Sound/Laser.wav");
    if(sound == NULL) {
        cout << "Konne Sound WAV File nicht laden: " << Mix_GetError() << endl;
    }

    //Sound abspielen

    if(Mix_PlayChannel(-1, sound, 0)==-1) {
        cout << "Konnte Sound WAV Datei nicht abspielen: " << Mix_GetError() << endl;
    }

}
Wenn Architekten ihre Häuser so bauen würden wie Programmierer ihre Programme, könnte ein einziger Specht ganze Städte zerstören !

8

01.04.2009, 15:35

Wie sieht deine Variable vom Typ CSound aus, die du in der main verwendest?
Bzw. zeig mal den relevanten Codeausschnitt.
fka tm

physX

Treue Seele

Beiträge: 119

Wohnort: Dresden

  • Private Nachricht senden

9

01.04.2009, 15:37

ich seh den Fehler jetzt nicht :( aber hast du mal versucht für die Fehlersuche verschiedene Textausgaben zu setzen, so kannst du die Programmzeile ausfindig machen bei der das Problem auftritt; eventuell auch die Werte der Variablen mal checken. Das hilft mir meistens bei der Fehlersuche... :)
viel Glueck

cheers 8)

10

01.04.2009, 15:39

Zitat von »"Toxic"«

Über die Textausgabe mit cout habe ich übrigens herausgefunden das der Fehler auftritt sobald audio_rate einen Wert bekommt.
Bringe ich cout danach im Quellcode ein erfolgt keine Textausgabe mehr.


physX
Meinst du sowas? ;)
fka tm

Werbeanzeige