Суббота, 20 Апреля 2024, 04:26

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Записи участника » MrIncrof [364]
Результаты поиска
MrIncrofДата: Понедельник, 28 Ноября 2011, 20:57 | Сообщение # 141 | Тема: Мой дизайн Мини-чата Ucoz
Lite Programmer
Сейчас нет на сайте
1izumrud_no, хороший дизайн, а он изменяет цвет или только таким остаётся?
P.S. лучше бы исходный код кинул wink
P.P.S. это не спам, сайт пустой, работает только мини-чат
MrIncrofДата: Понедельник, 28 Ноября 2011, 20:50 | Сообщение # 142 | Тема: Ваша самая первая игра
Lite Programmer
Сейчас нет на сайте
Выкладываем сюда свои самые первые игры в которые вы поиграли. Моя самая-самая первая игры была "Война и мир" (да-да, о ней я спрашивал happy ), родители мне купили её на диске в 2001 году. Потом в демках я нашёл игру "Затерянный мир", купили диск, в магазине нашли ещё игру "Вторая корона", по скриншотам сзади стало понятно, что это продолжение "Войны и мира". А какая ваша первая игра?
P.S. отец каждый день по 5 часов сейчас рубится в эту игру, как бы кампании все не закончились biggrin
P.S.S. думаю что это больше подходит для форума "Обсуждения игр", если я не прав - перенесите темку куда нужно smile
MrIncrofДата: Понедельник, 28 Ноября 2011, 20:44 | Сообщение # 143 | Тема: Создание автообновления для игры
Lite Programmer
Сейчас нет на сайте
BrightSpot, хорошая идея, но этот урок я обновлять больше не буду, если ты не против, я напишу новый урок по твоему методу, но добавлю кое-что ещё biggrin
Если ты не против...

Добавлено (28.11.2011, 20:44)
---------------------------------------------
+ ещё можно шифрование сделать biggrin

MrIncrofДата: Понедельник, 28 Ноября 2011, 18:38 | Сообщение # 144 | Тема: [3D] - Cubez! - [First Person Puzzle]
Lite Programmer
Сейчас нет на сайте
1. Характеристики ПК:
--Процессор: AMD Athlon 64 X2 Dual Core 5000+ 2.60 GHz
--Видеокарта: NVIDIA GeForce 8600 GT
--Память: 2ГБ
2. Возраст и стаж в игрострое: с восьми лет, то есть 5 лет
3. Способ связи: Skype: grisha_super
MrIncrofДата: Понедельник, 28 Ноября 2011, 13:28 | Сообщение # 145 | Тема: Куплю домен
Lite Programmer
Сейчас нет на сайте
Rox, уе - условные единицы, то есть доллары, 861х30 = 26000 рублей
MrIncrofДата: Воскресенье, 27 Ноября 2011, 20:33 | Сообщение # 146 | Тема: Вопрос о лагах старых игр
Lite Programmer
Сейчас нет на сайте
Igroman, Спасибо большое! С меня плюс smile
MrIncrofДата: Воскресенье, 27 Ноября 2011, 18:24 | Сообщение # 147 | Тема: Вопрос о лагах старых игр
Lite Programmer
Сейчас нет на сайте
TimKruz, игра 1998 года выпуска. Совместимость не катит. sad
MrIncrofДата: Воскресенье, 27 Ноября 2011, 13:49 | Сообщение # 148 | Тема: Вопрос о лагах старых игр
Lite Programmer
Сейчас нет на сайте
Anthem, AMD Athlon™ 64 X2 Dual Core Processor 5000+ 2.60 GHz
Igroman, это не ДОС игра, вот здесь можешь посмотреть
MrIncrofДата: Воскресенье, 27 Ноября 2011, 00:03 | Сообщение # 149 | Тема: Вопрос о лагах старых игр
Lite Programmer
Сейчас нет на сайте
Quote (Jon®)
Ставь тогда Xp уж.

