DmitryDS
Потому что я такой-сякой
GM Pro user
Репутация: 159
OfflineНаграды: ![За лояльность! [+150 репутации] За лояльность! [+150 репутации]](http://forum.hellroom.ru/awards/d3334d4fd3e3124bd7ba2ce29fab5c8a_hellroomforum_good_tin.gif)  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif)
API: GameMaker Studio Master
Сообщений: 1061
|
 |
« Ответ #165 : Июнь 29, 2016, 18:41:16 » |
|
Простой, но очень полезный скрипт, заметно уменьшающий объем кода при написании всяких интерфейсов, а также имеющий небольшую защиту от возможных ошибок: Кнопка! ///sc_Button(x1, y1, x2, y2) var x1 = min(argument0, argument2), y1 = min(argument1, argument3), x2 = max(argument0, argument2), y2 = max(argument1, argument3); return point_in_rectangle(window_mouse_get_x(), window_mouse_get_y(), x1, y1, x2, y2);
Назначение, как видно - убедиться, что курсор находится в заданной области. Можно использовать не только для кнопок, но и для выделения элемента при наведении, вызове всплывающих подсказок etc.
|
|
|
|
|
Записан
|
Я никогда никого не пытаюсь оскорбить или обидеть, хотя порой веду себя вызывающе. Не обижайтесь, я не со зла 
|
|
|
Gamedel
GM Pro user
Репутация: 78
Offline
Пол:  Награды: ![За постоянность! [10 дней на форуме] За постоянность! [10 дней на форуме]](http://forum.hellroom.ru/awards/35b6e985f89cc9a79a2bbfdd216390ca_hellroomforum_time_tin.gif) 
API: GameMaker Studio Master
Деятельность: Прогер GML, C#, PHP, HTML и тп.
Сообщений: 331
|
 |
« Ответ #166 : Июнь 30, 2016, 05:10:28 » |
|
Скрипт нажатия кнопки с её отрисовкой Create:button_init() - инициализация скрипта ///button_init() razm_val[0]=1 Draw:button_sc_ext(x,y,image,index,image_index,toggle on, image off,image_index off) - рисование и проверка нажатия кнопки. При нажатии на кнопку возвращает значение 1, а по умолчанию 0. Нажатие проверяется по маске спрайта. x,y - координаты кнопки index - индекс кнопки (у каждой кнопки должен быть свой индекс. Примечание: индексы лучше начинать нумеровать с 0-n) image, image_index - спрайт кнопки и индекс спрайта toggle on - состояние кнопки (0 - выключена, тогда игнорирует нажатия и рисует спрайт image off; 1 - активна; 2 - игнорирует нажатия рисуется спрайт image) image off,image_index off - спрайт и его индекс, который будет рисоваться если кнопка отключена (т.е. toggle on=0) ///button_sc_ext(x,y,image,index,image_index,toggle on, image off,image_index off) if array_length_1d(razm_val)-1<argument3{razm_val[argument3]=1}
var xx=argument0 var yy=argument1
if argument5=1{
var image=argument2
var ww0=sprite_get_bbox_left(image) var hh0=sprite_get_bbox_top(image)
var ww=sprite_get_bbox_right(image) var hh=sprite_get_bbox_bottom(image)
var ww_off=sprite_get_xoffset(image) var hh_off=sprite_get_yoffset(image)
var ret=0
if mouse_check_button_pressed(mb_left)and point_in_rectangle(mouse_x, mouse_y, xx+ww0-ww_off, yy+hh0-hh_off, xx+ww-ww_off, yy+hh-hh_off){ razm_val[argument3]=0.9 }
if mouse_check_button_released(mb_left){ if point_in_rectangle(mouse_x, mouse_y, xx+ww0-ww_off, yy+hh0-hh_off, xx+ww-ww_off, yy+hh-hh_off)and razm_val[argument3]=0.9{ ret=1
} razm_val[argument3]=1 } if razm_val[argument3]!=1 and !mouse_check_button(mb_left){ razm_val[argument3]=1 }
draw_sprite_ext(image,argument4,xx,yy,razm_val[argument3],razm_val[argument3],0,c_white,1) }else{ if argument5=0{ draw_sprite_ext(argument6,argument7,xx,yy,1,1,0,c_white,1) ret=0}else{ draw_sprite_ext(argument2,argument4,xx,yy,1,1,0,c_white,1) ret=0 } }
return ret Пример использования скрипта: if button_sc_ext_panel(x,y,button_s,0,0,1,button_s,0) { global.money+=20 } P.S. Если скрипт оказался полезным не забываем плюсовать  Добавлено: Июнь 30, 2016, 05:20:04 Скрипт постепенного сведения числа к нужному raven(my_val,other_val,prirost) - позволяет свести какое-нибудь число к нужному, используя число приращения. Возвращает my_val с приращением (в конечном итоге other_val). Полезен тем, что можно накидывать числу значения не боясь переполнения, заданного вами порога. my_val - число которое надо свести other_val - число к которому надо свести prirost - приращение (всегда положительное, даже если my_val>other_val) ///raven(my_val,other_val,prirost)
end_val=0 prir=0
if argument0>argument1{ if argument0<argument1+argument2{prir=argument0-argument1}else{prir=argument2} end_val=argument0-prir }else{
if argument0!=argument1{ if argument0>argument1-argument2{prir=argument1-argument0}else{prir=argument2} end_val=argument0+prir }else{ end_val=argument0 } }
return end_val Пример использования:x=raven(x,-1000,10) //x с приращением 10 будет с каждым шагом сводиться к -1000
|
|
|
|
« Последнее редактирование: Июнь 30, 2016, 05:26:08 от Gamedel »
|
Записан
|
|
|
|
MusNik
KeeVee Games
GM Pro user
Репутация: 733
Offline
Пол:  Награды:  ![За постоянность! [200 дней на форуме] За постоянность! [200 дней на форуме]](http://forum.hellroom.ru/awards/78e87f17e3713947881315332c8ce619_hellroomforum_time_silver.gif) ![За лояльность! [+500 репутации] За лояльность! [+500 репутации]](http://forum.hellroom.ru/awards/90cb589b7473ca11705300194079bf64_hellroomforum_good_bronze.gif)   ...
API: GameMaker Studio 2
Сообщений: 3241
|
 |
« Ответ #167 : Июнь 30, 2016, 10:10:24 » |
|
prirost  Это не это разве? var c = argument0; var t = argument1; var a = argument2; if (c < t) { c = min(c+a, t); } else { c = max(c-a, t); } return c;
|
|
|
|
|
Записан
|
|
|
|
Gamedel
GM Pro user
Репутация: 78
Offline
Пол:  Награды: ![За постоянность! [10 дней на форуме] За постоянность! [10 дней на форуме]](http://forum.hellroom.ru/awards/35b6e985f89cc9a79a2bbfdd216390ca_hellroomforum_time_tin.gif) 
API: GameMaker Studio Master
Деятельность: Прогер GML, C#, PHP, HTML и тп.
Сообщений: 331
|
 |
« Ответ #168 : Июнь 30, 2016, 10:56:15 » |
|
Оно самое, не заметил. Ещё думаю можно было бы подобное с помощью готовой функции реализовать clamp(val, min, max)
|
|
|
|
|
Записан
|
|
|
|
life Jumb
GM Pro user
Репутация: 251
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) ![За лояльность! [+150 репутации] За лояльность! [+150 репутации]](http://forum.hellroom.ru/awards/d3334d4fd3e3124bd7ba2ce29fab5c8a_hellroomforum_good_tin.gif)  ![Третье место на HellRoom Jam #6 [Игра на конкурс] Третье место на HellRoom Jam #6 [Игра на конкурс]](http://forum.hellroom.ru/awards/a165f5ddc4c612e1a21d18124023e9e2_hellroom_jam_6_bronze.gif) ![2 место в конкурсе Адекватные игры #3 [Антиутопия] 2 место в конкурсе Адекватные игры #3 [Антиутопия]](http://forum.hellroom.ru/awards/ca82cba08329dee15caedce4672c7cd0_antiutopy_adequate3_silver.gif)
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512
|
 |
« Ответ #169 : Август 12, 2016, 13:24:50 » |
|
///math_mix(v1, v2, coof) return( argument0*(1-argument2)+argument1*argument2 )
Самая обычная пропорция, возвращает среднее значение между v1 и v2 со смещением в сторону coofт.е если coof=0 возвратит v1 если coof=1 то v2 image_angle=math_mix(90, 80, 0.7) //необязательно v2 должен быть больше v1, формула работает и так
x=math_mix(50, 20, global.pause=0) //норм работает с булевыми, это заменяет код: "if(global.pause=0){x=20}else{x=50}"
|
|
|
|
|
Записан
|
|
|
|
Dmi7ry
Гл. Администратор
Репутация: 1379
Offline
Пол:  Награды:  ![За постоянность! [200 дней на форуме] За постоянность! [200 дней на форуме]](http://forum.hellroom.ru/awards/78e87f17e3713947881315332c8ce619_hellroomforum_time_silver.gif) ![За лояльность! [+1000 репутации] За лояльность! [+1000 репутации]](http://forum.hellroom.ru/awards/49d1e615667c15086498002286ccd3e9_hellroomforum_good_gold.gif)   
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626
|
 |
« Ответ #170 : Август 12, 2016, 14:39:20 » |
|
///math_mix(v1, v2, coof) return( argument0*(1-argument2)+argument1*argument2 )
Самая обычная пропорция, возвращает среднее значение между v1 и v2 со смещением в сторону coofт.е если coof=0 возвратит v1 если coof=1 то v2 image_angle=math_mix(90, 80, 0.7) //необязательно v2 должен быть больше v1, формула работает и так
x=math_mix(50, 20, global.pause=0) //норм работает с булевыми, это заменяет код: "if(global.pause=0){x=20}else{x=50}"
lerp же
|
|
|
|
|
Записан
|
- А какой, собственно, командой процессора колобок ест черта? - Командой EAT... |  | Справка и FAQ в правом верхнем углу... |  |
|
|
|
life Jumb
GM Pro user
Репутация: 251
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) ![За лояльность! [+150 репутации] За лояльность! [+150 репутации]](http://forum.hellroom.ru/awards/d3334d4fd3e3124bd7ba2ce29fab5c8a_hellroomforum_good_tin.gif)  ![Третье место на HellRoom Jam #6 [Игра на конкурс] Третье место на HellRoom Jam #6 [Игра на конкурс]](http://forum.hellroom.ru/awards/a165f5ddc4c612e1a21d18124023e9e2_hellroom_jam_6_bronze.gif) ![2 место в конкурсе Адекватные игры #3 [Антиутопия] 2 место в конкурсе Адекватные игры #3 [Антиутопия]](http://forum.hellroom.ru/awards/ca82cba08329dee15caedce4672c7cd0_antiutopy_adequate3_silver.gif)
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512
|
 |
« Ответ #171 : Август 12, 2016, 15:47:53 » |
|
О и правда такая есть, хотя я помню ее искал перед тем как написал свою, странно почему не mix
|
|
|
|
|
Записан
|
|
|
|
Лер да Рим
On standby...
GM Pro user
Репутация: 103
Offline
Пол:  Награды:  ![За постоянность! [50 дней на форуме] За постоянность! [50 дней на форуме]](http://forum.hellroom.ru/awards/d09ba76b977b84fd4f5dcfae1f2918ff_hellroomforum_time_copper.gif)
API: Game Maker 8.0 Pro
Сообщений: 896
фрр-фрррр
|
 |
« Ответ #172 : Август 12, 2016, 16:03:30 » |
|
Какой ещё mix? Это функция линейно интерполяции.
|
|
|
|
|
Записан
|
Всё гениальное просто.
|
|
|
life Jumb
GM Pro user
Репутация: 251
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) ![За лояльность! [+150 репутации] За лояльность! [+150 репутации]](http://forum.hellroom.ru/awards/d3334d4fd3e3124bd7ba2ce29fab5c8a_hellroomforum_good_tin.gif)  ![Третье место на HellRoom Jam #6 [Игра на конкурс] Третье место на HellRoom Jam #6 [Игра на конкурс]](http://forum.hellroom.ru/awards/a165f5ddc4c612e1a21d18124023e9e2_hellroom_jam_6_bronze.gif) ![2 место в конкурсе Адекватные игры #3 [Антиутопия] 2 место в конкурсе Адекватные игры #3 [Антиутопия]](http://forum.hellroom.ru/awards/ca82cba08329dee15caedce4672c7cd0_antiutopy_adequate3_silver.gif)
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512
|
 |
« Ответ #173 : Август 12, 2016, 16:10:57 » |
|
Я имел в виду почему ее не mix в гамаке назвали. везде аналогичная функция mix называется, сорри если меня не поняли
|
|
|
|
|
Записан
|
|
|
|
Лер да Рим
On standby...
GM Pro user
Репутация: 103
Offline
Пол:  Награды:  ![За постоянность! [50 дней на форуме] За постоянность! [50 дней на форуме]](http://forum.hellroom.ru/awards/d09ba76b977b84fd4f5dcfae1f2918ff_hellroomforum_time_copper.gif)
API: Game Maker 8.0 Pro
Сообщений: 896
фрр-фрррр
|
 |
« Ответ #174 : Август 12, 2016, 16:20:07 » |
|
|
|
|
|
|
Записан
|
Всё гениальное просто.
|
|
|
life Jumb
GM Pro user
Репутация: 251
Offline
Пол:  Награды:  ![За постоянность! [100 дней на форуме] За постоянность! [100 дней на форуме]](http://forum.hellroom.ru/awards/79b1a4915bff7098a4a1984ad370be2c_hellroomforum_time_bronze.gif) ![За лояльность! [+150 репутации] За лояльность! [+150 репутации]](http://forum.hellroom.ru/awards/d3334d4fd3e3124bd7ba2ce29fab5c8a_hellroomforum_good_tin.gif)  ![Третье место на HellRoom Jam #6 [Игра на конкурс] Третье место на HellRoom Jam #6 [Игра на конкурс]](http://forum.hellroom.ru/awards/a165f5ddc4c612e1a21d18124023e9e2_hellroom_jam_6_bronze.gif) ![2 место в конкурсе Адекватные игры #3 [Антиутопия] 2 место в конкурсе Адекватные игры #3 [Антиутопия]](http://forum.hellroom.ru/awards/ca82cba08329dee15caedce4672c7cd0_antiutopy_adequate3_silver.gif)
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512
|
 |
« Ответ #175 : Август 12, 2016, 16:32:10 » |
|
Я не знаю других яп, кроме glsles и блупринтов из ue, поэтому искал в справке потому-что хранилось в моей голове. т.е. у меня очень узкий круг знаний в кодерстве Хотя забавно бывает натыкаться на такие совпадения, когда названия действия функции разные, но формула работы идентичная.
|
|
|
|
|
Записан
|
|
|
|
MusNik
KeeVee Games
GM Pro user
Репутация: 733
Offline
Пол:  Награды:  ![За постоянность! [200 дней на форуме] За постоянность! [200 дней на форуме]](http://forum.hellroom.ru/awards/78e87f17e3713947881315332c8ce619_hellroomforum_time_silver.gif) ![За лояльность! [+500 репутации] За лояльность! [+500 репутации]](http://forum.hellroom.ru/awards/90cb589b7473ca11705300194079bf64_hellroomforum_good_bronze.gif)   ...
API: GameMaker Studio 2
Сообщений: 3241
|
 |
« Ответ #176 : Август 12, 2016, 18:57:07 » |
|
Какой, к чёрту, mix? везде аналогичная функция mix называется
Я не знаю других яп, кроме glsles и блупринтов из ue Я не знаю не одного ЯП, но буду использовать термин "везде". Молодец, чо.
|
|
|
|
|
Записан
|
|
|
|
Goo
ну типа
GM Pro user
Репутация: 163
Offline
Пол:  Награды:  ![Второе место на HellRoom Jam #9 [Антибиотик] Второе место на HellRoom Jam #9 [Антибиотик]](http://forum.hellroom.ru/awards/195ce38974a80fb1fe0e6909737628c8_hj9_silver-1.gif)
API: GameMaker Studio 2
Деятельность: программист
Сообщений: 1345
|
 |
« Ответ #177 : Август 13, 2016, 12:24:51 » |
|
Ну не знаю, мне пригодилось, вдруг и еще кто-нибудь найдет ему применение Первый скрип, у вас есть 3 произвольных значения, val0,val1 и val2, если при нажатии мыши точка cx,cy(не обязательно координаты мыши) попадает в оба квадрата(они одинаковы, но у второго дополнительные границы), то возвращает val2, если попадает в квадрат с границей(минуя "безграничный" квадрат), то возвращает val1, в противном случае возвращает val0(вне квадратов) /// f_point_in_rectangle_border(cx,cy,x,y,x1,y1,lb,ub,rb,db,debug,val0,val1,val2,mouse key)
var cx = argument0; // x var cy = argument1; // y var lx = argument2; // left x var uy = argument3; // up y var rx = argument4; // right x var dy = argument5; // down y var lb = argument6; // borders left var ub = argument7; // up var rb = argument8; // right var db = argument9; // down var d = argument10; // debug var v = argument11; // val 0 var v0 = argument12; // 1 var v1 = argument13; // 2 var k = argument14; // mouse key
if(d) { draw_rectangle(lx,uy,rx,dy,true); draw_rectangle(lx-lb,uy-ub,rx+rb,dy+db,true); }
if(mouse_check_button_pressed(k)) { if(point_in_rectangle(cx,cy,lx-lb,uy-ub,rx+rb,dy+db)) { if(point_in_rectangle(cx,cy,lx,uy,rx,dy)) { return(v1); } return(v0); } }
return(v);
Второй скрипт, возвращает true, если при нажатии мыши точка px,py(не обязательно координаты мыши) принадлежит кругу (cx,cy,r), при условии, что центр этого круга тоже принадлежит кругу (cx0,cy0,r0), в противном случае возвратит false /// f_point_in_circle_ext(px,py,cx,cy,rad,cx0,cy0,rad0,debug,mouse key)
var px = argument0; // point x var py = argument1; // point y var cx = argument2; // first circle x var cy = argument3; // first circle y var r = argument4; // first circle radius var cx0 = argument5; // second circle x var cy0 = argument6; // second circle y var r0 = argument7; // second circle radius var d = argument8; // debug var k = argument9; // mouse key
if(d) { draw_circle(cx,cy,r,true); draw_circle(cx0,cy0,r0,true); }
if(mouse_check_button_pressed(k)) { if(point_in_circle(cx,cy,cx0,cy0,r0)) { if(point_in_circle(px,py,cx,cy,r)) { return(true); } } }
return(false);
|
|
|
|
« Последнее редактирование: Август 13, 2016, 20:34:32 от ZaRubick »
|
Записан
|
|
|
|
Fur
Абы-какой
GM Pro user
Репутация: 463
Offline
Пол:  Награды:  ![За постоянность! [500 дней на форуме] За постоянность! [500 дней на форуме]](http://forum.hellroom.ru/awards/e0371460a203dd46d2dc161571bf6144_hellroomforum_time_gold.gif) ![Третье место на HellRoom Jam #9 [Flucoldache] Третье место на HellRoom Jam #9 [Flucoldache]](http://forum.hellroom.ru/awards/bb4b4f1479909ce4eb3764370bdb2375_hj9_bronze-1.gif) ![За лояльность! [+300 репутации] За лояльность! [+300 репутации]](http://forum.hellroom.ru/awards/8ff7443ce508760cfbf715910b3eb0b3_hellroomforum_good_copper.gif)  
API: Game Maker 8.0 Lite
Деятельность: Бурная.
Сообщений: 3673
Лисяток тебе.
|
 |
« Ответ #178 : Август 13, 2016, 19:38:27 » |
|
Комментарии? Объяснение назначения функции? .-.
|
|
|
|
|
Записан
|
В одной отдельно взятой фразе не должно быть больше миллиона муравьёв, пусть даже она — научного труда о муравьях. Hyperflex
|
|
|
MusNik
KeeVee Games
GM Pro user
Репутация: 733
Offline
Пол:  Награды:  ![За постоянность! [200 дней на форуме] За постоянность! [200 дней на форуме]](http://forum.hellroom.ru/awards/78e87f17e3713947881315332c8ce619_hellroomforum_time_silver.gif) ![За лояльность! [+500 репутации] За лояльность! [+500 репутации]](http://forum.hellroom.ru/awards/90cb589b7473ca11705300194079bf64_hellroomforum_good_bronze.gif)   ...
API: GameMaker Studio 2
Сообщений: 3241
|
 |
« Ответ #179 : Август 13, 2016, 19:40:54 » |
|
Да вроде и так понятно.
|
|
|
|
|
Записан
|
|
|
|
|