Gamemaker studio 2.3: new ide features

GPU functions

  • gpu_set_blendenable(enable) — enable or disable the gpu blending
  • gpu_set_ztestenable(enable) — enable or disable the gpu ztest
  • gpu_set_zfunc(cmp_func) — set the gpu z compare function (one of cmpfunc_never, cmpfunc_less, cmpfunc_equal, cmpfunc_lessequal, cmpfunc_greater, cmpfunc_notequal, cmpfunc_greaterequal, cmpfunc_always, default is cmpfunc_lessequal)
  • gpu_set_zwriteenable(enable) — enable or disable the gpu z write enable
  • gpu_set_fog(enable,col,start,end) — enable or disable the fog used in the default shader setting the colour and the start and end depths
  • gpu_set_cullmode(cullmode) — set the gpu cull mode (one of cull_noculling, cull_clockwise, cull_counterclockwise)
  • gpu_set_blendmode(mode) — set the gpu blend mode (one of bm_normal, bm_add, bm_max, bm_subtract)
  • gpu_set_blendmode_ext(src,dest) — set the gpu blend mode where source or dest could be (one of bm_zero, bm_one, bm_src_colour, bm_inv_src_colour, bm_src_alpha, bm_inv_src_alpha, bm_dest_alpha, bm_inv_dest_alpha, bm_dest_colour, bm_inv_dest_colour, bm_src_alpha_sat)
  • gpu_set_blendmode_ext_sepalpha(src,dest,srcalpha,destalpha) — set the gpu blend mode where the source and destination blendmodes are set separately and the src alpha and dest alpha blend modes can be different (each param is one of bm_zero, bm_one, bm_src_colour, bm_inv_src_colour, bm_src_alpha, bm_inv_src_alpha, bm_dest_alpha, bm_inv_dest_alpha, bm_dest_colour, bm_inv_dest_colour, bm_src_alpha_sat)
  • gpu_set_alphatestenable(enable) — enable or disable the gpu alpha test
  • gpu_set_alphatestref(value) — set the gpu alpha test reference value (default value is 0)
  • gpu_set_texfilter(linear) — set the gpu filter type for default sampler (0)
  • gpu_set_texfilter_ext(sampler_id,linear) — set the gpu filter type for specified sampler
  • gpu_set_texrepeat(repeat) — enable or disable the gpu texture repeat for the default sampler (NOTE: sets both u and v repeats)
  • gpu_set_texrepeat_ext(sampler_id,repeat)- enable or disable the gpu texture repeat for the specified sampler (NOTE: sets both u and v repeats)
  • gpu_set_colourwriteenable(red,green,blue,alpha) — enable or disable the gpu writing to destination channels individually
  • gpu_set_colorwriteenable(red,green,blue,alpha) — enable or disable the gpu writing to destination channels individually
  • gpu_get_blendenable() — get the current state of gpu blending
  • gpu_get_ztestenable() — get the current state of gpu z test
  • gpu_get_zfunc() — get the current value for gpu z function
  • gpu_get_zwriteenable() — get the current state of gpu z writing
  • gpu_get_fog() — get the current state of gpu fog (returns an array with entries — enable/disable, -colour, — start value, — end value)
  • gpu_get_cullmode() — get the current value for the gpu cullmode
  • gpu_get_blendmode() — get the current gpu blendmode value
  • gpu_get_blendmode_ext() — get the current gpu blendmode (array with — src blend, — dest blend)
  • gpu_get_blendmode_ext_sepalpha() — get the current gpu blendmode (array with — src blend, — dest blend, — src alpha blend, — dest alpha blend)
  • gpu_get_blendmode_src() — get the current gpu source blend value
  • gpu_get_blendmode_dest() — get the current gpu destination blend value
  • gpu_get_blendmode_srcalpha() — get the current gpu source alpha blend value
  • gpu_get_blendmode_destalpha() — get the current gpu destination alpha blend value
  • gpu_get_alphatestenable() — get the current status of gpu alpha enable/disable
  • gpu_get_alphatestref() — get the current gpu alpha test reference value
  • gpu_get_texfilter() — get the current gpu texture filter status for default sampler (0)
  • gpu_get_texfilter_ext(sampler_id) — get the current gpu texture filter status for specified sampler
  • gpu_get_texrepeat() — get the current status gpu texture repeat for default sampler
  • gpu_get_texrepeat_ext(sampler_id) — get the current status gpu texture repeat for specified sampler
  • gpu_get_colorwriteenable() — get the current state of the gpu color write enable (array with — red, — green, — blue, — alpha)
  • gpu_get_colourwriteenable() — get the current state of the gpu colour write enable (array with — red, — green, — blue, — alpha)
  • gpu_push_state() — push the current gpu state onto an internal gpu state stack
  • gpu_pop_state() — pop the entry from the top of the gpu state stace and make it current
  • gpu_get_state() — get the current gpu state as a map (returns a map id)
  • gpu_set_state(map) — set the current gpu state to the state stored in given map