Неохота всё заново ставить.
А если поставить на виртуалку?
MrIncrofДата: Суббота, 26 Ноября 2011, 23:06 | Сообщение # 150 | Тема: Вопрос о лагах старых игр
Lite Programmer
Сейчас нет на сайте
Привет всем! Я решил понастольгировать и скачать мою игру детства (и самую первую игру) "Война и Мир". Скачал, всё работает, но при игре возникают оооочень большие лаги. Я не знаю почему это происходит, пожалуйста, помогите.
P.S. с графикой происходят непонятные действия....
Совмещение с XP не помогло, только немного уменьшило лаги
Кто поможет + поставлю обязательно
MrIncrofДата: Суббота, 19 Ноября 2011, 13:49 | Сообщение # 151 | Тема: Перемещение файлов в корзину через GM.
Lite Programmer
Сейчас нет на сайте
zac, нельзя, только если полное удаление
Code
file_delete(working_directory+"\???.exe");
MrIncrofДата: Четверг, 17 Ноября 2011, 20:44 | Сообщение # 152 | Тема: Эффект от героя
Lite Programmer
Сейчас нет на сайте
overbolt, пользуй стандартные эффекты
Code
effect_create_below(ef_explosion,x,y,0.01,c_blue);

Добавлено (17.11.2011, 20:44)
---------------------------------------------
Или

Code
effect_create_below(ef_flare,x,y,0.5,c_red)
MrIncrofДата: Четверг, 17 Ноября 2011, 19:16 | Сообщение # 153 | Тема: Вопрос - Ответ (Game Maker)
Lite Programmer
Сейчас нет на сайте
GAZ777, есть несколько видов:
Code
random(x);

Возвращает значение от 0 до значения х с плавающей запятой
Code
irandom(x);

Возвращает значение от 0 до значения х без плавающей запятой
Code
random_range(x1, x2);

Возвращает значение от x1 до значения х2 с плавающей запятой
Code
irandom_range(x1, x2);

Возвращает значение от x1 до значения х2 без плавающей запятой

Добавлено (17.11.2011, 19:16)
---------------------------------------------
Ах да, ещё есть

Code
choose(x1, x2, x3...x16);

Возвращает любое случайное значение из заданных аргументов. Всего аргументов может быть не более 16-ти
MrIncrofДата: Среда, 16 Ноября 2011, 16:11 | Сообщение # 154 | Тема: Разработка alinar.ru
Lite Programmer
Сейчас нет на сайте
Buran, согласен biggrin
Lastworlds, засунь картинку под споилер - большая она
AleksStar, одного раза вполне достаточно
MrIncrofДата: Среда, 16 Ноября 2011, 13:08 | Сообщение # 155 | Тема: Индивидуальный статус
Lite Programmer
Сейчас нет на сайте
ES-Games (Electronic Software games) - название нашей команды, в которой 3 человека
Цвет - зелёный
Спасибо заранее biggrin
MrIncrofДата: Вторник, 15 Ноября 2011, 20:34 | Сообщение # 156 | Тема: Создание функционального инвентаря
Lite Programmer
Сейчас нет на сайте
Quote (LunarPixel)
Возникает вопрос, а всё остальное было авторское?!

Да, это полностью моё, просто этот пример лежал в моей папке, я думал это мой, т.к. никакой инфы о авторе вообще нет, в общем, извините за стянутый пример sad
MrIncrofДата: Вторник, 15 Ноября 2011, 16:57 | Сообщение # 157 | Тема: Создание функционального инвентаря
Lite Programmer
Сейчас нет на сайте
Простите все, не знал автора статьи, спасибо всем кто отписался dry
P.S. добавил автора
MrIncrofДата: Понедельник, 14 Ноября 2011, 20:37 | Сообщение # 158 | Тема: [2D] MoveBlock [Logic]
Lite Programmer
Сейчас нет на сайте
Quote (Serj-X)
но вот над графикой стоит поработать=)

wink я далеко не художник, поэтому......
MrIncrofДата: Воскресенье, 13 Ноября 2011, 20:07 | Сообщение # 159 | Тема: Форумная игра без названия
Lite Programmer
Сейчас нет на сайте
Buran, фанат линукса
MrIncrofДата: Воскресенье, 13 Ноября 2011, 11:05 | Сообщение # 160 | Тема: Создание функционального инвентаря
Lite Programmer
Сейчас нет на сайте
Привет всем! Я решил написать ещё один урок, в котором я расскажу как можно сделать отличный инвентарь для своей игры. Урок получится очень громоздким, поэтому подробно описывать всё не буду, но вы можете почитать комментарии в коде. Итак, начнём. Для начала мы создадим все необходимые объекты, а именно: obj_inv_open (открытие и закрытие инвентаря), obj_inv (ячейки инвентаря), obj_smil_base (родитель всех объектов, доступных для подбирания) и obj_hero (наш игрок, который будет ходить и подбирать все доступные предметы). Начнём с самого простого - наш герой, как я уже говорил, подробно расписывать я не буду, читайте комменты. Create игрока:
Code
hp=100;//это здоровье игрока. Эта переменная здесь только для того, чтобы продемонстрировать как работает использование предметов из инвентаря.

