RevolverOcelot
Посетитель
Репутация: 3
Offline
Пол:
API: GameMaker Studio Free
Сообщений: 43
|
|
« : Ноябрь 22, 2010, 05:51:29 » |
|
v v v v vДвижение и столкновения:Движение персонажа по 8 направлениям (изометрия, TDS)Запрыгивание на платформы снизу (платформер)ИИ как в PacmaneИИ стреляющих солдат в TDSИИ для TDSОстановка объекта в 3д игре (скольжение вдоль стены из стандартного туториала A First Person Shooter)Разные простейшие решенияСобытие выхода из столкновения | входа в пределы вида | событие прекращения чего-либоПеремещение по изометрической сеткеПлавное движение при нецелых скоростях Обработка чисел:Линейная интерполяцияМаксимальное общее кратноеОпределение диапазона, к которому относится число, через switch (не для GMS)Плавное изменение значения переменной (вариант 1)Плавное изменение значения переменной (вариант 2)Плавное изменение значения переменной (вариант 3, 4, clamp) Системы счисления bin->dec, dec->bin Факториал числа (вариант 1)Факториал числа (вариант 2)lengthdir(z) через тригонометрические функцииrandom_range для других языков программированияОкругление вниз до десятичных долей (0.5)Пропорция, возвращает число между двумя значениями в зависимости от коэффициента (lerp)Перевод температур между разными системами измерения (Цельсий, Кельвин, Фаренгейт, др.) Обработка текста:Разделение текста на массив строк (вариант 1)Разделение текста на массив строк (вариант 2)Как переносить текст на новую строку прямо в кодеЗамена некоторых символов в тексте на другиеСокращение текста до нужной длиныСохранение текстового файла при его редактированииЗагрузка текста из файла в GM8.1Получить первое слово из строки (вариант 1)Получить первое слово из строки (вариант 2)Получение элемента строкиANSI -> UTF-8ANSI -> UTF-8 v2ANSI -> UTF-8 gm8Замена русских букв в HEX (для http ссылок)Проверка символа, является ли буквой или цифройОграничение максимальной длины строки Рисование и эффекты:Обводка текста (вариант 1)Обводка объекта или текста (вариант 2)Обводка текста (вариант 3)Объемный текст (вариант 4)Очки в формате 000001 (вариант 1)Очки в формате 000001 (вариант 2)Очки в формате 000001 (v3)Рисование таймера в формате 00:00:00Вывод числа с интерактивным отображением дробной частиНаписание чисел как в калькулятореТень для объектаРисование четырехугольникаЭффект ядерного взрываКакой-то эффект для красотыЭффект "цветок"Рисование изометрической сеткиИзометрический полВырезание спрайта по маскеПишутся координаты мышиРисование текста вдоль кривойРисование сеткиСектор окружностиКруглый бар, окружность, дуга примитивамиУпрощённая полоса здоровьяЧетырёхугольник текстурированныйСистема сообщений (чат?) Массивы:Случайный выбор переменных из массива без повторовНахождение максимального элемента массиваПеревод двумерного массива в одномерныйРазделение строки на элементы массива, указывая символ-разделитель (функция Split)Сортировка массива (один из способов) Улучшение стандартных функций:des(object) - скрипт уничтожения других объектовinstance_nearest с дополнительными условиямиinstance_nearest v2real с проверкой, без мешающих игровому процессу ошибокround_ext - расширенное округление (не только до целых)string_pos определенного по порядку совпадения строкиstring_pos (v3)Две последние цифры в числе Три последние цифры в числе...string_lower и string_upper с поддержкой русских символовmove_contact для конкретных объектов"Хорошее столкновение" (или движение - move_contact, вариант 2)move_contact_object [v3]Универсальная замена алармов (таймеров, будильников, сигналов), самодельные алармыБыстрое дублирование сурфейса. Пауза с помощью сурфейса.point_in_rectangle x2, point_in_circle x2 Прочее:Прибавление датыКнопка, её рисование и нажатиеСоздание кнопки интерфейса при помощи point_in_rectangleПроверка наведения курсора мыши на элементы интерфейсаАвтоматическое преобразование вида блоков в зависимости от окружения (старая версия без оптимизации, новая - следом)Объемный звукНекоторые логические манипуляцииКак еще можно объединять условия, кроме andПаузаПодбор пропорций для экрана (только аспект 4:3)"Создание пули" - передача аргументов создаваемому экземпляру через скриптPunto switcher использовать для кодаФайл snippets.txt, как пользоватьсяСоздание объектов в некотором радиусеРасстановка объектов в изометрииСоздание сетки циклом forЧтение всех файлов одного типа из папкиОтключение видимости объекта, находящегося за пределами видаКиллог для мультиплеераСклеивание файловЧто-то с видами делает (скрипт совсем без описания)Зависание игрового процесса до тех пор, пока переменная не станет равна нулюОформление скриптов с помощью var и использование return ^ ^ ^ ^ ^
Предлагаю темку, в которой будут выкладываться полезные скрипты (сделанные вами, увиденные вами - неважно), который упрощают работу, создают полезные свойства, эффекты. Никакого обсуждения - скрипт и его описание. Вот пример (скрипт не мой, увидел в каком то РПГ движке, хорошая вещь) - рисует обведенный текст. draw_set_color(argument3) draw_text(argument0+1,argument1,argument4) draw_text(argument0-1,argument1,argument4) draw_text(argument0,argument1+1,argument4) draw_text(argument0,argument1-1,argument4)
draw_set_color(argument2) draw_text(argument0,argument1,argument4)
//argument0 = x позиция текста //argument1 = y позиция текста //argument2 = основной цвет текста //argument3 = цвет обводки текста //argument4 = 'текст'
|
|
« Последнее редактирование: Апрель 12, 2017, 21:04:15 от Fantom »
|
Записан
|
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол: Награды: ...
API: GameMaker Studio Master
Сообщений: 5026
|
|
« Ответ #1 : Ноябрь 22, 2010, 21:53:21 » |
|
Автор скрипта: FanTomПростой скрипт для создания объемного звука: sound_3d_set_sound_position(argument0,(x - view_xview - (view_wview div 2)) / 130, (y - view_yview - (view_hview div 2)) / 100,4);
//argument0 - название звука, расположение которого изменяется Определяет расположение звука относительно центра вида (камеры). Делители (130 и 100) определяют глубину объемности. Чем больше делитель, тем качественнее изменяется расположение звука, но в то же время медленнее перелетает в "другое ухо" :) Поэтому нужно найти баланс, и для разных игр эти числа могут отличаться. Выполняя этот скрипт в каком-либо объекте, звук, записанный в нулевом аргументе, "перепрыгивает" в координаты этого объекта.
|
|
« Последнее редактирование: Июль 30, 2011, 22:17:52 от FanTom »
|
Записан
|
|
|
|
Fantom
I am... All of me
Гл. Администратор
Репутация: 1325
Offline
Пол: Награды: ...
API: GameMaker Studio Master
Сообщений: 5026
|
|
« Ответ #2 : Декабрь 17, 2010, 22:07:50 » |
|
Пара скриптов по работе с текстом. 1. Автор скрипта: FanTomЗапись числа, у которого пустые разряды заполнены нулями. То есть, вместо 0 пишется 000000; вместо 25 пишется 000025. scr1=string(scr); scr2='';
if string_length(scr1) < 6 {scr2+='0'} if string_length(scr1) < 5 {scr2+='0'} if string_length(scr1) < 4 {scr2+='0'} if string_length(scr1) < 3 {scr2+='0'} if string_length(scr1) < 2 {scr2+='0'} scr2+=scr1;
draw_text(10,10,scr2);
//scr - текущие очки, количество денег и др. 2. Автор скрипта: FanTomРазбиение сплошного текста на массив строк. Пригодится для диалогов. maxphrase = string_count(chr(13),text) + 1;
istart = 1; iend = 1000000; j = 0; for (i=1; i<=string_length(text); i+=1;) { if ord(string_char_at(text,i)) = 13 {iend = i; mess[j] = string_copy(text,istart,iend-istart+1); istart=i+2; j+=1; } if i=string_length(text) {iend = i; mess[j] = string_copy(text,istart,iend-istart+1); } }
//text - исходный сплошной текст //mess[] - массив строк, получающийся в результате //maxphrase - количество строк в тексте
|
|
« Последнее редактирование: Ноябрь 22, 2012, 18:48:09 от FanTom »
|
Записан
|
|
|
|
Dva_Kota
|
|
« Ответ #3 : Декабрь 18, 2010, 20:24:29 » |
|
Движение персонажа по 8 направлениям. Можно использовать для изометрии или TDS. if (keyboard_check(vk_right)) {//нажата кнопка вправо sprite_index=spr_character_E image_speed=0.35 motion_set(0,5) if (keyboard_check(vk_down)) {//нажаты кнопки вправо и вниз sprite_index=spr_character_SE; image_speed=0.35; motion_set(315,5); } else { if (keyboard_check(vk_up)) {//нажаты кнопки вправо и вверх sprite_index=spr_character_NE; image_speed=0.35; motion_set(45,5); } } } else { if (keyboard_check(vk_down)) {//нажата кнопка вниз sprite_index=spr_character_S; image_speed=0.35; motion_set(270,5); if (keyboard_check(vk_left)) {//нажаты кнопки вниз и влево sprite_index=spr_character_SW; image_speed=0.35; motion_set(225,5); } } else { if (keyboard_check(vk_left)) {//нажата кнопка влево sprite_index=spr_character_W; image_speed=0.35; motion_set(180,5); if (keyboard_check(vk_up)) {//нажаты кнопки влево и вверх sprite_index=spr_character_NW; image_speed=0.35; motion_set(135,5); } } else { if (keyboard_check(vk_up)) {//нажата кнопка вверх sprite_index=spr_character_N; image_speed=0.35; motion_set(90,5); } else {//ничего не нажато motion_set(direction,0); image_speed=0; } } } }
|
|
|
Записан
|
|
|
|
UncleDec
|
|
« Ответ #4 : Январь 01, 2011, 14:11:28 » |
|
Скрипт desНедавно создал скрипт, простейший, но с ним очень удобно работать. Наверное, всех уже начинает бесить код уничтожения других объектов. Итак, создаём скрипт des: И пишем: with argument0 { instance_destroy() }
И, уже можно им пользоваться, теперь можно писать просто des(название_объекта). Очень удобно!
|
|
|
Записан
|
|
|
|
TUjh
Пользователь
Репутация: 10
Offline
Пол:
API: Game Maker 8.0 Pro
Деятельность: GML программист, художник, 3D Моделлинг
Сообщений: 76
Who i am?
|
|
« Ответ #5 : Январь 04, 2011, 12:00:49 » |
|
Простой скрипт тени для объекта: draw_sprite_ext(sprite_index,image_index,x+6,y+6,1,1,image_angle,c_black,0.3) draw_sprite_ext(sprite_index,image_index,x,y,1,1,image_angle,image_blend,1) x+6,y+6 - Положение тени c_black,0.3 - цвет и прозрачность тени
|
|
|
Записан
|
|
|
|
Hummer
scio me nihil scire
GM Pro user
Репутация: 335
Offline
Пол: Награды:
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573
|
|
« Ответ #6 : Январь 06, 2011, 18:43:30 » |
|
Во время разработки ЭВМ я написал 18 скриптов, и сейчас представлю самые полезные if(argument0=1) { return 0;//=false } else { return 1;//=true } Скрипт может понадобиться в изменениях булевых функций, например показывать-не показывать окно (инвентарь, консоль и т д) if(argument0=1)&&(argument1=1) { return 1;//=true } else { return 0;//=false } Нужен для соблюдения двух условий if(argument0=1)||(argument1=1) { return 1; } else { return 0; } Когда нужно соблюсти хотябы одно условие Прикрепляю .gml этих и других логических функций
|
|
|
Записан
|
Есть вещи, которые нельзя объяснить. Для всего остального есть Справка Рандом-рандом-рандомище (с) C++ & OpenGL
|
|
|
Romixal
GM Pro user
Репутация: 146
Offline
Пол: Награды:
API: GameMaker Studio Pro
Деятельность: developer
Сообщений: 627
|
|
« Ответ #7 : Январь 06, 2011, 19:35:39 » |
|
// Скрипт следующего вида // x = sc_wobble(x, target_x, slowness, wobble, array_index) // - wobble может быть между 1.05 и 2. // - slowness может быть от 16 до 100. // - array_index отражает id операции. // Для этого скрипта необходимо инициализировать spd[array_index] = 0 // //Скрипт плавного изменения переменной от x до target_x. // // Написан Mordi (2006 год.)
var dis, xx, tar, fric; xx=argument0; tar=argument1; fric=argument2; sp=argument3;
dis=point_distance(xx,xx,tar,tar)/2;
if xx<tar { spd[argument4]+=dis/fric; } if xx>tar { spd[argument4]-=dis/fric; }
spd[argument4]=spd[argument4]/sp; xx+=spd[argument4];
return xx;
|
|
|
Записан
|
|
|
|
Hummer
scio me nihil scire
GM Pro user
Репутация: 335
Offline
Пол: Награды:
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573
|
|
« Ответ #8 : Январь 07, 2011, 16:41:11 » |
|
вот ещё хочу предложить скрипт file_text_save(fname) file_text_close(argument0) file_text_open_append(argument0) Помоему логично ;)
|
|
|
Записан
|
Есть вещи, которые нельзя объяснить. Для всего остального есть Справка Рандом-рандом-рандомище (с) C++ & OpenGL
|
|
|
MyDreamForever
GM Pro user
Репутация: 288
Offline
Пол: Награды: ...
API: Game Maker 8.0 Pro
Сообщений: 701
StarCraft <3
|
|
« Ответ #9 : Январь 08, 2011, 10:39:44 » |
|
Движение за объектом x=название объекта за котором ты следуешь.x y=название объекта за котором ты следуешь.y Объект летит за мышкой. x=mouse_x y=mouse_y Объект следит за мышкой image_angle=point_direction(x,y,mouse_x,mouse_y) Объект поворачивается за объектом image_angle=point_direction(x,y,Player.x,Player.y) Событие Draw, смена цвета объекта на выбор игрока. image_blend=get_color(c_red) Сохранения и загрузка Действие сохранения. save_x = get_save_filename('Game Save|*.save','') game_save(save_x+string('.save')) Действие загрузки. load_x = get_open_filename('Game Save|*.save','') game_load(load_x) Объект постепенно летит за мышкой direction=point_direction(x,y,mouse_x,mouse_y) speed=8 instance_change(название объекта,1) // превращение в объект Hummer: Такая тема уже есть. Тема перенесена
|
|
« Последнее редактирование: Январь 08, 2011, 10:46:58 от Hummer »
|
Записан
|
|
|
|
Hummer
scio me nihil scire
GM Pro user
Репутация: 335
Offline
Пол: Награды:
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573
|
|
« Ответ #10 : Январь 10, 2011, 10:08:32 » |
|
Предлагаю такой скрипт рисования четырёхугольника (не квадрата или прямоугольника) //Скрипт рисующий четырёхугольник //argument8 - истина если не закрашивать, ложь если закрашивать x1=argument0 y1=argument1 x2=argument2 y2=argument3 x3=argument4 y3=argument5 x4=argument6 y4=argument7 out=argument8 if(out=1) { draw_line(x1, y1, x2, y2) draw_line(x2, y2, x3, y3) draw_line(x3, y3, x4, y4) draw_line(x4, y4, x1, y1) } else { draw_triangle(x1, y1, x2, y2, x4, y4, 0) draw_triangle(x2, y2, x3, y3, x4, y4, 0) }
|
|
|
Записан
|
Есть вещи, которые нельзя объяснить. Для всего остального есть Справка Рандом-рандом-рандомище (с) C++ & OpenGL
|
|
|
S_Kleer
|
|
« Ответ #11 : Январь 19, 2011, 19:21:14 » |
|
С помощью этого скрипта ваш игрок сможет проходить снизу блока, а сверху нет. (В платформере) В create у блока (он не должен быть твёрдым) пишем: solid = 1 В step пишем это: with Player { if vspeed > 0 { if !place_meeting(x,y,Block) { with Block { solid = 1 } } } } with Player { if vspeed < 0 { if !place_meeting(x,y,Block) { with Block { solid = 0 } } } } Player - Игрок Block - Наш блок В столкновении игрока с блоком пишем это: if Block.solid = 1 { vspeed = 0 } Готово! Вы получили, что так долго хотели! ;) Чтобы враг с гравитацией не проходил сквозь платформы, делаем в step так: if !place_meeting(x,y,Block) { if place_free(x,y+1) { gravity = 1 gravity_direction = 270 } else { gravity = 0 } if vspeed >= 6 { vspeed = 6 } } В столкновении с этим блоком, делаем так: move_contact_all(270,0) if Block.solid = 1 { vspeed = 0 } if Block.solid = 0 { gravity = 0 vspeed = -1 } Конечно враг будет немного дёргатся если игрок подпрыгнет, но это лучше чем ничего. ;) Авторы скрипта: S'Kleer и HARRISON
|
|
|
Записан
|
Коты - Мирители
|
|
|
Haks
GM Pro user
Репутация: 234
Offline
Пол: Награды:
API: GameMaker 8.1 Standard
Деятельность: Программист, Композитор.
Сообщений: 607
Date a Live ][
|
|
« Ответ #12 : Январь 26, 2011, 00:29:38 » |
|
Вот полезный скрит для создания ии в тдс для солдатов стреляющих пулями, взял со своей игры Operation F.O.X. 2 В событии Create скрипт называется: fxg_ai_create noalert=false alert=true time_move = 0 status = noalert dir = image_angle image_angle = 0 shoot = false rana = false time = 0 В событиии Step скрипты назвается: fxg_ai_step if status = noalert{ time_move += 1 image_speed = 0.3 if time_move = 20{image_angle = random(360)}
if time_move > 20{move_contact_solid(image_angle,argument0) sprite_index = argument1;image_angle += 1}
if time_move > 60{sprite_index = argument2;time_move = 0}}
if status = alert{mp_potential_step(argument3.x,argument3.y,argument0,false);shoot = true;image_angle = point_direction(x,y,argument3.x,argument3.y)}
if distance_to_object(argument3) < argument5{status = alert; time_move = 0;rana = true} if distance_to_object(argument3) > argument5 and rana = false{status = noalert;shoot = false;move_towards_point(0,0,0)} if distance_to_object(argument3) < 32{move_towards_point(0,0,0)} if status = alert sprite_index = argument1
if shoot = true{time += 1} if time = argument8{sound_play(argument7);instance_create(x,y,argument6);time = 0} if shoot = false{time = 0} //argument0 = speed //argument1 = sprite run //argument2 = sprite idle //argument3 = player object //argument4 = speed wanted //argument5 = radius look //argument6 = bullet enemy //argument7 = sound shoot //argument8=time shoot //fxg_ai_step(speed,sprite_run,sprite_idle,player_object,speed_wanded,raius,bullet_enemy,shoot_sound,time_shoot) И в событии попадание пули в врага скрипт называется:fxg_ai_contact_object rana = true status = alert Добавлено: Январь 26, 2011, 00:38:50 Эффекты частиц ядерного взрыва смотреть в разрешении комнаты 1280x1024: //Ядерный Взрыв by H2x ps =part_system_create() part_system_depth(ps,depth) //Radius Ring ring = part_type_create() part_type_shape(ring,pt_shape_ring) part_type_blend(ring,true) part_type_size(ring,2,25,1,0) part_type_color1(ring,c_white) part_type_alpha2(ring,1,0) part_type_life(ring,60,60)
//Radius Ring2 ring2 = part_type_create() part_type_shape(ring2,pt_shape_ring) part_type_blend(ring2,true) part_type_size(ring2,0.2,20,0,1) part_type_color2(ring2,c_orange,c_white) part_type_alpha2(ring2,1,0) part_type_life(ring2,120,120)
//Explosion expl = part_type_create() part_type_shape(expl,pt_shape_explosion) part_type_blend(expl,true) part_type_size(expl,0.2,2,1,0) part_type_color2(expl,c_orange,c_white) part_type_alpha2(expl,1,0) part_type_life(expl,120,120)
//Explosion 2 expl2 = part_type_create() part_type_shape(expl2,pt_shape_explosion) part_type_blend(expl2,true) part_type_size(expl2,0.2,8,0,1) part_type_color2(expl2,c_orange,c_white) part_type_alpha2(expl2,1,0) part_type_life(expl2,60,120)
//Explosion 3 expl3 = part_type_create() part_type_shape(expl3,pt_shape_explosion) part_type_blend(expl3,true) part_type_size(expl3,1,5,0,0) part_type_color1(expl3,c_silver) part_type_alpha2(expl3,1,0) part_type_speed(expl3,8,15,0,0) part_type_direction(expl3,0,360,0,0) part_type_life(expl3,120,120)
//Emittent Create em=part_emitter_create(ps) part_emitter_region(ps,em,x,x,y,y,ps_shape_ellipse,ps_distr_gaussian) part_emitter_burst(ps,em,ring,4) part_emitter_burst(ps,em,ring2,3) em2=part_emitter_create(ps) part_emitter_region(ps,em2,x,x,y,y,ps_shape_ellipse,ps_distr_linear) part_emitter_burst(ps,em2,expl2,10) part_emitter_burst(ps,em2,expl,2) part_emitter_burst(ps,em2,expl,8) part_emitter_burst(ps,em2,expl3,100)
|
|
|
Записан
|
|
|
|
Sashok_one
Активный участник
Репутация: 43
Offline
Пол: Награды:
API: Game Maker 8.0 Pro
Деятельность: Программист (GML, C#), художник, дизайнер.
Сообщений: 256
*BOOOM*
|
|
« Ответ #13 : Январь 29, 2011, 15:43:04 » |
|
Вот еше один из вариантов тени для объектов... (мой) _spr = argument0; // имя спрайта _smb = argument1; // индекс спрайта _x = argument2; // х координата _y = argument3; // у координата
draw_sprite_ext(_spr,_smb,_x+1,_y+1,1,1,0,c_black,0.5); draw_sprite_ext(_spr,_smb,_x+3,_y+1,1,1,0,c_black,0.3); draw_sprite_ext(_spr,_smb,_x+1,_y+3,1,1,0,c_black,0.3); draw_sprite_ext(_spr,_smb,_x-1,_y+1,1,1,0,c_black,0.3); draw_sprite_ext(_spr,_smb,_x+1,_y-1,1,1,0,c_black,0.3);
Добавлено: Январь 29, 2011, 16:08:48 Так жэ и с текстом! ;D _text = argument3 // текст _x = argument0 // х координата _y = argument1 // у координата
draw_text_color(_x+1,_y+1,_text,c_black,c_black,c_black,c_black,0.5) draw_text_color(_x+3,_y+1,_text,c_black,c_black,c_black,c_black,0.3) draw_text_color(_x+1,_y+3,_text,c_black,c_black,c_black,c_black,0.3) draw_text_color(_x-1,_y+1,_text,c_black,c_black,c_black,c_black,0.3) draw_text_color(_x+3,_y-1,_text,c_black,c_black,c_black,c_black,0.3)
|
|
|
Записан
|
|
|
|
Hummer
scio me nihil scire
GM Pro user
Репутация: 335
Offline
Пол: Награды:
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573
|
|
« Ответ #14 : Март 07, 2011, 14:59:38 » |
|
Может скрипт не полезный, но попробовать его советую. такая красота получается. effect_create_above(ef_cloud, random(room_width), random(room_height), irandom(2), choose(c_red, c_yellow, c_blue, c_orange, c_fuchsia)) ;) Только поставьте фон в комнате белый
|
|
|
Записан
|
Есть вещи, которые нельзя объяснить. Для всего остального есть Справка Рандом-рандом-рандомище (с) C++ & OpenGL
|
|
|
|