Вниз  JavaScript
- 15.03.2024 / 15:59
Кальцид
  Пользователь

Кальцид 
Сейчас: Offline
Askalite, Всё в канвасе.
- 16.03.2024 / 03:54
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Кальцид, если ты пишешь игру на реакцию, то никак не исправишь, если просто игра, то тебе надо синхронизировать.
- 16.03.2024 / 03:56
RblSb
  Пользователь

RblSb 
Сейчас: Offline
Мерцание наверно из-за того что ты в обоих функциях делаешь очистку канваса. Тебе нужно вынести очистку перед тем как ты вызываешь отрисовку своих компонентов, вызывая в начале каждого кадра ее, а не в начале каждой функции (вероятно)

Изменено RblSb (16.03 / 03:57) (всего 1 раз)
- 16.03.2024 / 10:57
Кальцид
  Пользователь

Кальцид 
Сейчас: Offline
Суть в том что эти функции работают отдельно.
  1. function menu() {
  2. ctx.clearRect(0, 0, SWidth, SHeight);
  3.     canvas.addEventListener('click', function(){
  4.         if ((mousex >= (SWidth/2)-100) && (mousex <= (SWidth/2)+50) && (mousey >= 90) && (mousey <= 110)) {
  5.  
  6.             ctx.fillText("Новая игра", 0, 20);
  7.             gp = 2;
  8.             process();
  9.  
  10.         }; 
  11.  
  12.     });
  13.  
  14.  
  15. setTimeout("menu()", 30);
  16. };
  17. function game() {
  18.     ctx.clearRect(0, 0, SWidth, SHeight);
  19. ...
  20.     setTimeout("game()", 30);
  21. };
  22. function process() {
  23.  
  24.     if (gp == 1) {
  25.         menu();
  26.     }
  27.     if (gp == 2) {
  28.         game();
  29.     }
  30. };
  31.  
  32. process();
и когда запускается функция game();
то начинает мерцать функция menu();
хотя она не работает.. логически не укладывается в голове
- 16.03.2024 / 11:02
Tygrain
  Пользователь

Tygrain 
Сейчас: Offline
setTimeout("menu()", 30) никаких ошибок не выкидывает?
Сеттаймаут принимает функцию а не строку если чво.

Изменено Tygrain (16.03 / 11:10) (всего 1 раз)
- 16.03.2024 / 11:09
Slendermanx
  Пользователь

Slendermanx 
Сейчас: Offline
Кальцид, А вот в AGK Basic можно тоже самое написать, но на много строчек меньше и легче. Чистый js canvas топорный, и для простых игр или даже сложнее лучше использовать что нибудь типа AGK. А ещё там лёгкая сборка сразу на ПК, Андроид :android: и прочее. И не надо скачивать андроид студио :gg:
__________________
 Basic - это сила, а я Авовер

Изменено Slendermanx (16.03 / 11:10) (всего 1 раз)
- 16.03.2024 / 11:12
Tygrain
  Пользователь

Tygrain 
Сейчас: Offline
Кальцид, вместо сеттаймаута используй реквестанииейшнфрейм https://developer.mozilla.org/...equestAnimationFrame
И как сказал рысь, было бы лучше вынести очистку экрана в рендерлуп
- 16.03.2024 / 11:17
Askalite
  Пользователь

Askalite 
Сейчас: Offline
Кальцид, рассинхронизация: setTimeout("process()", 30) для синхронизации можно также использовать requestAnimationFrame, но увеличится инпут лаг.
- 19.03.2024 / 08:46
Кальцид
  Пользователь

Кальцид 
Сейчас: Offline
Перенëс один setTimeout в другую функцию. И мерцания пропали. Теперь работает как нужно.
- 19.03.2024 / 09:57
Tygrain
  Пользователь

Tygrain 
Сейчас: Offline
Кальцид, круто. Но реквестанииейшнфрейм все равно нужен
Наверх  Всего сообщений: 780
Фильтровать сообщения
Поиск по теме
Файлы топика (20)