Step игрока:
Code
if keyboard_check (ord('A')) && place_free (x-4,y)
x-= 4;
if keyboard_check (ord('D')) && place_free (x+1,y)
x+=4
if keyboard_check (ord('W')) && place_free (x,y-3)
y-= 4;
if keyboard_check (ord('S')) && place_free (x,y+3)
y+= 4;

Мы закончили работать над игроком, кода мало, но больше и не требуется. Продолжим с ячейки. Пожалуй, это самая сложная часть инвентаря, там очень много кода. Create:
Code
//Параметры инвентаря
inv_height_y=3;//количество ячеек в высоту
inv_width_x=4;//количество ячеек в ширину
slot_height_y=sprite_height;//Записываем высоту ячейки
slot_width_x=sprite_width;//записываем ширину ячейки

/*Растягиваем спрайт ячейки таким образом, чтобы он был по размеру как все ячейки вместе взятые
Ону будет служить маской столкновения для инвентаря. Это нужно для выполнения события
нажатия кнопок мыши на инвентаре. Каждая ячейка будет рисоваться отдельно в событии Draw*/
image_xscale=inv_width_x;
image_yscale=inv_height_y;

/*Сюда будем записывать названия предметов которые подбераем. Эти переменные также будут использоваться   
для вывода названий предметов при наведении курсора*/
for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//выбираем столбец инвентаря для проверки
      {
      for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//проверяем все ячейки в этом столбце, а потом опять выполнится сторка выше и мы перейдем к следующему столбцу инвентаря   
          {
          txt[slot_x,slot_y]='';
          }
      }

//Сюда будем записывать количество предметов в слоте
for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//выбираем столбец инвентаря для проверки
      {
      for (slot_y=0; slot_y<inv_width_x; slot_y+=1)//проверяем все ячейки в этом столбце, а потом опять выполнится сторка выше и мы перейдем к следующему столбцу инвентаря   
          {
          item[slot_x,slot_y]=0;
          }
      }

//Максимальное количество объектов в ячейке. По умолчанию 0 (0 - значит сколько угодно объектов)
for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//выбираем столбец инвентаря для проверки
      {
      for (slot_y=0; slot_y<inv_width_x; slot_y+=1)//проверяем все ячейки в этом столбце, а потом опять выполнится сторка выше и мы перейдем к следующему столбцу инвентаря   
          {
          max_number[slot_x,slot_y]=0;
          }
      }

//Сначала устанавливаем для всех ячеек прозрачный спрайт, потом он будет заменен на спрайт взятого предмета
for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//выбираем столбец инвентаря для проверки
      {
      for (slot_y=0; slot_y<inv_width_x; slot_y+=1)//проверяем все ячейки в этом столбце, а потом опять выполнится сторка выше и мы перейдем к следующему столбцу инвентаря   
          {
          spr[slot_x,slot_y]=spr_inv;//spr_no_spr;
          }
      }

//Сюда будем записывать имена объектов. Использоваться этот массив будет для создания объектво в комнате при выбрасывании
for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//выбираем столбец инвентаря для проверки
      {
      for (slot_y=0; slot_y<inv_width_x; slot_y+=1)//проверяем все ячейки в этом столбце, а потом опять выполнится сторка выше и мы перейдем к следующему столбцу инвентаря   
          {
          name_obj[slot_x,slot_y]='';//spr_no_spr;
          }
      }

//переменные для перетаскивания предметов в инвентаре и для выкидывания из инвентаря
inv_item_x=0;//сюда будем записывать из какой ячейки взяли предмет, чтобы мжно было его вернуть на место
inv_item_y=0;

inv_txt='';//сюда будем записывать название предмета, который взяли. еще по этой переменной будем определять взят ли сейчас какой-то предмет
//(если переменная равно '' - значит не взят, иначе - взят.

inv_item=0;//Сюда будем записывать количество предметов, которое взяли

inv_spr=spr_inv;//spr_no_spr;//сюда будем записывать спрайт предмета, который взяли

inv_name_obj=0;//Сюда будем записывать имя объекта, который перетаскиваем


Добавлено (13.11.2011, 11:05)
---------------------------------------------
Left Pressed:
Code
//Использование предмета.
/*вычисляем на какой ячейке находится курсор (тут вычисляются не координаты, а как бы элемент массива которому принадлежит
ячейка над которой курсор*/
if (visible)
      {
      klick_x=floor((mouse_x-x)/slot_width_x);
      klick_y=floor((mouse_y-y)/slot_height_y);

      if (txt[klick_x,klick_y]!='')//елси в слоте, над которым сейчас находится курсор, что-то есть
          {
          switch (name_obj[klick_x,klick_y])//Выбираем в зависимости от названия предметак какое действие выполнить
              {
              case obj_grin: obj_hero.hp+=10; break;//увеличиваем у игрока hp на 10
              case obj_wink: obj_hero.x=random(room_width); obj_hero.y=random(room_height); break;//перемещаем игрока в случайную точку в пределах комнаты
              case obj_shocked: obj_hero.hp-=10; break;//уменьшаем у игрока hp на 10
              case obj_sm15: obj_hero.hp+=10; break;//увеличиваем у игрока hp на 10
              }
          item[klick_x,klick_y]-=1;//Уменьшаем количество предметов в слоте на 1
          if (item[klick_x,klick_y]=0)//если предметов больше не осталось,   
              {
              txt[klick_x,klick_y]='';//очищаем переменные для этой ячейки (удаляем предмет из инвентаря)
              max_number[klick_x,klick_y]=0;
              }
          }
      }

Right Pressed:
Code
/*Выбрасывание предметов из инвентаря и перетаскивание предметов в инвентаре.
Выбрасывание предметов осуществляется по одному если удерживать клавишу Shift и кликать правой кнопкой мыши   
по предметам в инвентаре.
Перетаскивать предметы можно правой кнопкой мыши. Есил вынести предмет за пределы инвентаря и отпустить
правую кнопку мыши - все предметы из этого слота будут выброшены.
Предметы выбрасываются и появляются чуть ниже игрока. Это можно настроить. Можно сделать, например, чтобы
предметы выбрасывались туда, где была отпущена правая копка мыши.*/

if (visible)
      {
      /*вычисляем на какой ячейке находится курсор (тут вычисляются не координаты, а как бы элемент массива которому принадлежит
      ячейка над которой курсор*/
      klick_x=floor((mouse_x-x)/slot_width_x);
      klick_y=floor((mouse_y-y)/slot_height_y);

      if (keyboard_check(vk_shift))//Если зажата клавиша Shift
          {
          if (txt[klick_x,klick_y]!='')//елси в слоте, над которым находится курсор, что-то есть
              {
              instance_create(obj_hero.x,obj_hero.y+32,name_obj[klick_x,klick_y]);//создаем этот объект чуть ниже игрока
              item[klick_x,klick_y]-=1;//Уменьшаем количество предметов в слоте на 1
              if (item[klick_x,klick_y]=0)//Если предметов в слоте больше не осталось
                  {
                  txt[klick_x,klick_y]='';//очищаем переменные для этой ячейки (удаляем предмет из инвентаря)
                  max_number[klick_x,klick_y]=0;
                  }
              }
          }
      else
          {//если не нажата клавиша Shift
          if (txt[klick_x,klick_y]!='')//елси в слоте, над которым находится курсор, что-то есть
              {//записываем все данные из этого слота в переменные для перетаскивания
              inv_item_x=klick_x;
              inv_item_y=klick_y;
              inv_txt=txt[klick_x,klick_y];
              inv_item=item[klick_x,klick_y];
              inv_spr=spr[klick_x,klick_y];
              inv_max_number=max_number[klick_x,klick_y];
              inv_name_obj=name_obj[klick_x,klick_y];
                        
              txt[klick_x,klick_y]='empty';/*помечаем эту ячейку "пусто", но в нее пока что ничего положить нельзя будет.
                     Если переменная txt[] будет равна 'empty', то предмет в этой ячейке рисоваться не будет,
                     хотя фактически он будет там находиться.*/
              }
          }
      }


