Delphi-PRAXiS
Seite 41 von 57   « Erste     31394041 424351     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Balanced das Spiel für Starke Nerven und Starke Graphikkarte (https://www.delphipraxis.net/73206-balanced-das-spiel-fuer-starke-nerven-und-starke-graphikkarte.html)

Hagbart 26. Dez 2006 20:54

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk
 
Ich habe noch keine Fehler gefunden, läuft bis jetzt noch super!!

Tumm 26. Dez 2006 20:55

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk
 
Find ich auch

Tumm 26. Dez 2006 21:07

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk
 
Hee, wenn man die Rollsounds deaktiviert kommt das nich!

Corpsman 26. Dez 2006 22:38

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk
 
@tumm,

Verstehe ich das Richtig.

Du Aktivierst Sound, und Deaktivierst Rollsounds. Und dann gehts ?

was eigentlich überhaupt keinen Sinn macht. Erst Recht dann nicht wenn dann diese Fehlermeldung sein soll.

Ich Poste euch mal den Gesamten Code der Mit den Rollsounds dazu gekommen ist.

Delphi-Quellcode:
// Das ist die Procedure die Aktiv wird wenn die Kugel Fliegt.
// hat eigentlich nichts direkt mit dem fehler zu tun. Aber ihr seid bestimmt neugierig wie ich das alles mache ;)
Var
  ocolls: boolean = False;
  Colls: Boolean = False;
  Colltime: Dword;

Const
  Colltimefact = 50;

Procedure SoundBeginContact;
Begin
  ocolls := Colls;
  colls := false;
End;

Procedure SoundEndContact;
Begin
  If Ocolls And Not Colls Then Begin // Negative Flanke !!
    Colltime := GetTickCount;
  End;
  // Messen der Zeit seit Negativer Flanke !!
  If (Not Ocolls) And (Not Colls) Then Begin
    If Gettickcount - Colltime > Colltimefact Then
      Soundmanager.stop;
  End;
End;
So hier kommt dann der Code von meinem Sound Manager.

Delphi-Quellcode:
Type
  TSoundmanager = Class
  private
    Finitialized: Boolean;
    Sounds: Array Of HStream;
    Playing: Array Of boolean;
    fsoundpath: String;
    Procedure Playchannel(Value: Integer);
  public
    Procedure Play(Playermaterial, Bottommaterial: integer; Waited: Boolean);
    Procedure Stop;
    Constructor create(SoundPath: String; h_Wnd: Hwnd);
    Destructor destroy; override;
  End;
Das ganze Greift auf Bass.dll zu.

Der Constructor Lädt direct die Sound Files :
Delphi-Quellcode:
Constructor TSoundmanager.create(SoundPath: String; h_Wnd: Hwnd);
Var
  i: integer;
Begin
  Inherited create;
  // Bass.dll initialisieren
  Finitialized := BASS_Init(-1, 44100, 0, h_Wnd, Nil);
  If Not Finitialized Then MessageBox(0, 'Could not load Bass.dll', 'Error', MB_ICONWARNING Or MB_OK);
  // Laden der Sound Files
  If Finitialized Then Begin
    fsoundpath := Soundpath;
    setlength(Sounds, 23);
    Sounds[0] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Hit_Paper.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[1] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Hit_Wood_Wood.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[2] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Hit_Wood_Stone.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[3] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Hit_Wood_Metal.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[4] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Hit_Stone_Wood.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[5] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Hit_Stone_Stone.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[6] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Hit_Stone_Metal.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[7] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Misc_Fall.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[8] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Misc_Checkpoint.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[9] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Music_Final.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[10] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Misc_extraball.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[11] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Extra_Start.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[12] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Misc_Enlargeball.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[13] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Misc_shrinkball.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[14] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Misc_die.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[15] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Menu_click.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[16] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Roll_Paper.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[17] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Roll_Stone_Metal.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[18] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Roll_Stone_Stone.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[19] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Roll_Stone_Wood.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[20] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Roll_Wood_Metal.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[21] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Roll_Wood_Stone.wav'), 0, 0, BASS_SAMPLE_FX);
    Sounds[22] := BASS_StreamCreateFile(False, PChar(Soundpath + 'Roll_Wood_Wood.wav'), 0, 0, BASS_SAMPLE_FX);

    setlength(Playing, High(sounds) + 1);
    For i := 0 To High(playing) Do
      Playing[i] := false;

  End;
End;
Und diese Function hier startet dann die Endlosschleifen von Sound [ 16- 22 ]

Delphi-Quellcode:
Procedure Tsoundmanager.Playchannel(value: Integer);
Var
  info: BASS_CHANNELINFO;
  AChannel: HStream;
  i: integer;
Begin
  If UseRollsounds Then Begin
    // Beenden der Anderen Channels
    For i := 0 To High(Playing) Do Begin
      If (i <> value) And PLaying[i] Then Begin
        BASS_ChannelStop(Sounds[i]);
        Playing[i] := false;
      End;
    End;
    If Not Playing[value] Then Begin
      // Starten des Channels
      aChannel := Sounds[value];
      BASS_ChannelGetInfo(aChannel, Info);
      // Loop setzen / nicht setzen
      If ((Not (Info.Flags = BASS_SAMPLE_LOOP)) And (True)) Or
        (Info.Flags = BASS_SAMPLE_LOOP) And (Not true) Then
        BASS_ChannelSetFlags(aChannel, BASS_SAMPLE_LOOP);
      // Abspielen
      BASS_ChannelPlay(aChannel, true);
      Playing[value] := true;
    End;
  End;
End;
Irgendwo im Code ist glaubig noch die Stop Routine aufgerufen die ist hier :
Delphi-Quellcode:
Procedure TSoundmanager.Stop;
Var
  i: Integer;
Begin
  For i := 0 To High(playing) Do Begin
    If Playing[i] Then
      BASS_ChannelStop(Sounds[i]);
    Playing[i] := false;
  End;
End;
Das Ganze Läuft nu wie Folgt ab.

Das Programm Ruft Render auf. dann wird die szene Gerendert.

dann wird mit folgendem Code die Physik und damit dann auch die Audio Aktualisiert.

Delphi-Quellcode:
          While AccTimeSlice > 12 Do Begin
            If Assigned(NewtonWorld) Then Begin
              SoundBeginContact;
              NewtonUpdate(NewtonWorld, (12 / 1000));
              SoundEndContact;
            End;
            AccTimeSlice := AccTimeSlice - 12;
          End;
Mehr ist nich. Wo da dein TFont Error geschieht ist mir nich Klar.

Die "MS Sans Serif" Font wird über TopenGlSimple Font geladen. die entsprechende Unit gibts auf meiner HP. Die kannst du Gerne mal runterladen und versuchen ob die bei dir Läuft.

Corpsman 27. Dez 2006 13:10

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk
 
Also der Fehler bei Tumm ist endlich auch gefunden.

Das Problem lag im Dateiformat der User.cfg

Da das ein Extra Thema ist werde ich aber nen neuen Thread damit aufmachen.

stz 26. Mai 2007 15:27

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk
 
Moin Corpsman,
da ist doch tatsächlich schon lange eine neue Version mit Rollsound erschienen und ich hab's nicht gemerkt... Klasse!! So macht's noch mehr Spaß.

Zwei Dinge sind mir beim Spielen eingefallen, die man noch einbauen könnte:
- Nach der Eingabe des Namens für die Highscore, kommt die Highscore, so dass man sich ansehen kann, wo man gelandet ist. Man muss sich allerdings die erspielten Punkte merken, und in der Highscore wieder suchen. Wie wäre es, den neu hinzugekommenen Eintrag irgendwie zu markieren, sodass man sofort sieht, wo man gelandet ist?

- Eine Anzeige der aktuellen Geschwindigkeit in einer beliebigen Einheit. Wenn man lange Strecken bergauf oder bergab geradeaus rollt kann man die Geschwindigkeit manchmal nicht mehr so gut abschätzen. Eine Anzeige würde mir helfen.

Gruß
Malte

PS: Gibt es auch schon neue Level? :angel:

Corpsman 26. Mai 2007 15:52

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi stz,

Deine Idee mit der Farblichen Markierung ist gut, ich schau das ich es einbau.

Was die anderen Wünsche angeht so nehme ich sie in die Todo Liste auf.

Ich kann das leider grad net machen weil ( aber verrats noch keinem ) ich bau grade den Schatten ein. Seit 2 Tagen ist es mir gelungen einen Schatten unter die Kugel zu bekommen ;) . Nu arbeite ich mich gerade Polygonweise durchs gesammte Spiel auf das man den Schatten auch sehen kann. Wies ungefähr wird kannst im Screenshot sehen.

Leider wird es aber noch gut 4 - 5 Tage Dauern bis es soweit ist.

Die "Check for Update" funktion im Launcher wird dir aber sagen wann genau die neue Ver online ist ;).

stz 26. Mai 2007 17:33

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk
 
Moin Corpsman,
uijuijui ... das sieht ja toll aus :cyclops: !! 4-5 Tage sind ne lange Zeit... wie soll ich das nur aushalten :gruebel:

Ah, die "Check for Update"-Funktion ist auch praktisch. Vielleicht sollte ich sie mal benutzen :wink:

Gruß
Malte

Corpsman 26. Mai 2007 18:21

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk
 
Hmm wenn du mich ganz nett Bittest kann ich ja Extra und nur hier für die DP User eine Pre Release Version online Stellen.

Denn wie man auf dem Screenshot sehen kann tut der Schatten ja bereits, nur eben nicht bei allen Elementen.

Namenloser 26. Mai 2007 18:25

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk
 
ich hatte das Spiel ja schon beinahe vergessen, aber habe eben wieder den thread gesehen und mir gleich mal die neueste version geholt. Fin das Spiel nach wie vor klasse!

Eine Sache ist mir allerdings aufgefallen: Wenn man ein Level gespielt hat, werden alle anderen grün angezeigt, obwohl man sie noch nicht spielen kann. sonst werden sie rot angezeigt. Ist ja nix gravierendes wollte nur mal drauf hinweisen, falls nicht schon darauf hingewiesen wurde.

Ich bin auch schon ganz gespannt auf die nächste version (wegen dem schatten des Balls^^)

:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 Uhr.
Seite 41 von 57   « Erste     31394041 424351     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz