demo03.lpr 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. library demo03;
  2. {$I zglCustomConfig.cfg}
  3. uses
  4. zgl_application,
  5. zgl_main,
  6. zgl_file,
  7. zgl_screen,
  8. zgl_window,
  9. zgl_timers,
  10. zgl_touch,
  11. zgl_keyboard,
  12. zgl_primitives_2d,
  13. zgl_font,
  14. zgl_text,
  15. zgl_textures_png,
  16. zgl_math_2d,
  17. zgl_collision_2d,
  18. zgl_utils
  19. ;
  20. var
  21. dirRes : UTF8String = 'assets/';
  22. fntMain : zglPFont;
  23. userInput : UTF8String;
  24. trackInput : Boolean;
  25. inputRect : zglTRect;
  26. lineAlpha : Byte;
  27. procedure Init;
  28. begin
  29. zgl_Enable( CORRECT_RESOLUTION );
  30. scr_CorrectResolution( 800, 600 );
  31. file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  32. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  33. file_CloseArchive();
  34. inputRect.X := 400 - 192;
  35. inputRect.Y := 300 - 100 - 32;
  36. inputRect.W := 384;
  37. inputRect.H := 96;
  38. end;
  39. procedure Draw;
  40. var
  41. w : Single;
  42. begin
  43. // RU: Координаты "пальцев" можно получить при помощи функций touch_X и touch_Y.
  44. // EN: "Finger" coordinates can be got using functions touch_X and touch_Y.
  45. text_Draw( fntMain, 0, 0, 'First finger X, Y: ' + u_IntToStr( touch_X( 0 ) ) + '; ' + u_IntToStr( touch_Y( 0 ) ) );
  46. text_Draw( fntMain, 0, 16, 'Second finger X, Y: ' + u_IntToStr( touch_X( 1 ) ) + '; ' + u_IntToStr( touch_Y( 1 ) ) );
  47. // RU: Выводим введённый пользователем текст.
  48. // EN: Show the inputted text.
  49. pr2d_Rect( inputRect.X, inputRect.Y, inputRect.W, inputRect.H, $FFFFFF, 255 );
  50. if trackInput Then
  51. begin
  52. text_Draw( fntMain, 400, 300 - 100, 'Press Done to stop track text input:', TEXT_HALIGN_CENTER );
  53. w := text_GetWidth( fntMain, userInput );
  54. pr2d_Rect( 400 + w / 2 + 2, 300 - 70, 10, 20, $FFFFFF, lineAlpha, PR2D_FILL );
  55. end else
  56. text_Draw( fntMain, 400, 300 - 100, 'Tap here to enter text(maximum - 24 symbols):', TEXT_HALIGN_CENTER );
  57. text_Draw( fntMain, 400, 300 - 70, userInput, TEXT_HALIGN_CENTER );
  58. end;
  59. procedure Timer;
  60. begin
  61. if lineAlpha > 5 Then
  62. DEC( lineAlpha, 10 )
  63. else
  64. lineAlpha := 255;
  65. // RU: Проверить тапнул ли пользователь в пределах inputRect и начать отслеживать ввод текста.
  66. // EN: Check if there was tap inside inputRect and start to track text input.
  67. if touch_Tap( 0 ) and col2d_PointInRect( touch_X( 0 ), touch_Y( 0 ), inputRect ) Then
  68. begin
  69. trackInput := TRUE;
  70. key_BeginReadText( userInput, 24 );
  71. end;
  72. // RU: Если была нажата кнопка Done прекращаем отслеживать ввод текста.
  73. // EN: Finish to track text input if Done was pressed.
  74. if key_Press( K_ENTER ) Then
  75. begin
  76. trackInput := FALSE;
  77. key_EndReadText();
  78. end;
  79. // RU: Получаем введённый пользователем текст.
  80. // EN: Get inputted by user text.
  81. if trackInput Then
  82. userInput := key_GetText();
  83. // RU: Обязательно очищаем состояния всех подсистем ввода.
  84. // EN: Necessarily clear all the states of input subsystems.
  85. touch_ClearState();
  86. key_ClearState();
  87. end;
  88. procedure Restore;
  89. begin
  90. file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  91. font_RestoreFromFile( fntMain, dirRes + 'font.zfi' );
  92. file_CloseArchive();
  93. end;
  94. procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
  95. begin
  96. timer_Add( @Timer, 16 );
  97. zgl_Reg( SYS_LOAD, @Init );
  98. zgl_Reg( SYS_DRAW, @Draw );
  99. zgl_Reg( SYS_ANDROID_RESTORE, @Restore );
  100. scr_SetOptions( 800, 600, REFRESH_MAXIMUM, TRUE, TRUE );
  101. end;
  102. exports
  103. Java_zengl_android_ZenGL_Main,
  104. {$I android_export.inc}
  105. Begin
  106. End.