Добавлено (13.11.2011, 11:05)
---------------------------------------------
Global Right Released:
Code
if (inv_txt!='')//если при отпускании правой кнопки мыши мы перетаскивали предмет
      {
      if position_meeting(mouse_x,mouse_y,self)//если курсор над инвентарем
          {
          /*вычисляем на какой ячейке находится курсор (тут вычисляются не координаты, а как бы элемент массива которому принадлежит
          ячейка над которой курсор*/
          klick_x=floor((mouse_x-x)/slot_width_x);
          klick_y=floor((mouse_y-y)/slot_height_y);

          if (txt[klick_x,klick_y]='')//если ячейка над которой отпустили правую кнопку миыши пустая
              {
              txt[klick_x,klick_y]=inv_txt;//записываем в массив имя   
              spr[klick_x,klick_y]=inv_spr;//записываем в массив какой спрайт отображать в нивентаре
              item[klick_x,klick_y]=inv_item;//Записываем количество предметов, которые мы перетаскивали
              max_number[klick_x,klick_y]=inv_max_number;//Записываем максимальное количество предметов, которое может быть в одной ячейке
                
              name_obj[klick_x,klick_y]=inv_name_obj;//Записываем имя объекта
                
              inv_txt='';//показываем что больше ничего не перетаскиваем
                
              txt[inv_item_x,inv_item_y]='';//очищаем переменные для ячейки из которой перетаскивали (удаляем предмет из инвентаря)
              item[inv_item_x,inv_item_y]=0;
              max_number[inv_item_x,inv_item_y]=0;
              }
          else
              {//если ячейка над которой отпустили правую кнопку миыши НЕ пустая
              if (txt[klick_x,klick_y]=inv_txt)//если там такой же предмет, какой мы перетаскиваем
                  {
                  if (inv_max_number=0)//если перетаскиваемые предметы можно складывать в любом количестве в одну ячейку
                      {
                      item[klick_x,klick_y]+=inv_item;//Добавляем все перетаскиваемые предметы в эту ячейку
                        
                      inv_txt='';//показываем что больше ничего не перетаскиваем

                      txt[inv_item_x,inv_item_y]='';//очищаем переменные для ячейки из которой перетаскивали (удаляем предмет из инвентаря)
                      item[inv_item_x,inv_item_y]=0;
                      max_number[inv_item_x,inv_item_y]=0;
                      }
                  else
                      {
                      while (item[klick_x,klick_y]<inv_max_number && inv_item>0)/*добавляем предметы по одному в эту ячейку, пока она не зполнится
                     или пока не добавим все перетаскиваемые объекты*/
                          {
                          item[klick_x,klick_y]+=1;//увеличиваем количество объектов в слоте на один (добавлчем в слот один предмет)
                          inv_item-=1;//Уменьшаем количество перетаскиваемых объектов на один
                          }
                      if (inv_item!=0)/*если остались еще предметы которые мы перетаскиваем (это может произойти если заполнилась ячейка в которую мы
                     перетаскивали предметы)*/
                          {//Возвращаем оставшиеся предмет в ту ячейку, откуда взяли
                          txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя   
                          item[inv_item_x,inv_item_y]=inv_item;//записываем оставшееся количество предметов

                          inv_txt='';//показываем что больше ничего не перетаскиваем
                          }
                      else
                          {//если после перетаскивания предметов больше не осталось
                          inv_txt='';//показываем что больше ничего не перетаскиваем

                          txt[inv_item_x,inv_item_y]='';//очищаем переменные для ячейки из которой перетаскивали (удаляем предмет из инвентаря)
                          item[inv_item_x,inv_item_y]=0;
                          max_number[inv_item_x,inv_item_y]=0;
                        
                          }
                      }
                  }
              else//если отпустили правую кнопку мышки над предметом. отличающимся от перетаскивания
                  {//Возвращаем предмет в ту ячейку, откуда взяли
                  txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя   

                  inv_txt='';//показываем что больше ничего не перетаскиваем
                  }
              }
          }
      else //если курсор не над инвентарем
          {
          repeat(inv_item)//выбрасываем предметы (выбрасываем столько предметов, сколько находилось в ячейке)
              {
              instance_create(obj_hero.x-16,obj_hero.y+16,inv_name_obj);
              }
          inv_txt='';//показываем что больше ничего не перетаскиваем

          txt[inv_item_x,inv_item_y]='';//очищаем переменные для ячейки из которой перетаскивали (удаляем предмет из инвентаря)
          item[inv_item_x,inv_item_y]=0;
          max_number[inv_item_x,inv_item_y]=0;
          }
      }

Draw:
Code
x=view_xview+32;
y=view_yview+32;

//draw_sprite(sprite_index,image_index,x,y);
draw_set_font(font0);//выбираем шрифт для отображения текста инвентаря.
draw_sprite(spr_inv_back,-1,x,y);//Рисуем фон инвентаря. Это не обязательно если нужно чтобы были просто ячейки. Фон нужно подгонять под колчество ячеек.
draw_text(view_xview+32,view_yview+4,string('hp: ')+string(obj_hero.hp));//Рисуем здоровье игрока. Это только для демонстрации использования предметов, к инвентарю отношения не имеет.

      for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//выбираем столбец инвентаря для проверки
          {
          for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//проверяем все ячейки в этом столбце, а потом опять выполнится сторка выше и мы перейдем к следующему столбцу инвентаря   
              {
              draw_sprite(sprite_index,image_index,x+slot_x*slot_width_x,y+slot_y*slot_height_y);//рисуем ячейки инвентаря
              if (txt[slot_x,slot_y]!='' && txt[slot_x,slot_y]!='empty')//если слот не пустой
                  {
                  draw_sprite(spr[slot_x,slot_y],image_index,x+slot_x*slot_width_x,y+slot_y*slot_height_y);//рисуем спрайт предмета, находящегося в этой ячейке инвентаря (в своих координатах)
                  draw_text(x+slot_x*slot_width_x,y+slot_y*slot_height_y,item[slot_x,slot_y]);//пишем количество предметов в слоте
                  }
              }
          }

if position_meeting(mouse_x,mouse_y,self)//если курсор наведен на инвентарь
      {
      /*вычисляем на какой ячейке находится курсор (тут вычисляются не координаты, а как бы элемент массива которому принадлежит
      ячейка над которой курсор*/
      klick_x=floor((mouse_x-x)/slot_width_x);
      klick_y=floor((mouse_y-y)/slot_height_y);

      if (txt[klick_x,klick_y]!='' && txt[klick_x,klick_y]!='empty')//если слот, на который наведен курсор, не пустой
          {
          draw_sprite_ext(spr_txt_back,-1,x+klick_x*slot_width_x,y+(klick_y+1)*slot_height_y,string_width(txt[klick_x,klick_y]),1,0,c_white,0.8);//Рисуем фон для текста по размеру текста
          draw_text(x+klick_x*slot_width_x,y+(klick_y+1)*slot_height_y,txt[klick_x,klick_y]);//рисуем текст - название предмета (записывается в событии создания предмета)
          }
      }

if (inv_txt!='')//Если мы сейчас перетаскиваем предмет
      {
      draw_sprite(inv_spr,image_index,mouse_x,mouse_y);//рисвем спрайт предмета там, где находится курсор.
      }


Добавлено (13.11.2011, 11:05)
---------------------------------------------
Нам требуется нарисовать два спрайта: spr_txt_back (фон надписей, растягивается автоматически) и spr_inv_back (текстура фона инвентаря) и, естественно, спрайты для остальных объектов. Далее создаём родитель всех дочерних объектов, это obj_smil_base. Столкновение с игроком:
Code
//Это код перемещения предмета в инвентарь.

with (obj_inv)//выполняем код для объекта obj_inv
      {
      for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//выбираем строку инвентаря для проверки
          {
          for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//проверяем все ячейки в этой строке, а потом опять выполнится сторка выше и мы перейдем к следующепй строке инвентаря   
              {
              if (txt[slot_x,slot_y]=other.name)//когда находим ячейку с таким же предметом
                  {
                  with (other)
                      {
                      if variable_local_exists('max_number')//если у этого объекта есть переменная max_number (ограничение на количество предметов в одной ячейке)
                          {
                          if (other.item[other.slot_x,other.slot_y]<max_number)//проверяем сколько предметов в этой ячейке. если меньше чем max_number:
                    {
                    other.txt[other.slot_x,other.slot_y]=name;//записываем в массив имя   
                    other.spr[other.slot_x,other.slot_y]=sprite_index;//записываем в массив какой спрайт отображать в нивентаре
                    other.item[other.slot_x,other.slot_y]+=1;//увеличиваем кол-во предментов на 1
                    other.max_number[other.slot_x,other.slot_y]=max_number;//записываем максимальное количество предметов в слоте
                    instance_destroy();//удаляем предмет из комнаты
                    exit;//после того как нашли пустую ячейку и записали все нужные параметры прекращаем выполнение кода. остальные ячейки просматривать не имеет смысла
                    }
                          }
                      else
                          {//если у этого объекта нет переменной max_number то все предметы "складываем" в одну ячейку
                          other.txt[other.slot_x,other.slot_y]=name;//записываем в массив имя   
                          other.spr[other.slot_x,other.slot_y]=sprite_index;//записываем в массив какой спрайт отображать в нивентаре
                          other.item[other.slot_x,other.slot_y]+=1;//увеличиваем кол-во предментов на 1 (это для отображния в инвентаре. пока что не работает
                          other.max_number[other.slot_x,other.slot_y]=0;//записываем максимальное количество предметов в слоте (т.к. это для безлимитных предметов - ставим 0
                          instance_destroy();//удаляем предмет из комнаты
                          exit;//после того как нашли пустую ячейку и записали все нужные параметры прекращаем выполнение кода. остальные ячейки просматривать не имеет смысла
                          }
                      }
                  }
              }
          }
      }

