Game Maker - создание игр | HellRoom Games
Ноябрь 18, 2025, 10:02:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: 1 ... 12 13 [14] 15 16   Вниз
  Печать  
Автор Тема: Полезные скрипты  (Прочитано 380698 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Goo
ну типа
GM Pro user
*

Репутация: 163
Offline Offline

Пол: Мужской
Награды:
3 место в HellRoom Jam XВторое место на HellRoom Jam #9 [Антибиотик]
API: GameMaker Studio 2
Деятельность: программист
Сообщений: 1345



« Ответ #195 : Апрель 12, 2017, 18:47:39 »

мелкие скипты, возможно у многих уже есть такие, но если нет таких, то вот тут их оставлю,
банальные конвертеры температуры


Банальное сложение времени, авось кому пригодиться, в качестве аргументов вводятся как строки, так и числа

Код:

/// time_sum(hore1, min1, hore2, min2)
// *  return: array * //

var h0 = argument0;
var m0 = argument1;
var h1 = argument2;
var m1 = argument3;

h0 = real(min(h0, 24));
h1 = real(min(h1, 24));
m0 = real(min(m0, 60));
m1 = real(min(m1, 60));
var a = 0;
m0 = m0 + m1;
a = m0 div 60;
m0 -= a * 60;
h1 = h0 + h1 + a;
if (h1>24){h1 = h1-24} 
a[0] = h1;
a[1] = m0;
return a;

Записан

Anto96WS
Пользователь
***

Репутация: 6
Offline Offline

Пол: Мужской
API: GameMaker Studio Master
Деятельность: Разработчик ИИ
Сообщений: 59


Слаанешит и говнокодер


WWW
« Ответ #196 : Июнь 27, 2017, 23:40:19 »

Поиск значений списка, содержащих указанные через пробел слова.
(Если перед словом поставить минус, то значения, содержащие это слово, будут исключены из результата)

Возвращает список со значениями удовлетворяющими запросу.


Зависимости: get_part(), find_char() из этой темы.

Работоспособность: GM8, GM:S.

Код:
/// list_scan(id, query)

var i, j, l, p, v, a, f;
l =ds_list_create();
p =0;

while(true) if get_part(argument1, p +1, ' ') ='' break else p+=1;
if !p return l;

for(i =0; i <ds_list_size(argument0); i+=1){
 v =ds_list_find_value(argument0, i);
 a =1;
 for(j =1; j <=p; j+=1){
  f =get_part(argument1, p, ' ');
  if string_char_at(f, 1) ='-' a&=!(string_pos(string_delete(f, 1, 1), v)) else a&=(string_pos(f, v));
 }
 if a ds_list_add(l, v);
}

return l;

Добавлено: Июнь 28, 2017, 00:22:12
Возвращает false, если точка(x, y, z) вне сферы с центром(x0, y0, z0) и радиусом r.

Код:
/// inSphere(x, y, z, x0, y0, z0, r)

return ((sqr(argument0 -argument3) +sqr(argument1 -argument4) +sqr(argument2 -argument5)) <=sqr(argument6))
« Последнее редактирование: Июнь 28, 2017, 00:29:54 от Anto96WS » Записан

ABSOSAK
Новичок
*

Репутация: -1
Offline Offline

API: GameMaker Studio Pro
Сообщений: 10



« Ответ #197 : Июнь 29, 2017, 16:21:42 »

Скрипт изменения слоев при передвижении персонажа между обьектами 2.5D . Сортировка Z - порядок наложения.
Записан
Fur
Абы-какой
GM Pro user
*

Репутация: 463
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]Третье место на HellRoom Jam #9 [Flucoldache]За лояльность! [+300 репутации]Настоящий игродел!Боже мой, посмотрите на эту медальку! Первое место на HellRoom Jam #6
API: Game Maker 8.0 Lite
Деятельность: Бурная.
Сообщений: 3673


Лисяток тебе.


« Ответ #198 : Июнь 29, 2017, 19:58:28 »

Скрипт изменения слоев при передвижении персонажа между обьектами 2.5D . Сортировка Z - порядок наложения.
Что это за мусор и зачем он нужен, если есть намного более простой, быстрый и функциональный depth=-y?
Записан

В одной отдельно взятой фразе не должно быть больше миллиона муравьёв, пусть даже она — научного труда о муравьях.

Hyperflex
Neo
*LisenokArtist
GM Pro user
*

Репутация: 280
Offline Offline

Пол: Женский
Награды:
За медальки для форума!500 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+150 репутации]
API: GameMaker Studio Free
Сообщений: 971



« Ответ #199 : Ноябрь 26, 2017, 01:16:19 »

Исправил из рекомендации
Скрипт для замены символа в указанной позиции:
Код:
///string_replace_char_at(string, char, pos)
var s, c, p;
    s = argument0;
    c = string_copy(argument1, 1, 1); //Возьмет только первый символ.
    p = argument2;

    s = string_delete(s, p, 1);
    s = string_insert(c, s, p);

return s;

Скрипт для автоматической вставки символов "#" для переноса строки при указании максимальной допустимой длины в пикселях.
Код:
///string_linebreak(string, width);
var str, width;
    str   = argument0;
    width = argument1;

var ws, lb, sl;
    ws = 0;                  // Записывает позицию нового слова
    lb = 0;                  // Записывает сколько было переносов строк
    sl = string_length(str); // Записывает сколько букв в строке

for (var i = 0; i < sl; i ++){
    // Конвертирует указанную область строки в длину в пикселях
    var sw = string_width( string_copy(str, 0, i) );
    
    // Обновляем позицию нового слова, если найдено
    if string_char_at(str, i) == " " ws = i;
    
    // Процесс переноса строки
    if sw - lb mod width >= width{
        lb ++;
        str = string_delete(str, ws, 1);
        str = string_insert("#", str, ws);
        }}

return str;
« Последнее редактирование: Ноябрь 26, 2017, 16:53:09 от Neo » Записан

SilentPhil
Norland
GM Pro user
*

Репутация: 479
Offline Offline

Пол: Мужской
Награды:
Первое место на HellRoom Jam #7 [Hell in Your Fridge]500 сообщений!За постоянность! [50 дней на форуме]За лояльность! [+150 репутации]Настоящий игродел!Второе место на HellRoom Jam #6 [По следам Артакса]...
API: GameMaker Studio 2
Деятельность: GML, Pixel Art
Сообщений: 1363



WWW
« Ответ #200 : Ноябрь 26, 2017, 06:22:01 »

Цитировать
Скрипт для автоматической вставки символов "#" для переноса строки при указании максимальной допустимой длины в пикселях.

draw_text_ext?
Не могу придумать юзкейс хранения текста с переносами.
Записан

         
Да, на них можно кликать.
Neo
*LisenokArtist
GM Pro user
*

Репутация: 280
Offline Offline

Пол: Женский
Награды:
За медальки для форума!500 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+150 репутации]
API: GameMaker Studio Free
Сообщений: 971



« Ответ #201 : Ноябрь 26, 2017, 13:05:23 »

Цитировать
Скрипт для автоматической вставки символов "#" для переноса строки при указании максимальной допустимой длины в пикселях.

draw_text_ext?
Не могу придумать юзкейс хранения текста с переносами.
?
Знаю. Мне не понравилось как эта функция работает в паре с string_copy, когда мне нужно было создать анимацию, где текст выводится постепенно: при выводе части слова оно остается на первой строке, но при полном выводе уже переносится на новую.
Записан

Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #202 : Ноябрь 26, 2017, 13:12:48 »

А зачем string_replace_at? Есть же string_insert
Записан

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
Neo
*LisenokArtist
GM Pro user
*

Репутация: 280
Offline Offline

Пол: Женский
Награды:
За медальки для форума!500 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+150 репутации]
API: GameMaker Studio Free
Сообщений: 971



« Ответ #203 : Ноябрь 26, 2017, 14:30:05 »

А зачем string_replace_at? Есть же string_insert
string_replace_at я делал только для замены одного символа на другой. Название для скрипта не подходящее. Проблема возникает для string_linebreak: при вставке в позицию без удаления предыдущего символа длина строки увеличится, что не будет соответствовать размеру для цикла for, что может привести к потере конечной части строки (не будет обрабатываться?)
Да, можно переписать его на основе string_insert. Так даже, может, проще получится.
Записан

Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #204 : Ноябрь 26, 2017, 15:00:47 »

Да, можно переписать его на основе string_insert.
Я как раз про это.

Код:
str = string_delete(str, ws, 1);
str = string_insert("#", str, ws);
« Последнее редактирование: Ноябрь 26, 2017, 17:30:03 от Dmi7ry » Записан

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
Fur
Абы-какой
GM Pro user
*

Репутация: 463
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]Третье место на HellRoom Jam #9 [Flucoldache]За лояльность! [+300 репутации]Настоящий игродел!Боже мой, посмотрите на эту медальку! Первое место на HellRoom Jam #6
API: Game Maker 8.0 Lite
Деятельность: Бурная.
Сообщений: 3673


Лисяток тебе.


« Ответ #205 : Ноябрь 26, 2017, 15:12:24 »

Записан

В одной отдельно взятой фразе не должно быть больше миллиона муравьёв, пусть даже она — научного труда о муравьях.

Hyperflex
Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #206 : Ноябрь 26, 2017, 15:15:56 »

но внезапно вспомнил, что в гмл такого нет.
Ну, если ограничиться ASCII, то можно string_set_byte_at использовать.
Записан

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
DmitryDS
Потому что я такой-сякой
GM Pro user
*

Репутация: 159
Offline Offline

Награды:
За лояльность! [+150 репутации]1000 сообщений!За постоянность! [100 дней на форуме]
API: GameMaker Studio Master
Сообщений: 1061



WWW
« Ответ #207 : Декабрь 12, 2017, 18:38:56 »

Поскольку сам провозился дольше, чем следовало бы, делюсь скриптом на отражение (лучше как-то не формулируется). Вкратце: скрипт принимает направление отражающей линии и отражаемого направления и возвращает отраженное направление. Код с мини-документацией:

Код: (direction_reflect())
///direction_reflect(mirror, dir)
/*------------------------------/
Используются градусы

mirror - линия, от которой будет отражен dir
возвращает направление отраженной линии

!!!ВСЕ НАПРАВЛЕНИЯ ВЕДУТ _ОТ_ mirror, А НЕ К!!!
Чтобы получить направление к mirror, нужно добавить 180
/------------------------------*/

var mir = argument0,
    dir = argument1,
    cross = dsin(dir)*dcos(mir) - dsin(mir)*dcos(dir);

//С какой стороны mir находится dir; это нужно для корректного определения нормали
if sign(cross) == 1
{
    var n = mir + 90;
}
else
{
    var n = mir - 90;
}

var ref = 2*n - dir;
return ref;
Записан

Я никогда никого не пытаюсь оскорбить или обидеть, хотя порой веду себя вызывающе. Не обижайтесь, я не со зла
Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #208 : Декабрь 12, 2017, 19:24:17 »

Как уже говорил, угол отражения вычисляется одной строкой:
Код:
var reflection = mirror + angle_difference(mirror, dir);

Записан

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
DmitryDS
Потому что я такой-сякой
GM Pro user
*

Репутация: 159
Offline Offline

Награды:
За лояльность! [+150 репутации]1000 сообщений!За постоянность! [100 дней на форуме]
API: GameMaker Studio Master
Сообщений: 1061



WWW
« Ответ #209 : Декабрь 12, 2017, 19:29:36 »

Как уже говорил, угол отражения вычисляется одной строкой:
Код:
var reflection = mirror + angle_difference(mirror, dir);

Это не то, что мне нужно. Ваш код создает угол, симметричный заданному, а мой - отраженный. Ось выступает в качестве поверхности отражения, а не симметрии.
Записан

Я никогда никого не пытаюсь оскорбить или обидеть, хотя порой веду себя вызывающе. Не обижайтесь, я не со зла
Страниц: 1 ... 12 13 [14] 15 16   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.144 секунд. Запросов: 35.