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
| Кальцид, круто. Но реквестанииейшнфрейм все равно нужен
|