danilaxxl danilaxxl

CollectableItemData.cs

[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]

GoloGames GoloGames

vadya_ivan, рад, что вам игра показалась интересной : )

P.S. Кстати уже доступна бесплатная демо-версия в Steam

vadya_ivan vadya_ivan

Визуал, задумка, музыка , механики, все в цель

GoloGames GoloGames

Ato_Ome, спасибо за позитивные эмоции, будем стараться : )

Ato_Ome Ato_Ome

Потрясающий результат, все так четенько, плавненько)
То ли саунд, то ли плавность напомнили мне игрушку World of Goo, удачи вам в разработке и сил побольше дойти до релиза!)

Cute Fox Cute Fox

Graphics are a little cool, good HD content. But this game doesn't cause nary interest me.
However the game is well done.

GMSD3D GMSD3D

Почему действие после всех условий выполняется?
[step another object]

Zemlaynin Zemlaynin

Jusper, Везде, но наугад строить смысла нет. Нужно разведать сперва территорию на наличие ресурсов.

Jusper Jusper

Zemlaynin, а карьеры можно будет везде запихать?
Или под них "особые" зоны будут?

Zemlaynin Zemlaynin

Это так скажем тестовое строительство, а так да у города будет зона влияния которую нужно будет расширять.

Jusper Jusper

А ссылка есть?

Jusper Jusper

Я не оч понял из скриншота, как вообще работает стройка. У игрока будет как бы поле строительства?

split97 split97

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

split97 split97

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

ViktorJaguar ViktorJaguar

Почему я нигде не могу найти нормальный туториал, где покажут как экипировать предмет (например, меч) в определенную (выделенную под оружие) ячейку???

Логотип проекта Game Maker

GameMaker: восемь советов для начинающих

GameMaker: восемь советов для начинающих

Только начали изучать GameMaker? Вот восемь советов для уверенности, что вы делаете всё правильно.

Пользуйтесь официальной документацией

Прежде чем гуглить или спрашивать кого-то о проблеме, обязательно проверьте документацию - она ​​может содержать информацию, которая может помочь решить проблему. Звучит банально, но это действительно работает!

Справка GMS 1
Справка GMS 2

Не используйте чужой код без его понимания

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

Разные значения переменных для разных экземпляров объектов

Скажем, вы хотите иметь двух врагов: одного с 4 HP и другого с 10. Казалось решение простое - создадим новый объект и изменим нужную переменную на нужное значение. Придержите коней.
Когда вы размещаете экземпляр объекта внутри комнаты, то можно щёлкнуть по нему правой кнопкой мыши (в GMS2 ​​дважды щелкните по объекту) , открыть окно Creation Code и ввести нужный код. Таким образом вы можете назначать разные HP различным экземплярам, ​​внутри их кода создания.

Здесь вы можете изменять масштаб, поворот, а также установить уникальный ID, чтобы получить доступ к этому конкретному экземпляру с помощью кода.

Используйте place_meeting()

Функция place_meeting() используется для проверки столкновения с другим объектом. Предпочтительней использовать именно эту функцию, чем событие столкновения (Collision Event), так как у вас будет больше контроля над коллизиями.

// проверяем, находится ли игрок на расстоянии 5 пикселей от стены с правой стороны
wall_on_right_side = false; 
if (place_meeting (x + 5, y, obj_solid)) { 
wall_on_right_side = true; 
}

Простой способ управления передвижением

Большинство начинающих используют условия If-Else для управления движением:

var hsp; 
if (keyboard_check (vk_right)) hsp = 1; 
else if (keyboard_check (vk_left)) hsp = -1; 
else hsp = 0;

Однако есть более простой способ:

var hsp = keyboard_check(vk_right) - keyboard_check(vk_left);

keyboard_check () возвращает true (равное в GM единице), если указанная клавиша нажата, и false ( равное нулю), если нет. Таким образом:

// если нажата стрелка вправо, то hsp становится 1
var hsp = 1 - 0;
// если стрелка влево, то hsp равен -1
var hsp = 0 - 1;
// и если ничего не нажимается, оно становится 0
var hsp = 0 - 0;

Используйте Draw GUI для интерфейса

Интерфейс часто рисуют через событие Draw - добавляя относительные координаты, чтобы он следовал за камерой/видом. Но есть более простое решение - событие Draw GUI .

Внутри этого события не нужно добавлять положения камеры - оно использует координаты игрового окна вместо координат комнаты. Так что, если рисовать что-то в позиции (0,0), оно всегда будет выводиться в левом верхнем углу игрового окна, без влияния положения камеры. Это можно представить как ещё один слой поверх основной игры.

Работа функций Create

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

surface = surface_create(args);
list = ds_list_create();
buff = buffer_create(args);

Давайте возьмем ds_list в качестве примера. Функция его создаст и сохранит в переменной, верно?
А что если создать ds_list в локальной переменной - он исчезнет в конце события, потому что переменная является локальной. Правильно?

var list = ds_list_create ();

На самом деле это не так. Всякий раз, когда вы создаете ds_list, он заносится в память. А переменная "list", является просто указателем, который позволяет вам получить доступ к фактическому списку в памяти.

Таким образом, даже если переменная является локальной, список таковым не является. Помните, что переменная является просто указателем.
Чтобы уничтожить список окончательно (удалить его из памяти), используйте:

ds_list_destroy (list)

Очищайте сурфейсы

Когда вы создаете сурфейс, он не всегда может создаться пустым.
Когда вы удаляете сурфейс, он освобождает память, но не очищает её. Таким образом, если вы создадите сурфейс, и он создастся в том же блоке памяти, где когда-то существовал ранее удалённый сурфейс, его содержимое перенесётся.

Чтобы этого избежать всегда очищайте сурфейсы:

//create
surf = surface_create(32, 32);

//clear
surface_set_target(surf);
draw_clear_alpha(0, 0);
surface_reset_target();

Статья является переводом. Ссылка на оригинал

Смотрите также:


Комментарии



Всегда было интересно, как реализованы в GMS механизмы управления и в т.ч. GUI для других платформ?
Например, как получать инпуты из свича или телефона? Как рисуется стик, если это телефон?

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

alexprey,

Но я не шарю, нам нужен гуру гейм мейкера. Надо как то его присумонить

Мы уже все обкашляли.
У юнити есть либы. А гамак это делает через костыли :)

Jusper, какие же, любопытство не ждет)

Справка