Здравствуйте, гость ( Вход | Регистрация )

> Misc Uopilot - GML Прибамбасы к пилоту
EL-GReeN
сообщение 29.7.2012, 19:58
Сообщение #1


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Misc Uopilot ловит из буфера спец ключ misc и то что после него исполняет, функции и синтаксис должны быть на GML (это JS подобный язык в движке Game Maker).

Окошко с возможностью отображения 4х строк на своей поверхности(IMG:style_emoticons/default/sad.gif)скрипт пример выполняется при запущенной программе)

Код
set linedelay 20
set clipboard misc window_set_showborder(0) //Границы вокруг окна (0-1).
set clipboard misc window_set_rectangle(600,0,400,20) //Позиция и растягивание размера окна (x, y, w, h).
set clipboard misc window_set_stayontop(1) //Поверх всего (0-1).
set clipboard misc t1x=4; t1y=2; t1t='Хп:' //Обьект текст1 (t1x=x, t1y=y, t1t=text)
set clipboard misc t2x=100; t2y=2; t2t='Мп:' //Обьект текст2
set clipboard misc t3x=200; t3y=2; t3t='Стам:' //Обьект текст3
set clipboard misc t4x=300; t4y=2; t4t='Голд:' //Обьект текст4
set #hp 0
:re2
set clipboard misc t1t='Хп: ' + '#hp' //Динамическое изменение текста1
wait 100
set #hp #hp + 5
if #hp < 101
goto re2
end_if
end_script

Вариант 2:
Код
set linedelay 2
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc window_set_showborder(0)) //Границы вокруг окна (0-1).
set #result setwindowtext (#handleWin, misc window_set_rectangle(600,0,400,20)) //Позиция и растягивание размера окна (x, y, w, h).
set #result setwindowtext (#handleWin, misc window_set_stayontop(1)) //Поверх всего (0-1).
set #result setwindowtext (#handleWin, misc t1x=4; t1y=2; t1t='Хп:') //Обьект текст1 (t1x=x, t1y=y, t1t=text)
set #result setwindowtext (#handleWin, misc t2x=100; t2y=2; t2t='Мп:') //Обьект текст2
set #result setwindowtext (#handleWin, misc t3x=200; t3y=2; t3t='Стам:') //Обьект текст3
set #result setwindowtext (#handleWin, misc t4x=300; t4y=2; t4t='Голд:') //Обьект текст4
set #hp 0
:re2
set #result setwindowtext (#handleWin, misc t1t='Хп: ' + '#hp') //Динамическое изменение текста1
wait 100
set #hp #hp + 5
if #hp < 101
goto re2
end_if
end_script


Выключается нажатием искейпа если активно его окно, либо из скрипта:

Код
set clipboard misc game_end()


Изменение размера окна:

Код
set clipboard misc room_set_width(0,400) //Ширина (0, w).
wait 20
set clipboard misc room_set_height(0,20) //Высота (0, h).
wait 20
set clipboard misc room_restart()//Перезапуск окна, после этого все настройки сбиваются, поэтому делается в первую очередь.
wait 20
end_script


Выполнение(IMG:style_emoticons/default/sad.gif)способ 1)

Выполнение кода в миске происходит 1 раз при таком обращении:
Код
set clipboard misc room_set_height(0,20)
или в альтернативном:
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc e_stp0='draw_rect_screen(1100,0,1150,20)')

(Функция room_set_height(0,20) заносится в строковую переменную и выполняется, после чего переменная очищается(это может быть и не функция а большой кусок кода))
Для многократного выполнения есть спец переменные в которых код не очищается и выполняется 1 раз каждый шаг, шаг можно изменить, и пока он по умолчанию 5мс (200 раз в секунду=фпс 200)
Обычные функции требующие постоянного выполнения должны быть в событии Step:
e_stp0, e_stp1, e_stp2... e_stp10
Функции рисования должны быть в событии Draw:(за исключением функций рисования вне окна, они могут быть в step)
e_drw0, e_drw1, e_drw2... e_drw10
Также есть таймерные события отличающиеся от step только тем что выполняются раз в 10, 100, 1000 шагов(IMG:style_emoticons/default/sad.gif)для повышения производительности)
e_slow10
e_slow100
e_slow1000
Таким образом можно засунуть свой код в строковую переменную(например e_slow10), обработчик будет постоянно его выполнять до тех пор пока не завершена программа или не будет очищена переменная:
Код
set clipboard misc e_slow10='room_set_height(0,20)'
set clipboard misc e_slow10=''


Выполнение(IMG:style_emoticons/default/sad.gif)способ 2)

Отличие лишь в том что при таком обращении код помещается не в буфер а в заголовок окна миска, где он успешно отлавливается и выполняется, затем заголовок возвращается в исходное состояние:(misc_uopilot).
Код
set linedelay 0
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc e_stp0='draw_rect_screen(1100,0,1150,20)') //Установка кода в качестве заголовка, через несколько мс вернется обратно
//Обратная связь
set $x 100
set #result setwindowtext (#handleWin, misc clipboard_set_text(string(random($x)))// Ответ будет в буфере
set #result setwindowtext (#handleWin, misc room_caption=string(random($x))//Ответ будет в заголовке
wait 2
set $x2 GetWindowtext (#handleWin) //Получаем ответ из заголовка, можно не успеть забрать или опоздать, до изменения заголовка обратно
wait 20
get clipboard $x //Получаем ответ из буфера, намного надежнее
msg $x $x2
end_script


Графика на экране:

Есть функции рисования которых нет в документации (потому что они из дллки), полезны тем что в отличие от стандартных позволяют рисовать вне окна то есть в любом месте экрана: (линии, текст, прямоугольники)
Код
set linedelay 20
set clipboard misc set_pen(1,c_red) //Установка ширины линии и цвета(ширина, цвет).
set clipboard misc set_brush(c_lime) //Установка цвета прямоугольника(цвет).
set clipboard misc e_slow100='draw_rect_screen(1100,0,1150,20)' //Функция рисования прямоугольников на экране(лево, право, верх, низ).
set clipboard misc e_drw0='draw_rect_screen(1155,0,1175,20)'
set clipboard misc e_slow10='draw_line_screen(10,10,300,10)' //Функция рисования линий на экране(x1, y1, x2, y2).
set clipboard misc e_stp0='draw_text_screen(1000,1,"Misc Uopilot",c_aqua)'//Функция рисования текста на экране(x, y, текст, цвет).
//еще есть рисование текстуры но по крайней мере у меня оно начинает глючить через несколько минут
//set clipboard misc pic = load_bitmap("1test.bmp") //Загрузка текстуры.
//set clipboard misc e_stp1='draw_bitmap_screen(pic,400,0)'//Функция рисования текстуры на экране(x, y, текст, цвет).
end_script


Пример обратной связи:

Код
set $x 100
set clipboard misc clipboard_set_text(string(random($x)))
wait 20
get clipboard $x
set clipboard ""
msg $x
end_script


Скачать Misc Uopilot и документацию:


Дополнительное дополнение добавленное позже:

Дополнительно по миску, это отдельная программка, может взаимодействовать с пилотом, скомпилирована в движке game maker 8.0(или 8.1) .
Миск может ВСЕ что есть в этом движке через выполнение кода движка (GML внутренний язык движка для программирования), именно этот код посылается из пилота в миск.
Из этого следует, что для того что бы хорошо понять как работать с миском нужно знать этот движок.
Если вы не знаете этот двиг, вы все равно можете хорошо понять что к чему если вы программист, по примерам, по приложенной документации движка.
Если вы не знаете ни движок ни программирование (нормальное), вы не сможете хорошо понять как использовать миск, если только не потратите много времени на осознание и медитацию над пилотом и GM (время может быть меньше если вы уже знаете пилот, javascript и зашкаливает мотивация).
Под "хорошо понять что к чему" имеется ввиду возможность делать действительно сложные вещи, такие как сеть, навороченный интерфейс или сложная игровая графика с логикой.

Развивать миск можно но только в направлении уменьшения кода задач пользователей и удобства.

http://rutracker.org/forum/viewtopic.php?t=2573603 Game Maker v8.0 Pro


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
EL-GReeN   Misc Uopilot - GML Прибамбасы к пилоту   29.7.2012, 19:58
DarkMaster   А более приземленно можно пояснить что это такое? ...   29.7.2012, 22:16
EL-GReeN   А более приземленно можно пояснить что это такое?...   29.7.2012, 22:32
Zeleax   Мне тоже и интересно - что там есть такого, чего н...   29.7.2012, 22:24
DarkMaster   Дык есть плагины, которые позволяют передавать стр...   29.7.2012, 22:34
DarkMaster   EL-GReeN, я те в глаз дам. Сейчас сижу смотрю на ф...   29.7.2012, 23:59
Zeleax   А не лучше ли направить усилия на разработку соотв...   30.7.2012, 11:28
EL-GReeN   А не лучше ли направить усилия на разработку соот...   30.7.2012, 12:24
WKnight   Начиная с версии 1.07 beta x, пилот умеет общаться...   30.7.2012, 12:31
Zeleax   Буфер сегодня ковырял, подозреваю что ускорить его...   30.7.2012, 12:37
WKnight   Буфер как-раз по этому поводу и ковырял. Есть зар...   30.7.2012, 12:58
EL-GReeN   Добавил еще 1 способ обращения через заголовок, от...   30.7.2012, 16:10
DarkMaster   Собственно с темой надо что-то делать. Терять ее в...   2.8.2012, 3:56
EL-GReeN   Предлагаю эту тему оставить как есть найти не проб...   2.8.2012, 12:01
DarkMaster   шибко не вчитывался, вроде норм. Завтра тему поле...   2.8.2012, 12:45
WKnight   Буфер поправлен, а про какие операции с файлами и ...   3.8.2012, 2:37
Zeleax   Да это я для обощения ситуации написал. Траблов вр...   3.8.2012, 9:13
asdvo1ty   Ссылки побились. Перезалейте, пожалуйста.   4.9.2012, 12:38
Zeleax   EL-GReeN писал: Попробуйте скачать и запустить пр...   2.11.2012, 16:37
EL-GReeN   Добавлена возможность(через расширение) посылать н...   3.11.2012, 10:13
Zeleax   Хороший пример использования проверки зажатых клав...   17.3.2013, 14:15
IvaniuS   скажу больше - для удобства можно писать текст про...   18.3.2013, 16:05
Zeleax   так ведь можно просто одну длинную строку разбить ...   18.3.2013, 20:30


Ответить в эту темуОткрыть новую тему
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 18.9.2025, 18:19
Designed by Nickostyle