Дано:
Браузерная игра, статичный интерфейс, три вида его отображения (город, над городом+карта, игровая почта)
Задача:
Полностью изменить внешний облик интерфейса без мерцания и тормозов.
Мои предположения в решении:
Выводить графику игры на окно диалога, туда же отрисовывать свою графику "поверх", отлавливать события клавиатуры и мыши, посылать отловленные события в неактивное окно.
Вопрос:
Возможно ли решение такой задачи без заметного лага?
Есть ли у кого-нибудь подобные наработки? Кто-нибудь успешно решал подобные задачи?
Спасибо.
1. Kutuz_off - 23 Ноября, 2018 - 16:46:20 - перейти к сообщению
2. Zireael - 23 Ноября, 2018 - 18:05:22 - перейти к сообщению
Что-то вроде этого?
Клик левой кнопкой по диалогу будет отсылать клик на рабочий стол.
На счёт изменения скрина, смотря сколько пикселей надо будет перекрасить. Если какие-то мелкие элементы, то можно циклами в самом кибор. Если закрашивать большие области, то это только в длл, иначе будет медленно. И, скорее всего, придётся играться с двумя скринами, пока один выводится, второй перекрашивать, потом выводить второй и перекрашивать первый. Если один и тот же скрин выводить и перекрашивать, то будет мерцание.
CODE:
win desktop=window ("FolderView", "SysListView32", window ("Program Manager", "Progman", -1)); // рабочий стол
createdialog(0);
showdialog(0, "Диалог", 600, 400, 500, 300, 1, 1);
while(window("Диалог")==0)sleep(100); // ждём когда диалог откроется
win dialog=window("Диалог"); // указатель на диалог
visualwindow(dialog, 0, 0, 0, 500, 300, 0, 0, 100, desktop); // вывод на диалог
int x, y;
loop()
{
if(getkeystate(1)==1) // если нажата левая кнопка
{
getmouse(x, y, dialog); // получаем координаты курсора относительно диалога
sendmouse(LEFT, x, y, desktop); // клик левой по рабочему столу
}
sleep(10);
}
createdialog(0);
showdialog(0, "Диалог", 600, 400, 500, 300, 1, 1);
while(window("Диалог")==0)sleep(100); // ждём когда диалог откроется
win dialog=window("Диалог"); // указатель на диалог
visualwindow(dialog, 0, 0, 0, 500, 300, 0, 0, 100, desktop); // вывод на диалог
int x, y;
loop()
{
if(getkeystate(1)==1) // если нажата левая кнопка
{
getmouse(x, y, dialog); // получаем координаты курсора относительно диалога
sendmouse(LEFT, x, y, desktop); // клик левой по рабочему столу
}
sleep(10);
}
Клик левой кнопкой по диалогу будет отсылать клик на рабочий стол.
На счёт изменения скрина, смотря сколько пикселей надо будет перекрасить. Если какие-то мелкие элементы, то можно циклами в самом кибор. Если закрашивать большие области, то это только в длл, иначе будет медленно. И, скорее всего, придётся играться с двумя скринами, пока один выводится, второй перекрашивать, потом выводить второй и перекрашивать первый. Если один и тот же скрин выводить и перекрашивать, то будет мерцание.
3. Kutuz_off - 24 Ноября, 2018 - 00:56:08 - перейти к сообщению
Zireael,
- да, именно это.
- да, интересно научиться работать с длл, был бы рад узнать максимально практичные книжки/мануалы/видео, желательно с более подробными ссылками на темы/резделы, которые так помогут в решении данного вопроса. Думаю тема будет актуальна не только для меня. Уверен, многие начинают программировать с нуля благодаря этой программе и увлечению к играм.
Сейчас задача по перекрашиванию примерно в 600/200 или 900/300px в зависимости от разрешения экрана. Часть работы уже реализовывал (непосредственным выводом на экран, а не в диалог), и было заметно как КИБОР перекрашивает картинку по столбцам. В принципе приемлемо, но только для реализации вывода одного такого изображения, если же нагружать далее - эфект уже будет не тот. Интерфейс который отрисовывается с задержкой не радует глаз. Определенно нужна более быстрая работа с изображениями.
- да, именно это.
- да, интересно научиться работать с длл, был бы рад узнать максимально практичные книжки/мануалы/видео, желательно с более подробными ссылками на темы/резделы, которые так помогут в решении данного вопроса. Думаю тема будет актуальна не только для меня. Уверен, многие начинают программировать с нуля благодаря этой программе и увлечению к играм.
Сейчас задача по перекрашиванию примерно в 600/200 или 900/300px в зависимости от разрешения экрана. Часть работы уже реализовывал (непосредственным выводом на экран, а не в диалог), и было заметно как КИБОР перекрашивает картинку по столбцам. В принципе приемлемо, но только для реализации вывода одного такого изображения, если же нагружать далее - эфект уже будет не тот. Интерфейс который отрисовывается с задержкой не радует глаз. Определенно нужна более быстрая работа с изображениями.
4. Dantes3000 - 24 Ноября, 2018 - 02:54:43 - перейти к сообщению
Нужно изменить сам HUD или абсолютно всё, в т.ч игровой процесс?
Если первое, то проще сделать png картинку и вывести ее на экран поверх HUDа, но кибором лучше этого не делать
Если первое, то проще сделать png картинку и вывести ее на экран поверх HUDа, но кибором лучше этого не делать
5. Kutuz_off - 24 Ноября, 2018 - 05:58:27 - перейти к сообщению
Dantes3000, появится пара новых кнопок упрощающих кооперацию в игре.
Я уже сделал такое в Кибе, и надо сказать: выглядит не очень презентабельно.. даже если сделать вывод более грамотно, на Си (в чем почти не имею опыта) - эффект будет все равно не тот. А в окне - оно смотрится, там можно убрать разные косяки зримые глазу, например занизив время отклика, или просто сделав черный экран загрузки скрывая потроха работы программы.
Я уже сделал такое в Кибе, и надо сказать: выглядит не очень презентабельно.. даже если сделать вывод более грамотно, на Си (в чем почти не имею опыта) - эффект будет все равно не тот. А в окне - оно смотрится, там можно убрать разные косяки зримые глазу, например занизив время отклика, или просто сделав черный экран загрузки скрывая потроха работы программы.
6. Dantes3000 - 24 Ноября, 2018 - 08:29:23 - перейти к сообщению
Kutuz_off , а не проще сделать диалог с кнопками поверх окна игры?
(Добавление)
.
я об этом и говорил
(Добавление)
.
Kutuz_off пишет:
Я уже сделал такое в Кибе, и надо сказать: выглядит не очень презентабельно
Dantes3000 пишет:
но кибором лучше этого не делать
я об этом и говорил
7. Kutuz_off - 24 Ноября, 2018 - 09:48:28 - перейти к сообщению
Dantes3000, это совсем не то что я хочу) Костыли уже есть)
8. Zireael - 24 Ноября, 2018 - 10:51:28 - перейти к сообщению
https://drive.google.com/open?id...-hGv-dQIXj07Nry3
В архиве dll и картинка для примера, закинуть всё в папку с кибор.
Функция paint копирует двухмерный массив int в другой двухмерный массив int.
Принимаемые параметры:
1. Указатель на двухмерный массив int, в который будет копироваться другой массив.
2. Первая размерность массива.
3. Вторая размерность массива.
4. Указатель на двухмерный массив int, который будет копироваться.
5. Первая размерность массива.
6. Вторая размерность массива.
7. Цвет фона. Этот цвет игнорируется при копировании. Т. е., если надо поместить на скрин круг, то надо закрасить всё что не нужно в один цвет, например белый (16777215) и указать его в качестве фона.
8. Позиция X.
9. Позиция Y.
В архиве dll и картинка для примера, закинуть всё в папку с кибор.
Функция paint копирует двухмерный массив int в другой двухмерный массив int.
Принимаемые параметры:
1. Указатель на двухмерный массив int, в который будет копироваться другой массив.
2. Первая размерность массива.
3. Вторая размерность массива.
4. Указатель на двухмерный массив int, который будет копироваться.
5. Первая размерность массива.
6. Вторая размерность массива.
7. Цвет фона. Этот цвет игнорируется при копировании. Т. е., если надо поместить на скрин круг, то надо закрасить всё что не нужно в один цвет, например белый (16777215) и указать его в качестве фона.
8. Позиция X.
9. Позиция Y.
code (Отобразить)