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

babelfish

Alter Hase

  • »babelfish« ist der Autor dieses Themas

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

21

04.02.2006, 19:20

Gut, es funktioniert einwandfrei, danke nochmal ;) .
Jetzt habe ich nur noch 3 Fragen:

Wie lauten die Funktionen um Die Musik zu beenden und sie loopen zu lassen?
Und wo muss ich diese dann einsetzen?

Danke schonmal im Vorraus für die Antworten

[EDIT] Die Funktion um sie zu beenden hab ich gefunden. ;) [/EDIT]

dbGAMES

Treue Seele

Beiträge: 323

Wohnort: Frankfurt

Beruf: Student

  • Private Nachricht senden

22

05.02.2006, 13:32

fürs loopen musst du einmal pro frame die funktion tbMusic::Process(); aufrufen, und dann die abspiel funktion tbMusic::Play(TRUE); so schreibe. (das TRUE kann man auch weglassen)

babelfish

Alter Hase

  • »babelfish« ist der Autor dieses Themas

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

23

11.02.2006, 21:24

Hmm,
jetzt habe ich irgendwie ein Problem.
Hier ist mal der Code:

Die ".hpp" Datei:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ---->Klassen<----

//

class CMusic
{
public:

   int Play(char* Music); // Gibt Musik aus

   int Stop(void); // Hält die Musik an

};

    extern  CMusic Music;
    extern  CMusic Sound;
//

// ---->Klassen<----


Und die ".cpp" Datei

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
    tbMusic* g_pMusic;
    
    int CMusic::Play(char* Music) // Gibt Musik aus

    {
    
        g_pMusic = new tbMusic;
        if(g_pMusic->Init(Music))
        {
       TB_ERROR("Fehler beim laden der Musik!", TB_ERROR);
        }

        g_pMusic->Play();

        return TB_OK;
    }

    int CMusic::Stop(void) // Hält die Musik an

    {
        g_pMusic->Stop();
        return TB_OK;
    }

    CMusic Music;
    CMusic Sound;


Falls da etwas falsch ist bitte melden.

Mein Problem:

Ich kann zwar Musik und Sound mit

Quellcode

1
Music.Play("Musik.wav"); 

und

Quellcode

1
Sound.Play("Sound.wav");

gleichzeitig laufen lassen.

Wenn ich aber die Musik mit

Quellcode

1
Music.Stop();

beenden will, nachdem ich einen Sound abgespielt habe,
dann wird der Sound beendet und nicht die Musik.

das verstehe ich irgendwie nicht :crying:

Kann mir da jemand helfen?

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

24

11.02.2006, 21:33

Was du da machst ist auch etwas konfus^^


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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class CMusic
{
//Deklaration

private:
    tbMusic Music;
public:
    CMusic(void);
    ~CMusic(void);
   int Play(char* Music); // Gibt Musik aus

   int Stop(void); // Hält die Musik an

}; 

//Definition

CMusic::CMusic(void)
{
    Music = new tbMusic;
}

CMusic::~CMusic(void)
{
    TB_SAFE_DELETE(Music);
}

tbResult CMusic::Play(char* Music) // Gibt Musik aus

    {
        if(Music->Init(Music))
        {
       TB_ERROR("Fehler beim laden der Musik!", TB_ERROR);
        }

        Music->Play();

        return TB_OK;
    }

    tbResult CMusic::Stop(void) // Hält die Musik an

    {
        Music->Stop();
        return TB_OK;
    } 
//WICHTIG: Wenn du die Tribase Fehlercodes bei return verwendest, muss logischerweise auch die Funktion vom Typ tbResult sein!!! Vor allem auch dann, wenn du TB_ERROR(...) verwendest, weil TB_ERROR nicht sichtbar ein return TB_ERROR; (also halt den 2. Parameter) hinschreibt.


//Anwendung in Funktion: (zB main)

{
    CMusic* Music = new CMusic;
    Music->Play("fettes Lied.wav");
    //....

    Music->Stop();
    TB_SAFE_DELETE(Music);
}



Man man man^^


Nie nie nie nie nie Nie nie nie nie nie Nie nie nie nie nie Nie nie nie nie nie Nie nie nie nie nie Nie nie nie nie nie Nie nie nie nie nie Nie nie nie nie nie
eine globale Variable aus einer Klasse heraus benutzen. NIEEEEEEE :D

babelfish

Alter Hase

  • »babelfish« ist der Autor dieses Themas

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

25

11.02.2006, 22:01

Danke für die Mühe, :)
jetzt bleiben aber noch diese Fehler

Quellcode

1
2
(1) error C2227: Der linke Teil von '->Init' muss auf Klasse/Struktur/Union zeigen
(2) error C2227: Der linke Teil von '->Play' muss auf Klasse/Struktur/Union zeigen


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
tbResult CMusic::Play(char* Music) // Gibt Musik aus 

    { 
        if(Music->Init(Music)) // FEHLER (1)

        { 
       TB_ERROR("Fehler beim laden der Musik!", TB_ERROR); 
        } 

        Music->Play(); // FEHLER (2)


        return TB_OK; 
    } 

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

26

11.02.2006, 22:08

ah sry mein Fehler. Aus tbMusic Music mach tbMusic* Music

babelfish

Alter Hase

  • »babelfish« ist der Autor dieses Themas

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

27

11.02.2006, 22:14

naja,
das hatte ich schon vorher beim rumprobieren bemerkt.
;)

Es muss etwas anderes sein :crying:

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

28

11.02.2006, 22:16

wieso was genau klappt denn jetzt nicht? Du fügst oben in deine Klassendeklaration unter das private wie beschrieben ein * hinter das tbMusic und es bleiben die beiden gleichen Fehler? Wenn ja poste mal den Code.

babelfish

Alter Hase

  • »babelfish« ist der Autor dieses Themas

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

29

11.02.2006, 22:59

Ich wette ich habe schon wieder etwas falsches gemacht :(

".hpp" Code

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// ---->Klassen<----

//

class CMusic 
{ 
//Deklaration 

private: 
    tbMusic* Music;
public: 
    CMusic(void); 
    ~CMusic(void); 
   int Play(char* Music); // Gibt Musik aus 

   int Stop(void); // Hält die Musik an 

}; 

    extern  CMusic Music;
    extern  CMusic Sound;
//

// ---->Klassen<----


".cpp" Code

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
// ---->Klassen<----

//

CMusic::CMusic(void) 
{ 
    Music = new tbMusic; 
} 

CMusic::~CMusic(void) 
{ 
    TB_SAFE_DELETE(Music); 
} 

int CMusic::Play(char* Music) // Gibt Musik aus 

    { 
        if(Music->Init(Music)) 
        { 
       TB_ERROR("Fehler beim laden der Musik!", TB_ERROR); 
        } 

        Music->Play(); 

        return 0;
    } 

int CMusic::Stop(void) // Hält die Musik an 

    { 
        Music->Stop(); 
        return 0;
    } 
    CMusic Music;
    CMusic Sound;
//

// ---->Klassen<----

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

30

11.02.2006, 23:06

C-/C++-Quelltext

1
2
    extern    CMusic Music;
    extern    CMusic Sound; 

weg

C-/C++-Quelltext

1
2
    CMusic Music;
    CMusic Sound; 

weg

C-/C++-Quelltext

1
int CMusic::Play(char* Music)

mach mal pcMusic... sonst sind 2 gleiche bezeichner drin, hab ich auch übersehen.. in der deklaration dann halt auch

dann sollte es klappen

ach und

C-/C++-Quelltext

1
TB_ERROR("Fehler beim laden der Musik!", TB_ERROR); 

macht immer noch return TB_ERROR;^^
Spricht auch nix dagegen wenn du anstelle von int tbResult als Funktionstypen nimmst, musst es dann nur konsequent benutzen. Praktisch ist es allemal.

Werbeanzeige