pixel game maker mv обучение

Pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

This guide is for those who have never made a video game before.
First off, we’ll guide you along the super basic and required process of creating a player-character to control and enemies to defeat.

This guide will be Guide #1 for beginners: “Setting and moving characters”.

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

This guide is for those who have never made a video game before.

First off, we’ll guide you along the super basic and required process of creating a player-character to control and enemies to defeat.

This guide will be Guide #1 for beginners: “Setting and moving characters”.

Six steps for the minimum requirements for creating and operating a game using Pixel Game Maker MV.

The above is the basic workflow.
(You can do Step 4, “Setting Tiles”, ahead of time if you like.)

★NOTE★ Be sure to save your work often!

If you want to use your very own original assets, then you’ll have to create them yourself and register them, but in order to better understand how the workflow goes, first try importing assets that are readily available in Pixel Game Maker MV.

First, start by creating a new game.

Set the game title as “Test game”.

Then check the “Create Blank Project” box.

Next, select whether to make it a side-view action game or a top-down view action game. For this example, we’ll use “Side-view”.

The settings in the below image are already configured, and can be left as-is.

A brand new empty project has been created.
At this point, it contains no tiles, animations, objects, or assets.

Now, we’ll show you how to import assets from existing sample games.

Select “Close Project” from “File” at the top left, and click “Create Project” once more.

This time, proceed without checking the “Create Blank Project” box.
You can set the game title as anything you like. For this one, we’ll use “Universe”.

The game type configuration screen from earlier will be displayed again, so select “Side-scroll” type and click OK.

Now, the game entitled “Universe”, which is displayed when clicking on “title” on the left edge, should open.

Now let’s try exporting assets from this game.

This time, select “Export/Import”, which allows you to copy settings, etc., as-is from other games.
・Export: Pull out assets
・Import: Insert assets

・”Tiles” are tools used in game stage construction. These can be used to configure walls, etc.

First off, click the “Tiles” icon to the right of the “Scene” icon.
(Be sure not to confuse this with the “Tiles” directly below and to the left.)

As you can see, there are a variety of tiles. Choose the ones you like from this selection.

Here, we’ll choose “SCAFFOLD-SF5” and “SCAFFOLD-SF6”.

Select the tiles and right-click the tile name. With Pixel Game Maker MV, “right-click” is extremely important, and you can use this to add all sorts of things, so remember: “When in trouble, use right-click”.

To select multiple items, use “Ctrl” and “Shift”.

When exporting, you can leave a memo entitled “Contents” – for example, you can leave a note saying “Use as Stage 2 tiles”, etc.

As an example here, we’ll use the filename “tile_export”. Save it somewhere easy to remember and manage.

Moving on, let’s try exporting some other assets.

In the same manner as “Tiles”, “Animations” can also be exported.
Click on “Animations” next to the previous “Tiles”.

Check out all of the various registered animations.
This time, we’ll export the player character, enemies, and bullets from among these, to be configured first.

In the same manner as “Tiles”, “right-click above the left-side section to export”.

We’ll set the filename as “anime_export”.

Now, we’ll try importing the assets you just exported.

You can adjust the size of each section by placing the cursor on the edge and adjusting the length/height.

In Pixel Game Maker MV, you cannot display two separate projects (games) simultaneously, so select “Close project” from “File” at the top left.

*Be sure to close the project without overwriting “Universe”.

Next, open “Test Game” – the empty project you just created.

First, import the “tiles”.

Again, this is where you use right-click. Here, select “Import tiles” from the section on the left side. Select the “tile_export” item, which you just saved.

With this, the tiles you just exported will be imported.

Try importing animations in the same manner. Open the “Animations” screen next to the “Tiles” tab.

Again, use right-click to import the “anime_export” you just saved.

Now your tiles and animations should be imported.

At this point, you’ve completed up to Step 2.
Now, we’ll move on to Step 3, where you’ll create objects.

Objects: Generated objects which can be used to make animations move.

These can be configured by creating an “Animation” and adding an “Object”.

This time, we’ll make it possible to use the basic “Wait”, “Walk”, and “Jump” movements.

Before generating an object, confirm what sort of animation you’ll use for the imported “Universe” game animations.

Click the “Animations” tab and then check the box for “Imported Resources” in the left side animation list.

Click “export_file” > “PLAYER” > “wait”.

You’ll see “Origin settings” to the right. Give this a look.

・Origin point: The point from which an animation moves when animation is displayed.

As you can see, “Floor” has been set for this animation. The red cross beneath the character will act as the origin point.

In the same manner, check the “Walk” and “Jump” animations also being configured.

Now, we’ll try creating an actual object.

Click on the “Object” tab.

Again, right-click “Add object”.

Once you do this, the below screen should be displayed.

Configure the settings like this.
Set the Object name as “Player”, and set “Select Animation” to “wait”.

Now, we’ll create the player character object, so here, check the box for “Object Controlled by Input Device” and click “OK” to the lower right. Now you are able to control this object.

By checking the “Object controlled by input device” box, the following three actions are automatically added.

“Wait”, “Walk”, and ”Jump”.

Tips: When doing this, can you see that the “Wait” box corners have been rounded off?
The action with the rounded corners is the action that will be taken first.
To change this, use right-click for “Set as Default Action”.

The following actions are configured for “Wait”.

This is the “wait” item we confirmed earlier.

Check and configure the “Walk” and “Jump” items in the same manner.

For “Walk”, set the animation to “walk”.

For “Jump”, set the animation to “jump”.

Additionally, confirm that the checkbox for “Perform Jump” to the right is checked.

As you can see, there are arrows present for the “Wait”, “Walk”, and ”Jump” items.
These are called “Links”. These can be used to string each respective action together. Now, let’s take a look at what sort of conditions string these actions together.

Link locations can be changed by clicking on the □ at the edge of the arrow.

1. Wait→Walk

Click the arrow (link) between Wait and Walk.
As you can see in the red box in the screenshot, “←Pressed” and “→Pressed” are displayed.
These are action transition conditions.

2. Walk→Wait

Walk is been set to revert to Wait when no commands have been input.

4. Jump→Wait