Arrays

The first change to the GameMaker language that we want to discuss is a change to how arrays work. Previously, GML only permitted 1D or 2D arrays, eg:

However, this is no longer the case and now all arrays are 1D. So how do we create a 2D array now? Well this is done by chaining arrays together to essentially create arrays within arrays. Here is a small example:

The above is now a multi-dimension array with 2 dimensions to it, but you are no longer limited to just 2 dimensions and can create arrays of 3 or 4 or more dimensions as required, eg:

This change means that all platforms will now work the same (including HTML5) and enables much larger arrays, both in number of items as well as number of dimensions. The change also means that the following functions have been deprecated:

And the following new functions have been added:

Note that the old functionality (and the deprecated functions mentioned above) will still work but under no circumstances should new projects use the old syntax, as these will eventually be removed from the language.

Учебные ресурсы

Уроки инди-разработчиков

Список уроков Chevy Ray — Chevy Ray является разработчиком Flash-игрового движка FlashPunk, частый соперник на Ludum Dare и разработчик нескольких классных игр. Он написал несколько уроков по GameMaker, и это подборка тех его материалов, которые он считает лучшими. Уроки охватывают такие темы, как масштабирование вида, оптимизация скорости, параллакс-скроллинг.

Серия уроков Derek Yu’s  — Derek Yu является членом TIGSource и разработчиком Spelunky. Эта серия уроков для более старой версии GameMaker, но вы по-прежнему можете легко пройти ее. Это полное пошаговое руководство по созданию космической сайд-скроллер стрелялки; по мере создания вы узнаете, как работают игровые объекты, как создавать прокручивающиеся фоны, как создавать спрайт шрифты и множество других замечательных тем. Обязательно к прочтению.

Другие уроки и руководства

Официальные уроки — официальные уроки посвящены созданию нескольких игр разных стилей (некоторые из них 3D-игры, поэтому эти уроки могут быть особенно глубокими, если вы будете использовать GM:S). Кроме того, имеется урок по созданию многопользовательских игр, который, по моему мнению, является одним из лучших в Интернете по изучению создания многопользовательской игры в GM:S.

Я рекомендую их для людей, которые хотят разработать определенный тип игры и желают узнать как разрабатывать игры подобного типа, но если вы ищете урок для начинающих, я рекомендую уроки Derek Yu’s.

Также ознакомьтесь с официальными и неофициальными руководствами, поскольку они дают большой справочный материал.

Для начинающих

Game maker studio подойдет для амбициозных людей с интересными идеями по созданию прототипа игры. Сейчас большая проблема хорошей идеи для создания игры является в её реализации, так как для этого необходимо знания языков программирования. Этот движок даёт возможность создания игры без прибегания к программированию, написанию скриптов.

Очень хорошо подойдет для первого тестового создания механики задуманной игры, так как главное для начала понять интересен ли будет сам gameplay, и только после тестирования можно будет приступать к подробному созданию и улучшению графической части игры. Вот для таких целей и подойдет Game maker studio, она даёт возможность быстро и легко реализовать такого рода задачу.

Drag and Drop (DnD ) это графическая среда разработки, которая идеально подходит для начинающих или тех, кто более визуально или художественно ориентированы. С помощью DnD возможно создать игры без написания скриптов, используя только интерфейс программы.

Так же для начинающих в работе Game maker studio поможет русифицированный интерфейс, который можно найти на форумах этого движка. На официальном так же присутствует большое количество документации и инструкций по работе с движком.

Установка русификатора

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

После того как скачали файл русского языка, копируем его и вставляем в директорию с Платформой в папку «Languages» которая лежит по следующему пути C:\Program Files\GameMaker Studio 2\Languages
Открываем вставленный файл в блокноте, для этого нажимаем на него правой кнопкой и выбираем пункт «Изменить».

Откроется блокнот с конфигурацией этого файла. Нам необходимо 7-й строкой вставить следующую конфигурацию.

_LanguageCode,ru,ru,,standard windows os language code this pack represents (can be primary code only ie. en or primary-secondary ie. ru-RU)

Сохраняем файл и делаем бэкап стандартного файла «english», для этого просто скопируйте его в другую папку. Это необходимо для того, если что-то пойдет не так, просто скопировать его обратно и вернуть исходный язык движка. После сохранения русскоязычного файла удаляем старый англоязычный (предварительно сохраненный в другую папку) и запускаем Game maker studio.

Summary

Well, we’ve come to the end of this rather long blog post, and as you can see we’ve been working hard to improve the GameMaker Language and bring it up to par with other more common programming languages, We hope that these new features are of use to you, and that they help your workflow and enable you to make bigger and better games! Note that all the features discussed here are available from GameMaker Studio 2.3 onwards, and we recommend that you read the manual fully before using any of them, as there are details and nuances related to their use that we just haven’t got the space to talk about here. Also note that the 2.3 update includes a number of changes and improvements to the GameMaker Studio IDE which we’ll discuss a separate blog post.

Happy GameMaking!

Functions, Scripts and Method Variables

Above we outline some changes to the GameMaker Language, but now it’s time to talk about the good stuff… what’s been added! To start with we want to talk about in-line functions and scripts. Previously, a script was a single resource that was created on a global scope and used to create a single custom function which would then be called using the script name as the function name. This is no longer the case and scripts, while still global in scope, are now a type of «container» for one or more functions.

What this means is that when you compile your project, scripts are no longer called individually, but are actually all run at the start of the game in the global scope, so all variables that are defined in the script (outside of function definitions) will be considered global. That said, you should still use the identifier to explicitly define and identify global variables in your code.

The reason for this change is that scripts can now contain multiple functions. If you’ve only used GML to code projects then the idea of functions may be something new to you, but think of them as being the same as scripts, only explicitly assigned to a variable. This variable is called a method and is used to call the code that is in the function, the same as you would have previously called the script name. This is easier to visualise with an example, so let’s look at one. Consider this simple script :

Now, however, this would be defined as a function like this:

or like this:

You would call this function just as you would have called the script:

So, as we mentioned above, scripts can now contain multiple functions and these should be defined with the format shown above where you have the JS doc comment to identify the function, then the function definition below, and then the next JS Doc comment, and then the function, etc…

Above, we briefly mentioned that functions as variables were called method variables, but it should be explained in a bit more detail. Basically, when you create a function with a variable like this, you are creating a method variable, and they can have different scopes. Consider this function:

  • In the case of a script a variable called «foo» is declared at global scope

  • If the function is declared in an event then the variable «foo» is on the instance that ran that event

  • If the function is declared in an event using the keyword then the variable «foo» is local to the event only

  • If «foo» is declared inside a then it is declared on the that is active at that time

This means that if you have some code that you need to use only within a loop in an alarm event (for example), then you can define it as a local scope method variable at the start of the event and then use it within the loop without the need to clutter up the script assets with it.

It is worth noting that while the variable will be in the chosen scope, the actual function will be bound to the scope that it was initially defined in. Going back to script functions, these are all global scope and are considered «unbound» (ie: they are not associated with any instances), but if you have a script function that creates another function within it and then you call this script from an instance, the function used within the script will be bound to the instance. In general this is not something you ever need to think about but for more complex operations with method variables it’s worth taking into consideration. This also applies when using other constructs like — when you create a method variable inside a , the function will be bound to the instance that is currently in scope.

The following new functions have also been added to deal with methods:

Check the manual for details fo how these functions should be used.

Что в нем хорошего

GM:S очень хорош в управлении ресурсами, включением ресурсов в код, обеспечивает легкий способ изменения логики игровых объектов и событийное программирование.

Управление ресурсами

Как только разработчик создал спрайт, добавить его в GM:S можно за несколько кликов. После импорта спрайта, модификации могут быть сделаны уже в GM:S.

Создание спрайта.

Изменение спрайта.

Интеграция ресурсов в код

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

Изменение логики игровых объектов и событийное программирование.

Редактор игровых объектов — это отличное средство обучения, для новичков в разработке игр, и предоставляет удобный способ изменения логики игрового объекта. Как вы можете видеть на этом скриншоте, GM:S позволяет вам писать код для конкретных событий:

Модификация событий игрового объекта.

Animation Curves

The next new feature we want to discuss here is a new top-level resource called Animation Curves. An animation curve is an asset that contains one or more curves that represent how a value changes over time, and can use linear interpolation or smooth interpolation to go between different points in the curve. The values you set can be between -1 and 1 (by default) on the vertical axis and the duration along the horizontal axis is always normalised form 0 to 1, making it easy to target different time ranges using multipliers in your game code.

Animation curves are comprised of «channels» and each channel can have its own curve settings, which permits you to — for example — describe a spacial position with two channels for the x/y position, or a colour gradient with 4 channels to represent a colour format. Animation curve assets can be used when working with sequences and can also be accessed using code, making them a powerful tool when creating your games.

Structs

The next new feature that we want to discuss in GameMaker Studio 2.3 is the creation of structs. A struct is — to put it simply — a variable that holds a collection of other variables — you can think of it as a kind of «light-weight object». The variables that a struct holds can be of any data type and these variables can be read from and written to after the initial struct declaration, and you can also add more variables to a struct after it has been declared. It should also be noted that the contents of a struct are independent of the instance or script that created it, and as such you can — if you wish — use the built-in variable names like or and . One of the benefits of using structs is that (unlike instances), after the initial creation, structs have no processing overhead while they exist, although they will take up space in memory. The struct syntax is as follows:

So, an example of this in practice would be:

The above creates an instance scope struct in the variable «mystruct» and populates it with some values (structs can be created at local, instance and global scope, just like any other variable). Note that you don’t have to populate the contents of a struct when it is created initially and you can create an empty struct by simply doing this:

This struct can then be added to at a later point in the game code. Here is an example of a struct with various variables and data types:

You’ll notice in the above code that you can also define methods and use runtime functions in structs, and that you can use expressions consisting of any variable previously defined within the context of the struct itself, as well as any variable defined within the scope of the struct itself.

Once a struct has been defined, you can access the data within using the «point» notation, like this:

You can also perform operations on the variables within a structure or use them in functions, just as you would any other variable. For example:

Finally, structs can have other structs nested inside of them, like this:

To access such nested structs you would still use the point notation, like this:

When a struct is no longer required it can be removed from memory using the operator, which is another new GML feature added in the 2.3 update. This de-references the struct and hints to the garbage collector that it may be available for collection. This is not strictly required as the garbage collector may do this automatically in the following game steps if the struct is no longer referenced in your code, but it is good practice to do so and we recommend it (for example, call delete in the Clean Up event of an instance to explicitly tell the garbage collector that an instance scope struct is to be deleted).

Also note that structs can be created using functions, which requires the use of the operator and the keyword (two more new features to GML), as shown in the following example:

Here we are creating the function and telling GameMaker Studio 2 that this is a function for making a struct by adding the keyword after the definition. You can then call this function like this:

Now the variable v1 will reference a struct with the variables x and y and the static method variable .

Note that there are other additional functions for structs, specifically:

Check the manual for details of how these functions should be used.

Возможности

Изначально автор приложения – Марк Овермарс – хотел создать обучающую программу, которая объясняла бы студентам принципы программирования. Однако постепенно разработка превратилась в игровой редактор. Он развивается уже более 15 лет, обрастая функционалом, что позволяет:

  • придумывать 2D-игры;
  • создавать презентации;
  • рисовать анимацию;
  • использовать программу в учебных целях.

Интерфейс приложения интуитивно понятен, окно содержит привычные для обычных пользователей строки меню и панели кнопок. В меню находится раздел справки, где можно увидеть обучающий ролик, объясняющий всю суть программы.

General Functions

  • array_equals(var1,var2) — returns true if var1 and var2 are arrays and they are either the same array or an equivalent array
  • array_create( size, , … ) — create an array of the given size (can be 0), if val argument is passed in then every entry will be set to that value (NOTE: This makes the function slower); if not given then all entries are set to 0.
  • array_copy(dest,dest_index,src,src_index,length) — copy length entries from source to destination array from the source index to destination index
  • variable_global_exists(name) — returns true if global variable exists
  • variable_global_get(name) — returns the value of a global variable, returns undefined if not present
  • variable_global_set(name,val) — sets the value of a global variable
  • variable_instance_exists(id, name) — returns true if instance variable exists
  • variable_instance_get(id,name) — returns the value of a instance variable, returns undefined if not present
  • variable_instance_set(id,name,val) — sets the value of a instance variable
  • string_hash_to_newline(str) — replaces occurences of «#» in a string with «\n»
  • game_set_speed(value,type) — set the game speed to value as either gamespeed_fps or gamespeed_microseconds
  • game_get_speed(type) — get the current game speed in terms of gamespeed_fps or gamespeed_microseconds
  • load_csv(filename) — load a CSV file from filename

Maths

  • matrix_build_identity() — return an identity matrix
  • matrix_build_lookat(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup) — builds a «look-at» (view) matrix for a camera at position (xfrom, yfrom, zfrom) and looking at a point (xto, yto, zto) with an up vector of (xup, yup, zup)
  • matrix_build_projection_ortho(width,height,znear,zfar) — build an orthographic projection matrix with width, height and a z range from znear to zfar
  • matrix_build_projection_perspective(width,height,znear,zfar) — build a perspective matrix with width, height and a z range from znear to zfar
  • matrix_build_projection_perspective_fov(fov_y,aspect,znear,zfar)- build a perspective matrix with field of view ange fov_y and an aspect ration and a z range from znear to zfar
  • matrix_transform_vertex(matrix, x, y, z, ) — multiply the given vector (x,y,z,w) by the matrix NOTE: if no w component given then it is treated as 1
  • matrix_stack_push(optional_matrix) — push matrix onto the matrix stack
  • matrix_stack_pop() — pop matrix from the top of the matrix stack
  • matrix_stack_set(matrix) — set the given matrix as the top of the matrix stacl
  • matrix_stack_clear() — clear the matrix stack
  • matrix_stack_top() — return the value at the top of the matrix
  • matrix_stack_is_empty() — return true if matrix stack is empty, false otherwise

Где я могу получить GameMaker: Studio?

Основной сайт движка GM:S — это http://www.yoyogames.com/. Вы можете загрузить бесплатную версию или приобрести одну из лицензионных версий.

Ниже приведено сравнение различных версий GameMaker, взятых с веб-сайта YoYo Games:

Как вы видите, бесплатная версия (Studio) довольно ограничена, но это отличный способ увидеть рабочий процесс и расположение инструментов, а также потратить некоторое время на изучение языка.

Обновление: Бесплатная версия GameMaker: Studio теперь та же, что и стандартная версия! Для получения дополнительной информации см. GameMaker: Studio будет бесплатной.

Стандартная версия отлично подходит для разработчиков одиночек, которые только планируют разработку компьютерных игр; Профессиональная версия идеально подходит для небольшой команды разработчиков планирующих переходить в конечном итоге на кроссплатформенную разработку, поскольку они могут добавлять различные модули с течением времени после получения некоторого дохода; и Master Collection отлично подойдет для небольших команд, которые являются частью созданных студий, и хотели бы использовать кроссплатформенную разработку с самого начала.

GM:S также
доступен в Steam, но я бы рекомендовал не покупать его там, так как
YoYo Games не знает, что вы его приобрели, и,
следовательно обладателям их продукта будет больше хлопот в отделе обслуживания клиентов. Кроме
того, они иногда предлагают дешевые апгрейды для тех, у кого уже есть определенная версия GM:S, и они не могут дать то же обновление пользователям купившим в Steam. Кроме того, если вы покупаете у Steam, то необходимо войти в Steam, чтобы запустить GM:S, а это может раздражать.

Заключение

Game Maker Studio — кроссплатформенный движок игр с легким освоением и подробной документацией. Программа предлагает интуитивно понятный и простой в использовании Drag-и-Drop (называется «DnD» теперь) Интерфейс «значки действий», которые позволят вам начать создавать свои собственные игры очень быстро. Вы можете импортировать и создавать образы и звуки для использования их в игре, а затем мгновенно увидеть результаты ваших действий при нажатии на кнопку. Следует отметить, что GameMaker: Studio заточен на двумерные игры, (но имеется так же базовая поддержка работы с 3d). С помощью D&D любой человек без знаний программирования может создать простенькую игру, на подобии Марио или Тетриса.

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий