Browse Source

Update demo14.lpr

Seenkao 3 years ago
parent
commit
c44bce3238
1 changed files with 55 additions and 49 deletions
  1. 55 49
      Zengl_SRC/demos/Android/14 - Sound/jni/demo14.lpr

+ 55 - 49
Zengl_SRC/demos/Android/14 - Sound/jni/demo14.lpr

@@ -23,6 +23,7 @@ uses
   zgl_sound_ogg,
   zgl_types,
   zgl_collision_2d,
+  zgl_log,
   zgl_utils
   ;
 
@@ -32,7 +33,7 @@ const
 
 var
   dirRes  : UTF8String = 'assets/';
-  fntMain : Byte;
+  fntMain : LongWord;
   icon    : array[ 0..1 ] of zglPTexture;
   sound   : zglPSound;
   audio   : Integer;
@@ -80,15 +81,16 @@ begin
 
   // RU: Загружаем аудио-файл в память, т.к. читать его напрямую из архива потребует некоторых ухищрений.
   // EN: Load audio-file into memory, because reading it from archive will need some tricks.
-  mem_LoadFromFile( musicMem, dirRes + 'music.ogg' );
+  if mem_LoadFromFile( musicMem, dirRes + 'music.ogg' ) then
+    log_Add('Sound loaded: ' + dirRes +'music.ogg');
 
   file_CloseArchive();
-  setTextScale(15, fntMain);
+  setFontTextScale(15, fntMain);
 end;
 
 procedure Draw;
   var
-    r : zglTRect;
+    r : zglTRect2D;
 begin
   ssprite2d_Draw( icon[ state ], ( SCREEN_WIDTH - 128 ) / 2, ( SCREEN_HEIGHT - 128 ) / 2, 128, 128, 0 );
   text_Draw( fntMain, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2 + 64, 'Skillet - Comatose - Whispers In The Dark', TEXT_HALIGN_CENTER );
@@ -106,9 +108,8 @@ begin
 end;
 
 procedure Timer;
-  var
-    r : zglTRect;
-    p : Integer;
+var
+  p : Integer;
 begin
   // RU: Проверяем играет ли музыка(1 - играет, 0 - не играет). Так же можно проверить и звуки - подставив zglPSound и ID вот так:
   //     snd_Get( Sound, ID...
@@ -121,62 +122,66 @@ begin
   if state = 0 Then
     audio := 0;
 
-  if touch_Tap( 0 ) Then
-    begin
-      // RU: В данном случаи мы начинаем воспроизводить звук сразу в указанных координатах, но их можно менять и в процессе используя процедуру snd_SetPos.
-      //     Важно: Для OpenAL можно позиционировать только mono-звуки
-      //
-      // EN: In this case, we begin to play the sound directly in these coordinates, but they can be changed later using procedure snd_SetPos.
-      //     Important: OpenAL can position only mono-sounds.
+  // RU: Получаем в процентах позицию проигрывания аудиопотока и ставим громкость для плавных переходов.
+  // EN: Get position in percent's for audio stream and set volume for smooth playing.
+  p := snd_Get( SND_STREAM, audio, SND_STATE_PERCENT );
+  if ( p >= 0 ) and ( p < 25 ) Then
+    snd_SetVolume( SND_STREAM, audio, ( 1 / 24 ) * p );
+  if ( p >= 75 ) and ( p < 100 ) Then
+    snd_SetVolume( SND_STREAM, audio, 1 - ( 1 / 24 ) * ( p - 75 ) );
+end;
+
+procedure KeyMouseEvents;
+var
+  r : zglTRect2D;
+  p : Integer;
+begin
+  if touch_Click( 0 ) Then
+  begin
+    // RU: В данном случаи мы начинаем воспроизводить звук сразу в указанных координатах, но их можно менять и в процессе используя процедуру snd_SetPos.
+    //     Важно: Для OpenAL можно позиционировать только mono-звуки
+    //
+    // EN: In this case, we begin to play the sound directly in these coordinates, but they can be changed later using procedure snd_SetPos.
+    //     Important: OpenAL can position only mono-sounds.
 
 // эта часть изменена!!! Теперь можно заново воспроизводить звуки, даже если они не закончили играть.
-      if snd_Get(sound, IDSound, SND_STATE_PLAYING) = IDSound then
-        snd_Stop(sound, IDSound);
-      IDSound := snd_Play( sound, FALSE, CalcX2D( touch_X( 0 ) ), CalcY2D( touch_Y( 0 ) ) );
+    if snd_Get(sound, IDSound, SND_STATE_PLAYING) = IDSound then
+      snd_Stop(sound, IDSound);
+    IDSound := snd_Play( sound, FALSE, CalcX2D( touch_X( 0 ) ), CalcY2D( touch_Y( 0 ) ) );
 
       // Внимание!!! Проверять не моно звук!!! Отдаление/приближение работает.
       // Stereo sound checking. Not mono speaker.
 // --------------------------------------------------------------------------------------------
 
-      r.X := ( SCREEN_WIDTH - 128 ) / 2;
-      r.Y := ( SCREEN_HEIGHT - 128 ) / 2;
-      r.W := 128;
-      r.H := 128;
+    r.X := ( SCREEN_WIDTH - 128 ) / 2;
+    r.Y := ( SCREEN_HEIGHT - 128 ) / 2;
+    r.W := 128;
+    r.H := 128;
 // добавляем проверку на проигрывание звука, только если много развных звуков/музыки, то номера надо менять (не только 1!!!)
-      if col2d_PointInRect(mouse_X, mouse_Y, r) and (audio = 1) Then
-      begin
-        p := snd_Get(SND_STREAM, audio, SND_STATE_PLAYING);
-        if p = 1 then
-          snd_StopStream(audio);
-      end;
-// ---------------------------------------------------------------------------------------------------------------
-
-      if col2d_PointInRect( touch_X( 0 ), touch_Y( 0 ), r ) and ( audio = 0 ) Then
-        audio := snd_PlayMemory( musicMem, 'OGG' );
+    if col2d_PointInRect(mouse_X, mouse_Y, r) and (audio = 1) Then
+    begin
+      p := snd_Get(SND_STREAM, audio, SND_STATE_PLAYING);
+      if p = 1 then
+        snd_StopStream(audio);
     end;
+// ---------------------------------------------------------------------------------------------------------------
 
-  // RU: Получаем в процентах позицию проигрывания аудиопотока и ставим громкость для плавных переходов.
-  // EN: Get position in percent's for audio stream and set volume for smooth playing.
-  p := snd_Get( SND_STREAM, audio, SND_STATE_PERCENT );
-  if ( p >= 0 ) and ( p < 25 ) Then
-    snd_SetVolume( SND_STREAM, audio, ( 1 / 24 ) * p );
-  if ( p >= 75 ) and ( p < 100 ) Then
-    snd_SetVolume( SND_STREAM, audio, 1 - ( 1 / 24 ) * ( p - 75 ) );
-
-  touch_ClearState();
+    if col2d_PointInRect( touch_X( 0 ), touch_Y( 0 ), r ) and ( audio = 0 ) Then
+      audio := snd_PlayMemory( musicMem, 'OGG' );
+  end;
 end;
 
 procedure Activate( active : Boolean );
 begin
   if active Then                           // надо помнить, что при активации на андроиде надо всё заново загружать
-    begin
-      snd_Init();
-
-      file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
-      sound := snd_LoadFromFile( dirRes + 'click.wav', 2 );
-      file_CloseArchive();
-    end else
-      snd_Free();
+  begin
+    snd_Init();
+
+    file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
+    sound := snd_LoadFromFile( dirRes + 'click.wav', 2 );
+    file_CloseArchive();
+  end else
+    snd_Free();
 end;
 
 procedure Restore;                         // восстановление и активация? Вы издеваетесь?
@@ -195,8 +200,9 @@ procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
 begin
   randomize();
 
-  TimeStart := timer_Add( @Timer, 16, Start );
+  TimeStart := timer_Add( @Timer, 16, t_Start );
 
+  zgl_Reg(SYS_EVENTS, @KeyMouseEvents);
   zgl_Reg( SYS_LOAD, @Init );
   zgl_Reg( SYS_DRAW, @Draw );
   zgl_Reg( SYS_ANDROID_RESTORE, @Restore );