This is set to “Wait” upon “Contact with Tile`s Wall Detection”.

*This object is not configured to revert from Jump to Walk, and is set to automatically revert to Wait after jumping.

Now, let’s try actually moving the object.
To move it, you’ll have to configure tiles.

Click the “Tiles” tab.
This will add settings to the imported tiles. As you can see, some imported tiles already have a red box around them. This is a sign that these tiles have already been configured.

Select the “SCAFFOLD-_SF5” item you just imported.

This time, we’ll try configuring tiles that have not yet been configured with anything.

Tiles with no red box have been selected (the thick green box part).

You can see wall settings to the right side. Configuring this as a wall means that the character will use wall detection to avoid falling off of the side. This time, try configuring the walls by clicking “All Walls” with the white button to the right.

This allows you to configure not just a single tile, but multiple tiles simultaneously.
You can use the mouse to drag and set all four tiles within the thick red box at once.

This will set all of these tiles as walls at once.

Next, let’s try distributing these to a scene.
Click on the “Scene” tab to the left of the “Tiles” tab.
Also, right-click to select “Add scene” above “Scene list”.

This will display the scene settings screen.

You can configure scene length with the part in the red box. This time, we’ll set the width to 3.
Here you can select the tiles you’ve imported. Click the tile set “+” button to select tiles. You can change the tile set tile types from “▼”.

Click “OK”.

The scene has been created.

Next, let’s try distributing tiles within the scene you’ve created.

Select the tiles you just configured for wall detection, and click the pencil; symbol on the left edge to lay down the tiles.

Tiles can be laid out easily.

Now let’s try laying down the four tiles you configured at once.

This is how they’ve been configured.
You’re now finished with Step 4.

Now, let’s try laying down the player object you just created.

Click “Objects” next to “Tiles” to the top left, then select “Player” and move it to the right.

Now it has been properly distributed.

The tiles to the right side are slightly high, so use the eraser to delete them.

Return to the “Tiles” tab one tab to the left, and click the eraser icon to the left.

It’s disappeared.
Now, we’re going to enter into test play, but don’t forget to set up key configurations before that.

Earlier, you set “A.pressed” as the transfer to Jump, so don’t forget to configure the A button.

Click “Control key management” from “Settings” at the top.

Double click the right side of “Button 1” in the “Keyboard/Mouse” A line.

As-is, nothing is configured in “A”, so the player will not be able to jump.
Assign the “W” key on the keyboard.

Check the box for “Template”, and click “OK”..
Now you’re all prepared.

We’ve finally reached the final step. This step is extremely simple.

Or, click the “▶” mark at the top-right side of the screen.
Test play will begin.

You can use the “W” key you just assigned to jump.

Did the game work as shown in the image?
Now you’ve checked the player characters Wait, Walk, and Jump actions.

When you’ve fallen into a hole and are unable to move, press F5 to return to the default position.

You’ve now completed the first stage of game creation! Great job!

Источник

Разработка простой игры в Game Maker. Эпизод 0. Первые строки

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

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

Я хотел бы рассказать об игровом движке Game Maker и разместить несколько публикаций, в которых мы напишем клон не сложной игры, например, Plants vs Zombies. Возможно, добавим поддержку геймпада и сделаем, например, Android-версию.

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

Вступление

Game Maker — это невероятно простой игровой движок, позволяющий создать игры для большого числа платформ — Windows, Mac OS X, Ubuntu, Android, iOS, Tizen, Windows Phone, Windows 8, PlayStation 3, PS 4, PS Vita, Xbox One и HTML 5. Есть поддержка SteamWorks. В случае успеха вашей игры, портирование на другую платформу сложной задачей не будет.

Скорость разработки даже при скромных знаниях и минимальной мотивации субъективно быстрее, чем на других движках. Установка и настройка для начинающих максимально проста и не требует особых знаний. Компиляция под другие платформы не требует смены кода игры и осуществляется одним кликом (ну почти).

YoYoGames — компания, создавшая Game Maker, недавно была приобретена Playtech, что дает уверенность в том, что Game Maker продолжит развиваться. Анонсированный Game Maker 2.0 вероятно будет еще более дружественным и простом, а также логично предположить, что будет обладать еще большими возможностями. Как пишут в пресс-релизе, GM 2.0 — одна из причин покупки компании.

В этой статье я кратко расскажу о Game Maker и мы сделаем простой набросок будущего проекта.

Для кого этот движок и с какой целью его еще можно использовать?
Для всех. Цель — любая 2D игра. Однако для тех, для кого программирование не родная стихия, а так же для быстрого прототипирования и создания игры с минимальными усилиями для любого желающего делать игры и/или заработать на них, Game Maker подойдет идеально.

Плюсы Game Maker

— простое вхождение;
— знакомый всем по Java/C/C#… синтаксис;
— возможность легкой компиляции на разные платформы;
— активное сообщество, которое за многие годы уже решило много проблем и написало код за вас;
— стандартный функционал, благодаря которому не нужно самому писать большое количество кода;
— расширяемость через extension’ы;
— справка (F1) очень простая и удобная с отличными объяснениями и примерами.

Минусы Game Maker

— платность (когда вы дорастете до публикации игры, придется купить лицензию);
— нет автоподстановки пользовательских переменных, только для стандартных и скриптов;
— высокая стоимость максимальной лицензии (впрочем, не всем нужны прямо все модули);
— техподдержка (дважды обращался в техподдержку, быстрее чем через 2 недели мне не отвечали);
— нет возможности авторефекторинга.

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

Что такое спрайт в Game Maker?

Это изображение/анимация, которые используются в игре. Они обладают своей маской, формы и размеры которой можно менять. Маска — это область изображения, которая реагирует на события столкновения объектов (если этот спрайт присвоен какому-то объекту), кликов по нему. Можно задать точку отрисовки (Origin) — например, от центра, угла или любой другой точки.

Так же для спрайта можно можно задать Texture Group. Нужно для оптимизации отрисовки (например, незачем держать в памяти texture pages с изображениями, которые используются на экране меню, когда у нас сейчас игровой экран). Для каждой Texture Group можно задать платформу, на которой они будут действовать. Например, для Android можно иметь менее детальные изображения, чем для Windows 8 планшетов.

Что такое объект (object) в Game Maker?

Это описание некоторой сущности, обладающая своими методами (функциями). Каждый объект рисует себя сам (если не задано иное), реагирует на стандартные события — нажатия клавиши, клика по спрайту и т.д… По аналогии с ООП — это класс (class).

Что такое инстанс (instance) в Game Maker?

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

Первое, что необходимо сделать — создать новую комнату (на левой панели правый клик на Rooms — Create Room). Назовем её rm_game. Зададим размеры окна во вкладке Settings — Width — 800, Height — 480, Speed — 60. Т.е. игра у нас будет происходить в окне 800х480, fps будет не превышать и стремиться к 60 кадрам. Сохраняем, закрываем.

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

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

По принципу, аналогичному со спрайтами и комнатами, создаем пустой объект. Назовем его o_unit_parent и больше пока с ним ничего не делаем. Теперь создадим o_unit_shooter и в графе Parent выберем o_unit_parent. Зададим ему спрайт — spr_unit_shooter. Для этого воспользуемся кнопкой, которая находится под именем.

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

Называть спрайты, объекты, комнаты и т.д. можно как вам удобно, но для того, чтобы потом не путаться, лучше сразу называть вещи своими именами, например, спрайты с приставкой spr_, объекты obj_ или o_, скрипты — scr_ и т.д.

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

Спрайт можно задавать и программно, но в таком случае он не будет отображаться в превью Project Structure слева. Теперь добавим событие, которое будет срабатывать при создании инстанса объекта. В этом событии нужно задать начальную инициализацию переменных, если они имеются. Нажмем Add Event. Как видите Game Maker позволяет каждому объекту отлавливать большое число событий. Нас интересует — Create.

Как видите справа в контейнере Actions в нескольких вкладках есть огромное количество drag’n’drop элементов, с помощью которых в теории можно создать совершенно полноценную игру не написав ни строчки кода. Но это для извращенцев и вероятно в Game Maker 2.0 этот ненужный функционал наконец уберут.

Перейдем по вкладку Control перетащим или сделаем правый клик по иконке Execute code. Откроется текстовый редактор, в котором и можно размещать игровую логику.

Все, возвращаемся к объекту o_unit_shooter и создаем новое событие — Alarm 0. Код, который мы напишем в этом событии как раз и будет срабатывать когда запущенный счетчик, который мы создали в событии Create. В событии Alarm 0 мы и будем создавать «пули» (в оригинале — горох), которыми стреляет растение. Добавим такой код:

Как вы помните, в оригинале можно расставлять растительность только в определенных ячейках. Чтобы визуально было понятно в каких пределах можно поставить растение, создадим фон и зальем им нашу комнату. Правой кнопкой по Backgrounds — Create Background — Load Background, выбираем нужную картинку, скажем, 64х64 пикселя, обзываем bg_grass. Переходим в нашу комнату (rm_game), вкладка Backgrounds, выбираем созданный секунду назад фон. Ставим галочки, если не стоят как на изображении.

pixel game maker mv обучение. Смотреть фото pixel game maker mv обучение. Смотреть картинку pixel game maker mv обучение. Картинка про pixel game maker mv обучение. Фото pixel game maker mv обучение

Добавим этому событию такой код:

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

В первых четырех строках мы объявляем локальные переменные. background_get_width, background_get_height — встроенные функции, возвращающие width и height нашего фона. Как видите эти данные нам понадобятся для того, что бы просчитать iX и iY. iX и iY — это будут координаты, в которых мы создадим экземпляр объекта o_unit_shooter. mouse_x, mouse_y — встроенные в Game Maker глобальные переменные (т.е. те, к которым мы может обратиться из любого места), хранящие текущие координаты курсора мыши (пальца). Т.к. мы работаем в событии Global left released, в них хранятся последние координаты где пользователь отпустил левую кнопку мыши (отпустил палец). Математические операции, результат которых присваиваются переменным iX, iY нужны для просчета координат, в которых экземпляр объекта o_unit_shooter будет находится ровно по средине ячейки фона bg_grass. Т.е. помните, что в Plants Vs Zombies растение нельзя поставить где угодно, только в определенной точке, но при этом кликнуть-то можно где угодно и растение поставится как раз в нужном месте. Этим и занимается весь код выше.

exit — код, который обрывает выполнение события. Т.е. если в координатах iX, iY какой-то юнит уже есть, срабатывает exit и инстанс o_unit_shooter не создается, т.к. мы прерываем выполнение всего последующего кода. Это нам нужно, чтобы в одной ячейке не могло стоять 2 пользовательских юнита.

Что ж, пришло время добавить первого врага. Создаем новый объект и опять же создадим базовый родительский объект. Назовем o_enemy_zombie и o_enemy_parent, который будет ему родительским. Создадим спрайт spr_enemy_zombie, отцентрируем и присвоим его o_enemy_zombie.

По сколько свойством всех врагов является движение в сторону растений, то создадим в o_enemy_parent в событии Create этот код:

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

Если сам не нравятся функции hspeed, wspeed вы можете сами их реализовать изменяя значение x или y в событии Step. Эти функции просто делают это за вас.

HP — это еще одна переменная, в которой мы будем хранить количество очков жизни врагов. Этой переменной будет «владеть» каждый инстанс, но ведь максимальное количество очков жизни у разных типов врагов разные, т.е. нужно как-то переопределить/перезадать это значение. Либо можно задать всем врагам одинаковое количество жизней, скажем, 100 и ввести понятие defence от которой будет зависеть получаемый врагом урон, но сейчас нету смысла усложнять, верно? Так что обойдемся только одной переменной — HP.

Запомните, gml — язык, используемый в Game Maker регистрозависимый, HP, hP, Hp и hp — будут разными переменными.

canAttack — просто переменная, которой мы присваиваем значение true(истина). Пока просто напишем и забудем о ней.

Раз у нас значение HP у каждого врага будет разное, нужно как-то переопределить это значение. Это очень-очень просто. Переходим к объекту o_enemy_zombie, создаем реакцию на событие Create и пишем код:

Функция event_inherited(); и занимается наследованием. Т.е. теперь o_enemy_zombie выполнит код:

Который «импортирует» эта функция, а затем значение выполнится строка — HP = 20;
Т.е. по факту на конец события Create объект o_enemy_zombie будет иметь такие свойства:

Если же мы забудем о функции event_inherited(); или забудем объекту o_enemy_zombie указать родительский объект, враг двигаться не будет, при попытке обратиться к переменной cHspeed этого объекта появится ошибка.

Великолепно, если мы захотим создать еще один тип врага, в событии Create мы напишем тоже самое, изменив на нужно количество HP:

Раз у зомби есть очки жизни, они должны быть и у растения. Добавьте самостоятельно в событие Create объекта o_unit_parent код HP = 20; и строку event_inherited(); в событие Create объекта o_unit_shooter.

А вы знаете?

Если вам не нужно ничего переопределять и дописывать в событии Create, добавлять код event_inherited(); без другой логики в событие не нужно — за вас это сделаем сам Game Maker. Тоже касается любых других событий, не только Create.

Это очень интересный момент. other — это инстанс объекта, с которым в этот момент события происходит коллизия. Естественно, т.к. этот код находится в событии столкновения с экземпляром объекта o_enemy_zombie, то в other и будет только инстанс o_enemy_zombie.

Ничего страшного в нем нет почти все конструкции вам уже знакомы.
if (!isActive) exit; — если объект не активен, т.е., скажем, отдыхает/перезаряжается/делает замах, данное событие выполнятся не будет. В следующих двух строках мы получаем координаты центра ячейки, находящейся слева от той, на которой сейчас находится центр нашего instance(помним, что x — возвращает координаты Origin-точки, а она у нас выставлена как раз по центру спрайта). Дальше мы смотрим, находится ли по координатам (leftCellCenterX, y) пользовательский юнит. Если там что-то есть происходит последующая логика, но о ней через секунду, если же там ничего нет, мы присваиваем hspeed значение переменной cHspeed, которую мы, помните, создаем в событии Create. Вот тут она и пригодилась. Смысл за этим скрывается такой — если наш зомби остановился для того, чтобы атаковать и уничтожил растение, нужно чтобы он продолжил свой путь. Можно, конечно, не вводить переменную cHspeed, но тогда нужно будет вспомнить где вы задаете скорость движения, а это забывается.

Это в случае если на пути зомби ничего нет, теперь же возвращаемся к моменту, когда нам предстоит бой. Первые же строки оказываются очень интересными, с подвохом. Дело в том, что объявив локальную переменную frontEnemySprtWidth мы в инстансе frontEnemy присваиваем ей значение. Знакомые с программированием, скажут, но ведь в таком случае мы обращаемся к переменной frontEnemySprtWidth не нашего зомби, а к переменной с таким же именем, но инстанса frontEnemy. Так да не так, дело в том, что локальные переменные(объявленные через var) становятся видимыми внутри этого события везде, даже изнутри инстанса frontEnemy. Таким образом в коде ошибки нет, мы действительно обращаемся именно к той переменной, которая была объявлена локальной внутри зомби. Если вы не поняли этого момента поэкспериментируйте или прочтите справку, там все прекрасно объяснено, а мы идем дальше.
Мы присвоили frontEnemySprtWidth значение длины(width) спрайта юнита пользователя(растения), который находится на ячейку левее нашего зомби. Вы скажете, а зачем нам городить такую сложную для первого понимания конструкцию, если можно обойтись var frontEnemySprtWidth = sprite_get_width(spr_unit_shooter);. Ответ прост — это сейчас у нас одно растение и мы знаем к какому спрайту обратиться, но при добавлении новых типов юнитов(подсолнухи и т.д.), придется городить громоздкую конструкцию switch, чтобы узнать что же за объект впереди нас, а так довольно просто решается эта проблемка.

Дальше мы проверяем, если расстояние между крайней правой точкой пользовательского юнита и крайней левой точкой нашего зомби меньше 12 пикселей, то мы останавливаем нашего зомби, проверяем может ли наш зомби атаковать(проверяем значение ранее созданной в событии Create объекта o_enemy_parent переменной canAttack), продолжается выполняться код, в котором мы говорим, что атаковать теперь уже нельзя и что следующий раз это можно будет сделать через room_speed * 1.2 кадров(через 60*1.2) — это мы делаем в alarm[0](сами добавьте его в соответствующее событие(Alarm 0) объекта o_enemy_parent, где напишите код canAttack = true;). Если атаковать можно, отнимаем у инстанса растения 5 очков жизни и проверяем, живо ли оно еще, если нет — уничтожаем.

Ну вот и отлично враг готов — он двигается, атакует и продолжает движение, если уничтожил растение, но у него есть один недостаток — его не существует. Мы создали только описание нашего врага, теперь нужно же помещать зомби на игровое поле. Возвращаемся в событие Create объекта o_game. Добавим код
alarm[0] = room_speed; // generate enemies

Т.е. через 60 кадров сработает Alarm 0 и будет создан зомби, правильно? Нет. Мы же не создали логики для этого Alarm. А код тут тоже простой:

Все просто — мы не будем усложнять и просто каждые 3 секунды(60 кадра * 3) создаем инстанс o_enemy_zombie по координатам X: room_width + sprite_get_width(spr_enemy_zombie)/2 + 1 т.е. за ровно на один пиксель правее, чем граница экрана, т.е. зомби изначально видно не будет и Y — случайная ячейка. room_width и room_height, как вы уже поняли, это width и height нашей комнаты. Т.е. 800 и 480 соответственно.

Координаты можно любые. Теперь мы можете задать вопрос, а как Game Maker определит, что нужно запускать комнату rm_game или «а что если у нас будет много комнат, с какой Game Maker начнет?». Все как всегда просто — самая верхняя комната запускается первой(их порядок можно менять перетягивая мышкой). Сейчас она у нас одна потому сразу она же и запустится.

Теперь у нас должно получиться что-то такое:

На этом первый эпизод закончен. Поздравляю, мы сделали прототип игры. Осталось совсем немного — сделать из него полноценную игру, чем и займемся в следующих частях.

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

Как видите по уроку, в некоторых планах текущая версия Game Maker не идеальна, многое приходится держать в голове, зато в Game Maker проще делать все остальное. Небольшое неудобство стоит того.

В следующем эпизоде:

— /теория/ скрипты
— /теория/ отладка
— /практика/ юнит подсолнухи
— /практика/ мана(солнышки)
— /практика/ генерация врагов волнами
— /практика/ газонокосилки
— /практика/ новые юниты зомби и растений
— /теория + практика/ примитивный интерфейс

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *