Game Maker - создание игр | HellRoom Games
Январь 13, 2025, 15:57:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1] 2 3 ... 16   Вниз
  Печать  
Автор Тема: Полезные скрипты  (Прочитано 323313 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
RevolverOcelot
Посетитель
**

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

Пол: Мужской
API: GameMaker Studio Free
Сообщений: 43


« : Ноябрь 22, 2010, 05:51:29 »

v   v   v   v   v
^  ^  ^  ^  ^


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

Вот пример (скрипт не мой, увидел в каком то РПГ движке, хорошая вещь) - рисует обведенный текст.

Код:
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 Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
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 Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
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
Гл. Администратор
*

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #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
Совсем не
«Старожил форума»
******

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

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+150 репутации]
API: Love
Сообщений: 3154


WWW
« Ответ #4 : Январь 01, 2011, 14:11:28 »

Скрипт des

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

Итак, создаём скрипт des:

И пишем:

Код:
with argument0
{
instance_destroy()
}

И, уже можно им пользоваться, теперь можно писать просто des(название_объекта).

Очень удобно! 
Записан
TUjh
Пользователь
***

Репутация: 10
Offline 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 Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
API: Game Maker 8.0 Pro
Деятельность: GML, С++, OpenGL, Java. Бывший Директор бывшей школы GML
Сообщений: 2573


« Ответ #6 : Январь 06, 2011, 18:43:30 »

Во время разработки ЭВМ я написал 18 скриптов, и сейчас представлю самые полезные
Код: (Скрипт NOT)
if(argument0=1)
{
return 0;//=false
}
else
{
return 1;//=true
}
Скрипт может понадобиться в изменениях булевых функций, например показывать-не показывать окно (инвентарь, консоль и т д)
Код: (Скрипт AND)
if(argument0=1)&&(argument1=1)
{
return 1;//=true
}
else
{
return 0;//=false
}
Нужен для соблюдения двух условий
Код: (Скрипт OR)
if(argument0=1)||(argument1=1)
{
return 1;
}
else
{
return 0;
}
Когда нужно соблюсти хотябы одно условие

Прикрепляю .gml этих и других логических функций

* Logic.rar (0.31 Кб - загружено 1180 раз.)
Записан

Есть вещи, которые нельзя объяснить. Для всего остального есть Справка
Рандом-рандом-рандомище (с)

C++ & OpenGL
Romixal
GM Pro user
*

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

Пол: Мужской
Награды:
500 сообщений!За постоянность! [100 дней на форуме]Знаток Game Maker
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 Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
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 Offline

Пол: Мужской
Награды:
Третье место на HellRoom Jam #7 [I Love You!]500 сообщений!За постоянность! [10 дней на форуме]За лояльность! [+150 репутации]Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]...
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 Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
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
GM Pro user
*

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

Награды:
За лояльность! [+500 репутации]3 место в Дичайшем джеме #82000 сообщений!За постоянность! [50 дней на форуме]Настоящий игродел!2 место на HellRoom Jam #5, Контраст...
API: GameMaker Studio 2
Сообщений: 2734


« Ответ #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 Offline

Пол: Мужской
Награды:
500 сообщений!За постоянность! [10 дней на форуме]За лояльность! [+150 репутации]Знаток Game Maker
API: GameMaker 8.1 Standard
Деятельность: Программист, Композитор.
Сообщений: 607


Date a Live ][


WWW
« Ответ #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 Offline

Пол: Мужской
Награды:
За постоянность! [50 дней на форуме]
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 Offline

Пол: Мужской
Награды:
2000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+300 репутации]Знаток Game Maker!За помощь новичкам!
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
Страниц: [1] 2 3 ... 16   Вверх
  Печать  
 
Перейти в:  

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