//Если ни в одной ячейке мы не нашли такой же предмет
with (obj_inv)//выполняем код для объекта obj_inv
      {
      for (slot_y=0; slot_y<inv_height_y; slot_y+=1)//выбираем строку инвентаря для проверки
          {
          for (slot_x=0; slot_x<inv_width_x; slot_x+=1)//проверяем все ячейки в этой строке, а потом опять выполнится сторка выше и мы перейдем к следующепй строке инвентаря   
              {
              if (txt[slot_x,slot_y]='')//когда находим свободную ячейку
                  {
                  txt[slot_x,slot_y]=other.name;//записываем в массив имя   
                  spr[slot_x,slot_y]=other.sprite_index;//записываем в массив какой спрайт отображать в нивентаре
                  item[slot_x,slot_y]+=1;//увеличиваем кол-во предментов на 1
                  name_obj[slot_x,slot_y]=other.object_index;//записываем имя объекта
                  with (other)
                      {
                      if variable_local_exists('max_number')//если у этого объекта есть переменная max_number (ограничение на количество предметов в одной ячейке)
                          {
                          other.max_number[other.slot_x,other.slot_y]=max_number;//записываем максимальное количество предметов в слоте   
                          }
                      instance_destroy();//удаляем предмет из комнаты
                      }
                  exit;//после того как нашли пустую ячейку и записали все нужные параметры прекращаем выполнение кода. остальные ячейки просматривать не имеет смысла
                  }
              }
          }
      }

теперь настала очередь inv_open. Left Released:
Code
with (obj_inv)
      {
      visible=!visible;
      if (inv_txt!='')//Если мы перетаскивали предмет то вернем его на место
                      //(перетаскивание возможно когда "открыт инвентарь", значит сейчас произошло событие "закрытие инвентаря")
          {
          txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя   
          inv_txt='';//показываем что больше ничего не перетаскиваем
          }
      }

Draw:
Code
x=view_xview+6; // x объекта
y=view_yview+22; // y объекта
draw_sprite(sprite_index,1,x,y); // рисуем спрайт на данных координатах

I pressed:
Code
with (obj_inv)
      {
      visible=!visible;
      if (inv_txt!='')//Если мы перетаскивали предмет то вернем его на место
                      //(перетаскивание возможно когда "открыт инвентарь", значит сейчас произошло событие "закрытие инвентаря")
          {
          txt[inv_item_x,inv_item_y]=inv_txt;//записываем в массив имя   
          inv_txt='';//показываем что больше ничего не перетаскиваем
          }
      }

Вот и всё, чтобы сделать новый объект, создайте его, поставьте в родителя obj_smil_base и в create пишите:
Code
name='Тест';//В эту переменную записываем название объекта, которое будет отображаться при наведении курсора.
//Еще эта переменная будет служить для определения "занята" ячейка инвентаря или "не занята" и если "не занята", то будет обозначать
//какой именно предмет находится в ячейке

max_number=3;//'Эта переменная показывает какое количество этих объектов можно поместить в одну ячейку инвентаря.
//Если эту переменную не указать, значить в одну ячейку можно положить сколько угодно таких объектов.

Автор материала: Dva_Kota;


Сообщение отредактировал 4aBo - Вторник, 15 Ноября 2011, 16:57
Форум игроделов » Записи участника » MrIncrof [364]
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг