15.03.2024 / 15:59 |  | 
Кальцид    Пользователь  
   Сейчас: Offline 
 Имя: Влад Откуда: Карадарас Регистрация: 05.12.2011
   | Askalite, Всё в канвасе.
   | 
  16.03.2024 / 03:54 |  | 
Askalite    Пользователь  
   Сейчас: Offline 
 Имя: Аскалайт Регистрация: 12.10.2011
   | Кальцид, если ты пишешь игру на реакцию, то никак не исправишь, если просто игра, то тебе надо синхронизировать.
   | 
  16.03.2024 / 03:56 |  | 
RblSb    Пользователь  
   Сейчас: Offline 
 Регистрация: 25.07.2011
   | Мерцание наверно из-за того что ты в обоих функциях делаешь очистку канваса. Тебе нужно вынести очистку перед тем как ты вызываешь отрисовку своих компонентов, вызывая в начале каждого кадра ее, а не в начале каждой функции (вероятно)
   Изменено RblSb (16.03 / 03:57) (всего 1 раз) | 
  16.03.2024 / 10:57 |  | 
Кальцид    Пользователь  
   Сейчас: Offline 
 Имя: Влад Откуда: Карадарас Регистрация: 05.12.2011
   | Суть в том что эти функции работают отдельно. function menu() {  
ctx.clearRect(0, 0, SWidth, SHeight);  
    canvas.addEventListener('click', function(){  
        if ((mousex >= (SWidth/2)-100) && (mousex <= (SWidth/2)+50) && (mousey >= 90) && (mousey <= 110)) {   
   
            ctx.fillText("Новая игра", 0, 20);  
            gp = 2;  
            process();  
   
        };    
   
    });  
   
   
setTimeout("menu()", 30);  
};  
function game() {  
    ctx.clearRect(0, 0, SWidth, SHeight);  
...  
    setTimeout("game()", 30);  
};  
function process() {  
   
    if (gp == 1) {  
        menu();  
    }  
    if (gp == 2) {  
        game();  
    }  
};  
   
process();  
 и когда запускается функция game(); то начинает мерцать функция menu(); хотя она не работает.. логически не укладывается в голове  | 
  16.03.2024 / 11:02 |  | 
Tygrain    Пользователь  
   Сейчас: Offline 
 Имя: Александр Откуда: Днепр Регистрация: 01.07.2012
   | setTimeout("menu()", 30) никаких ошибок не выкидывает? Сеттаймаут принимает функцию а не строку если чво.
   Изменено Tygrain (16.03 / 11:10) (всего 1 раз) | 
  16.03.2024 / 11:09 |  | 
Slendermanx    Пользователь  
   Сейчас: Offline 
 Имя: Awower Регистрация: 04.04.2017
   | Кальцид, А вот в AGK Basic можно тоже самое написать, но на много строчек меньше и легче. Чистый js canvas топорный, и для простых игр или даже сложнее лучше использовать что нибудь типа AGK. А ещё там лёгкая сборка сразу на ПК, Андроид    и прочее. И не надо скачивать андроид студио     __________________
   Basic - это сила, а я Авовер  Изменено Slendermanx (16.03 / 11:10) (всего 1 раз) | 
  16.03.2024 / 11:12 |  | 
Tygrain    Пользователь  
   Сейчас: Offline 
 Имя: Александр Откуда: Днепр Регистрация: 01.07.2012
   | Кальцид, вместо сеттаймаута используй реквестанииейшнфрейм  https://developer.mozilla.org/...equestAnimationFrameИ как сказал рысь, было бы лучше вынести очистку экрана в рендерлуп  | 
  16.03.2024 / 11:17 |  | 
Askalite    Пользователь  
   Сейчас: Offline 
 Имя: Аскалайт Регистрация: 12.10.2011
   | Кальцид, рассинхронизация: setTimeout("process()", 30) для синхронизации можно также использовать requestAnimationFrame, но увеличится инпут лаг.
   | 
  19.03.2024 / 08:46 |  | 
Кальцид    Пользователь  
   Сейчас: Offline 
 Имя: Влад Откуда: Карадарас Регистрация: 05.12.2011
   | Перенëс один setTimeout в другую функцию. И мерцания пропали. Теперь работает как нужно.
   | 
  19.03.2024 / 09:57 |  | 
Tygrain    Пользователь  
   Сейчас: Offline 
 Имя: Александр Откуда: Днепр Регистрация: 01.07.2012
   | Кальцид, круто. Но реквестанииейшнфрейм все равно нужен
   |