Вибираємо програму для створення гри. Про програму Конструктор 2d ігор кряк



Цей туторіал призначений в першу чергу для новачків у розробці під андроїд, але може бути корисним і досвідченим розробникам. Тут розказано як створити найпростішу 2D гру на анроїді без використання будь-яких ігрових двигунів. Для цього я використовував Android Studio, але можна використовувати будь-яке інше відповідне настроєне середовище розробки.

Крок 1. Вигадуємо ідею гри
Наприклад візьмемо досить просту ідею:

Внизу екрану космічний корабель. Він може рухатися вліво та вправо, натиснувши відповідні кнопки. Зверху вертикально вниз рухаються астероїди. Вони з'являються по всій ширині екрана та рухаються з різною швидкістю. Корабель повинен ухилятися від метеоритів якнайдовше. Якщо метеорит потрапляє до нього – гра закінчена.


Крок 2. Створюємо проект
В Android Studio верхньому менювибираємо File > New > New Project.

Тут вводимо назву програми, домен та шлях. Натискаємо Next.

Тут можна запровадити версію андроїд. Також можна вибрати андроїд годинник та телевізор. Але я не впевнений, що наш додаток на всьому цьому буде працювати. Отже, краще введіть все як на скріншоті. Натискаємо Next.

Тут неодмінно вибираємо Empty Activity. І тиснемо Next.

Тут залишаємо все як є і тиснемо Finish. Отже, проект створений. Переходимо до третього етапу.

Крок 3. Додаємо картинки

Крок 5. Редагуємо MainActivity клас

У першу чергу визначення класу додаємо implements View.OnTouchListener. Визначення класу тепер буде таким:

Public class MainActivity extends AppCompatActivity implements View.OnTouchListener (
Додамо до класу потрібні нам статичні змінні (змінні класу):

Public static boolean isLeftPressed = false; // натиснута ліва кнопка public static boolean isRightPressed = false; // натиснута права кнопка
У процедуру protected void onCreate(Bundle savedInstanceState) (
додаємо рядки:

GameView gameView = новий GameView(this); // створюємо gameView LinearLayout gameLayout = (LinearLayout) findViewById (R.id.gameLayout); // знаходимо gameLayout gameLayout.addView(gameView); // і додаємо до нього gameView Button leftButton = (Button) findViewById(R.id.leftButton); // знаходимо кнопки Button rightButton = (Button) findViewById(R.id.rightButton); leftButton.setOnTouchListener(this); // і додаємо цей клас як слухача (при натисканні спрацює onTouch) rightButton.setOnTouchListener(this);
Класи LinearLayout, Button і т.д. підсвічені червоним, тому що ще не додані в Import.
Щоб додати до Import і прибрати червоне підсвічування, потрібно для кожного натиснути Alt+Enter.
GameView буде підсвічено червоним тому що цього класу ще немає. Ми створимо його пізніше.

Тепер додаємо процедуру:

Public boolean onTouch(View button, MotionEvent motion) ( switch(button.getId()) ( // визначаємо яка кнопка case R.id.leftButton: switch (motion.getAction()) ( // визначаємо натиснута або відпущена case MotionEvent.) ACTION_DOWN: isLeftPressed = true; break; case MotionEvent.ACTION_UP: isLeftPressed = false; break; ) break; = true; break; case MotionEvent.ACTION_UP: isRightPressed = false; break; ) break; ) return true;
Якщо хтось заплутався? ось так в результаті має виглядати MainActivity клас:

Package com.spaceavoider.spaceavoider; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; Public class MainActivity extends AppCompatActivity implements View.OnTouchListener ( public static boolean isLeftPressed = false; // натиснута ліва кнопка public static boolean isRightPressed = false; // натиснута права кнопка @Override protected void onC State) setContentView(R.layout.activity_main);GameView gameView = new GameView(this); // створюємо gameView / і додаємо в нього gameView Button leftButton = (Button) findViewById (R.id.leftButton); // знаходимо кнопки Button rightButton = (Button) додаємо цей клас як слухача (при натисканні спрацює onTouch) rightButton.setOnTouchListener(this); ) : switch (motion.getAction()) ( // визначаємо натиснуто або відпущено case MotionEvent.ACTION_DOWN: isLeftPressed = true; break; case MotionEvent.ACTION_UP: isLeftPressed = false; break; ) break; case R.id.rightButton: switch (motion.getAction()) ( // визначаємо натиснуто або відпущено case MotionEvent.ACTION_DOWN: isRightPressed = true; break; case MotionEvent.ACTION_UP: isRightPressed = false; break; ) ) return true; )
Отже, клас MainActivity готовий! У ньому ініційовано ще не створений клас GameView. І коли натиснута ліва кнопка - статична змінна isLeftPressed = true, а коли права - isRightPressed = true. Це загалом і все, що він робить.

Для початку зробимо щоб на екрані відображався космічний корабель, і щоб він рухався натисканням кнопок, що управляють. Астероїди залишимо на потім.

Крок 6. Створюємо клас GameView

Тепер нарешті створимо цей недостатній клас GameView. Тож приступимо. На визначення класу додамо extends SurfaceView implements Runnable. Мобільні пристрої мають різні дозволи екрану. Це може бути старенький маленький телефон з роздільною здатністю 480×800, або великий планшет 1800×2560. Для того щоб гра виглядала на всіх пристроях однаково, я поділив екран на 20 частин по горизонталі і 28 по вертикалі. Отриману одиницю виміру я назвав юніт. Можна вибрати інші числа. Головне щоб відношення між ними зберігалося, інакше зображення буде витягнутим або стиснутим.

Public static int maxX = 20; // розмір горизонталі public static int maxY = 28; // розмір вертикалі public static float unitW = 0; // пікселів у юніті по горизонталі public static float unitH = 0; // пікселів у юніті по вертикалі
unitW та unitW ми обчислимо пізніше. Також нам знадобляться й інші змінні:

Private boolean firstTime = true; private boolean gameRunning = true; private Ship ship; private Thread gameThread = null; private Paint paint; private Canvas canvas; private SurfaceHolder surfaceHolder;
Конструктор буде таким:

Public GameView(Context context) (super(context); // ініціалізуємо об'єкти для малювання surfaceHolder = getHolder(); paint = new Paint(); // ініціалізуємо потік gameThread = new Thread(this); gameThread.start(); )
Метод run() міститиме нескінченний цикл. На початку циклу виконується метод update()
який обчислюватиме нові координати корабля. Потім метод draw() малює корабель на екрані. І наприкінці метод control() зробить паузу на 17 мілісекунд. Через 17 мілісекунд run() запуститься знову. І так поки змінна gameRunning == true. Ось ці методи:

@Override public void run() ( while (gameRunning) ( update(); draw(); control(); ) ) private void update() ( if(!firstTime) ( ship.update(); ) ) private void draw () ( if (surfaceHolder.getSurface().isValid()) ( // перевіряємо чи валідний surface if(firstTime)( // ініціалізація при першому запуску firstTime = false; unitW = surfaceHolder.getSurfaceFrame().width()/maxX // обчислюємо число пікселів у юніті unitH = surfaceHolder.getSurfaceFrame().height()/maxY;ship = new Ship(getContext()); // додаємо корабель ) canvas = surfaceHolder.lockCanvas(); .drawColor(Color.BLACK); // заповнюємо фон чорним ship.drow(paint, canvas); // малюємо корабель surfaceHolder.unlockCanvasAndPost(canvas); // відкриваємо canvas ) ) private void control() мілісекунд try ( gameThread.sleep(17); ) catch (InterruptedException e) ( e.printStackTrace(); ) )
Зверніть увагу на ініціалізацію під час першого запуску. Там ми обчислюємо кількість пікселів у юніті та додаємо корабель. Корабель ми ще не створили. Але насамперед ми створимо його батьківський клас.

Крок 7. Створюємо клас SpaceBody

Він буде батьківським для класу Ship (космічний корабель) та Asteroid (астероїд). У ньому будуть утримуватися всі змінні та методи спільні для цих двох класів. Додаємо змінні:

Protected float x; // координати protected float y; protected float size; // Розмір protected float speed; // Швидкість protected int bitmapId; // id зображення protected Bitmap bitmap; // картинка
та методи

Void init(Context context) ( // стискаємо картинку до потрібних розмірів Bitmap cBitmap = BitmapFactory.decodeResource(context.getResources(), bitmapId); bitmap = Bitmap. int)(size * GameView.unitH), false);cBitmap.recycle(); ) void update()( // тут будуть обчислюватися нові координати ) (bitmap, x*GameView.unitW, y*GameView.unitH, paint);
Крок 8. Створюємо клас Ship

Тепер створимо клас Ship (космічний корабель). Він успадковує клас SpaceBody тому у визначення класу додамо extends SpaceBody.

Напишемо конструктор:

Public Ship (Context context) (bitmapId = R.drawable.ship; // визначаємо початкові параметри size = 5; x = 7; y = GameView.maxY - size - 1; speed = (float) 0.2; init (context); // ініціалізуємо корабель)
і перевизначимо метод update()

@Override public void update() ( // переміщаємо корабель в залежності від натиснутої кнопки if(MainActivity.isLeftPressed && x >= 0)( x -= speed; ) if(MainActivity.isRightPressed && x<= GameView.maxX - 5){ x += speed; } }
На цьому космічний корабель готовий! Все компілюємо та запускаємо. На екрані має з'явитися космічний корабель. При натисканні на кнопки він повинен рухатися праворуч і ліворуч. Тепер додаємо астероїди, що сипляться зверху. При зіткненні з кораблем гра закінчується.

Крок 9. Створюємо клас Asteroid

Додамо клас Asteroid (астероїд). Він теж успадковує клас SpaceBody тому у визначення класу додамо extends SpaceBody.

Додамо потрібні нам змінні:

Private int radius = 2; // Радіус private float minSpeed ​​= (float) 0.1; // Мінімальна швидкість private float maxSpeed ​​= (float) 0.5; // максимальна швидкість
Астероїд повинен з'являтися у випадковій точці вгорі екрана та летіти вниз із випадковою швидкістю. Для цього x та speed задаються за допомогою генератора випадкових чисел у його конструкторі.

Public Asteroid(Context context) (Random random = new Random(); bitmapId = R.drawable.asteroid; y=0; x = random.nextInt(GameView.maxX) - radius; size = radius*2; speed = minSpeed ​​+ (maxSpeed ​​- minSpeed) * random.nextFloat(); init(context);
Астероїд повинен рухатися з певною швидкістю вертикально вниз. Тому у методі update() додаємо до координати x швидкість.

@Override public void update() ( y += speed; )
Так само нам потрібен буде метод визначальний чи зіткнувся астероїд з кораблем.

Public boolean isCollision(float shipX, float shipY, float shipSize) ( return !(((x+size)< shipX)||(x >(shipX+shipSize))||((y+size)< shipY)||(y >(shipY+shipSize))); )
Розглянемо його детальніше. Для простоти вважаємо корабель та астероїд квадратами. Тут я пішов від неприємного. Тобто визначаю коли квадрати не перетинаються.

((x+size)< shipX) - корабль слева от астероида.
(x> (shipX+shipSize)) - корабель праворуч від астероїда.
((y+size)< shipY) - корабль сверху астероида.
(y> (shipY+shipSize)) - корабель знизу астероїда.

Між цими чотирма висловлюваннями стоїть || (або). Тобто якщо хоч один вираз правдивий (а це означає, що квадрати не перетинаються) - результуючі теж правдиві.

Весь цей вислів я інвертую знаком! В результаті метод повертає true коли квадрати перетинаються. Що нам треба.

Для визначення перетину складніших форм можна почитати.

Крок 10. Додаємо астероїди до GameView

У GameView додаємо змінні:

Private ArrayList asteroids = новий ArrayList<>(); // тут будуть зберігатися астероїди private final int ASTEROID_INTERVAL = 50; // час, через який з'являються астероїди (в ітераціях) private int currentTime = 0;
також додаємо 2 методи:

Private void checkCollision()( // перебираємо всі астероїди і перевіряємо чи не стосується один з них корабля for (Asteroid asteroid: asteroids) (if(asteroid.isCollision(ship.x, ship.y, ship.size)))( // гравець програв gameRunning = false; // зупиняємо гру // TODO додати анімацію вибуху ) ) ) private void checkIfNewAsteroid()( // кожні 50 ітерацій додаємо новий астероїд if(currentTime >= ASTEROID_INTERVAL)( Asteroid asteroid = new Asteroid );asteroids.add(asteroid); currentTime = 0; )else( currentTime ++; ) )
І в методі run() додаємо виклики цих методів перед викликом control().

@Override public void run() ( while (gameRunning) ( update(); draw(); checkCollision(); checkIfNewAsteroid(); control(); ) )
Далі в методі update() додаємо цикл який перебирає всі астероїди і викликає у них метод update().

Private void update() ( if(!firstTime) ( ship.update(); for (Asteroid asteroid: asteroids) ( asteroid.update(); ) ) )
Такий же цикл додаємо і метод draw().

Private void draw() ( if (surfaceHolder.getSurface().isValid()) ( // перевіряємо чи валідний surface if(firstTime)( // ініціалізація при першому запуску firstTime = false; unitW = surfaceHolder.getSurfaceFrame().width( )/maxX;// обчислюємо число пікселів в юніті unitH = surfaceHolder.getSurfaceFrame().height()/maxY;ship = new Ship(getContext()); // додаємо корабель ) canvas = surfaceHolder.lockCanvas(); закриваємо canvas canvas.drawColor(Color.BLACK);// заповнюємо фон чорним ship.drow(paint, canvas);// малюємо корабель for(Asteroid asteroid: asteroids)( // малюємо астероїди asteroid.drow(paint, canvas); ) surfaceHolder.unlockCanvasAndPost(canvas); // відкриваємо canvas ) )
От і все! Найпростіша 2D гра готова. Компілюємо, запускаємо і дивимося що вийшло!
Якщо хтось заплутався або щось не працює, можна скачати вихідний файл.

Гра, звісно, ​​примітивна. Але її можна вдосконалити, додавши нові функції. Насамперед слід реалізувати видалення астероїдів, що вилетіли за межі екрана. Можна зробити, щоб корабель міг стріляти в астероїди, щоб гра поступово прискорювалася, додати таймер, таблицю рекордів та інше. Якщо це буде вам цікаво – напишу продовження, де все це опишу.

На цьому все. Пишіть відгуки, питання, які вас цікавлять теми для продовження.

Ми перерахували десять програм для створення ігор – яка з них найкраще підійде для новачків та який із конструкторів стане оптимальним вибором для професіоналів?

У ролі 2D-конструктора рекомендуємо зупинитися на Construct 2. Програма базується на якісному движку, не обмежує вас у польоті фантазії, дозволяючи створювати ігри різних жанрів та для різних платформ. Єдиний нюанс – не забувайте, що для компіляції робіт для мобільних пристроїв потрібно буде придбати ліцензію.

Найбільш багатофункціональний та стабільний 3D-конструктор - Unity 3D.

Початківцям ігроделам рекомендуємо програми, «заточені» під певний жанр. У них більше готових шаблонів і тому створити проект буде простіше. Для них радимо Visionaire Studio. Для досвідчених користувачів вердикт однозначний - Unity 3D. Програма базується на сучасному движку і не має обмежень щодо жанру кінцевого продукту. Додайте до цього фірмові технології з обробки графіки та вбудовані аналітичні інструменти – перед нами чудовий конструктор професійного рівня.

Програма варта створення двовимірних ігор без використання мов програмування. Замість рядків коду підставляються вже готові дії ігрових персонажів. Користувачеві залишається лише створювати ігрові об'єкти, постачати їх двовимірними спрайтами або анімацією, створювати правила взаємодії між об'єктами, розставляти об'єкти на рівнях. Малювати графіку та анімацію можна прямо у «Game Maker», не використовуючи сторонніх програм.

У цій програмі чудово виходять ігри з видом зверху, і платформери з видом збоку.

«Game Maker» буде цікава і просунутим програмістам, можливість додавати свій програмний кодтут також є.

Безкоштовний варіант програми нічим не обмежує звичайних користувачів порівняно з платною версією «Game Maker Pro». Платна версія відкриває доступ до складних програмних модулів, цікавих лише справжнім професійним програмістам.


Дуже простий конструктор 2D ігор. Знання мов програмування необов'язково.

На відміну від Game Maker, в Construct 2 можна створювати ігри для iOS, Android, Facebook, Chrome Web Store, Desktop Windows, Windows 8 Apps, Web (HTML5), Kongregate і для багатьох інших платформ.

Це більше якісна програма, але й більш жадібна до грошей. Безкоштовна програма до того моменту, поки ви не захочете продавати свою гру. У цьому випадку потрібно буде придбати ліцензійну версію. Також на сайті розробників є спеціальний магазин, де ви можете купувати будівельні ресурси для своєї гри: набори звуків, музику, докладні інструкції.

Радимо Навчальний курс TDS від А до Я (створення гри в жанрі "Шутер з видом зверху").


Програми для створення 3D ігор (Сайт сайт)

"3D Rad" найдешевший варіант серед ігрових 3D движків. Програму можна використовувати взагалі безкоштовно, а заплативши 5$ Ви отримуєте найсвіжіші оновлення в день їхнього виходу (у безкоштовній версії оновлення з'являються лише через три місяці). Найчастіше цей двигун використовується для створення гоночних ігор.

Програма має простий і зрозумілий інтерфейс, не обтяжений дрібницями.

«3D Rad» підтримує встановлення окремих плагінів, має встановлені ІІ моделі, карти тіней та текстур. Існує можливість створення онлайн-ігор.


NeoAxis Game Engine SDK

Відмінний ігровий двигун з простим інтерфесом та якісною графікою. Спроектований для створення ігор практично у будь-яких жанрах.

Створено на основі двигуна Ogre3D. Як мову програмування використовується C# і C++ і платформа.NET, але можна обходитися без програмування завдяки спеціальним бібліотекам готових дій. Для двигуна є різні доповнення та розширення, розроблені сторонніми користувачами. Є можливість експорту для 3dsMax та Maya, Autodesk Softimage та Blender. Підтримуються шейдери, освітлення та тіні PSSM (Parallel-Split Shadow Map).

NeoAxis Engine поширюється на 4 типи ліцензії: Некомерційна – безкоштовно для некомерційних проектів; Інді-ліцезія - 95/295 $ (один / команда); Комерційна - 395/995 $ (один / команда); Ліцензія на вихідні - від 9,800 $.

Основна перевага даного ігрового двигуна - максимальна зручність та простота. До того ж двигун розроблений вітчизняними програмістами, завдяки чому в ньому є російська мова за умовчанням. При покупці ліцензійної версії ви отримуєте якісну технічну підтримку своєю рідною мовою.


Комплексний інструмент, що містить все, що може знадобитися для створення гри. У пакет Unity 3D входить графічний движок, що повністю використовує можливості DirectX і OpenGL, вбудований редактор 3D моделей, окремі програми для створення та обробки шейдерів, тіней, ландшафтів, фізики та звуків, а також багаті бібліотеки скриптів. З «Unity 3D» можна взагалі забути про сторонні програми, або звести їх використання до мінімуму.

Unity 3D підходить для створення ігор будь-якого жанру. Як платформи підтримуються звичайні комп'ютери(Windows XP/Vista/7, OSX), мобільні пристрої(Android, iOS, Blackberry), ігрові консолі (Wii, Playstation 3, Xbox), інтернет-браузери (Flash, Web Player).

Є особлива система спільної розробки – Asset Server, що дозволяє розробляти гру у складі цілої команди прямо через інтернет.

Єдиний мінус - для використання Unity 3D потрібно знати комп'ютерне програмування хоча б на середньому рівні. Незважаючи на багату бібліотеку готових практичних програмних рішень та потужний скриптовий двигун з моментальною компіляцією, частину коду доведеться прописувати самостійно на JavaScript або C#.


Unreal Development Kit (UDK)

Один з найпопулярніших ігрових двигунів у професійному середовищі ігрових розробників. На "Unreal Engine" створені такі ігри, як: серія "Unreal Tournament", серія "Mass Effect", "XCOM", "Borderlands 2", "DmC: Devil May Cry" і ще десятки і сотні дрібніших ігор.

"UDK" підтримує такі платформи: PC, Xbox 360, PlayStation 3, Wii, Android.

Цей двигун спочатку заточений під створення 3D-шутерів, але є можливості для створення ігор суміжних жанрів: слешерів, пригод, ММО-ігор.

Ігровий двигун добре створює анімації особи, складну архітектуру будівель, обробляє складні фізичні об'єкти. У складі UDK є всі необхідні інструменти для створення анімацій, текстур, звуків, рівнів, моделей, програмних скриптів. Є вбудована бібліотека, що містить понад 1000 споруд, інших 3D моделей, стандартних текстур та звуків. Є можливість програмування спеціальною мовою «Unreal Script» (створений на основі C++).

Використовувати UDK можна абсолютно безкоштовно, до того моменту, поки Ви не вирішите офіційно видати свою гру, створену на цьому движку. У такому разі доведеться розщедритися на дорогу ліцензію.


CryENGINE 3 Free SDK

"CryENGINE 3" - це вершина сучасних ігрових движків, що забезпечує фотореалістичну графіку з підтримкою DirectX 11 і шейдерів третього покоління. Третя версія движка створена у 2009 році. На цьому движку створені серії ігор Far Cry» та «Crysis», онлайн гра Aion, а також десятки менш відомих комп'ютерних ігор.

Компанія «Crytek» вирішила безкоштовно розповсюджувати цей, і так популярний, ігровий двигун. Але безкоштовність діє рівно до того моменту, поки Ви не захочете офіційно випустити гру, створену на цьому двигуні. Ліцензійна версія коштує дорожче за всі аналогічні програми, але вона коштує цих грошей.

На CryENGINE 3 можна створювати ігри для платформ: PC, PlayStation 3 і Xbox 360.

Імпортувати текстури можна з графічних програм «3ds max», «Maya» і з попередніх версій движка.

Двигун «CryENGINE 3» виявився дуже популярним, у нього з'явилося ціле російськомовне співтовариство, завдяки цьому Ви легко зможете знайти всілякі навчальні матеріали, а також відповіді на конкретні питання.


Вітаю.

Ігри ... Це одні з найпопулярніших програм, заради яких багато користувачів і купують комп'ютери та ноутбуки. Напевно, ПК не стали б такі популярні, якби на них не було ігор.

І якщо раніше для того, щоб створити якусь гру необхідно було володіти спеціальними знаннями в галузі програмування, малювання моделей тощо - то зараз достатньо вивчити якийсь редактор. Багато редакторів, до речі, досить прості і розібратися в них зможе навіть користувач-початківець.

У цій статті хотілося б торкнутися таких популярних редакторів, а також на прикладі одного з них розібрати покроково створення якоїсь простої гри.

1. Програми для створення 2D ігор

Під 2D - розуміють двовимірні ігри. Наприклад: тетріс, кіт-рибалка, пінбол, різні карткові ігри та ін.

Приклад 2D гри. Карткова гра: Солітер

1) Game Maker

Сайт розробника: http://yoyogames.com/studio

Процес створення гри в Game Maker…

Це один із найпростіших редакторів для створення невеликих ігор. Редактор виконаний досить якісно: у ньому легко почати працювати (все інтуїтивно зрозуміло), водночас великі можливості для редагування об'єктів, кімнат та ін.

Зазвичай у цьому редакторі роблять ігри з видом зверху та платформери (вид із боку). Для більш досвідчених користувачів (ті, які трохи розуміються на програмуванні) є спеціальні можливості по вставці скриптів і коду.

Не можна не відзначити велику різноманітність ефектів та дій, які можна задавати різним об'єктам (майбутнім персонажам) у цьому редакторі: кількість просто вражає – більше кількох сотень!

2) Construct 2

Сайт: http://c2community.ru/

Сучасний ігровий конструктор (у прямому розумінні цього слова), що дозволяє навіть початківцям ПК робити сучасні ігри. Причому хочу підкреслити, за допомогою цієї програми гри можна виготовляти для різних платформ: IOS, Android, Linux, Windows 7/8, Mac Desktop, Web (HTML 5) та ін.

Цей конструктор дуже схожий на Game Maker - тут також потрібно додавати об'єкти, потім прописати їм поведінку (правила) і створити різні події. Редактор побудований за принципом WYSIWYG – тобто. ви відразу ж бачитимете результат у міру створення гри.

Програма платна, хоча для початку буде достатньо і безкоштовної версії. Відмінність різних версій описано на сайті розробника.

2. Програми для створення 3D ігор

(3D – тривимірні ігри)

1) 3D RAD

Сайт: http://www.3drad.com/

Один із найдешевших конструкторів у форматі 3D (багатьом користувачам, до речі, вистачить і безкоштовної версії, яка має обмеження на оновлення терміном на 3 місяці).

3D RAD – найлегший конструктор в освоєнні, програмувати тут практично не потрібно, хіба що за винятком прописування координат об'єктів при різних взаємодіях.

Найпопулярніший формат ігор, який створюють за допомогою цього движка – це гонки. До речі, скріншоти вище це вкотре підтверджують.

2) Unity 3D

Сайт розробника: http://unity3d.com/

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

У пакет Unity 3D входить двигун, який повністю дозволяє використовувати можливості DirectX і OpenGL. Також в арсеналі програми можливість роботи з 3D моделями, робота з шейдерами, тінями, музикою та звуками, величезна бібліотека скриптів під стандартні завдання.

Мабуть, єдиний недолік цього пакету - це необхідність знання програмування на C# чи Java - частина коду при компіляції доведеться дописувати в «ручному режимі».

3) NeoAxis Game Engine SDK

Сайт розробника: http://www.neoaxis.com/

Безкоштовне середовище розробки практично будь-яких ігор у форматі 3D! За допомогою цього комплексу можна робити і гонки, і стрілялки, і аркади з пригодами.

Для двигуна Game Engine SDK в мережі є чимало доповнень і розширень під безліч завдань: наприклад, фізика автомобіля або літака. За допомогою бібліотек, що розширюються, вам навіть не знадобиться серйозне знання мов програмування!

Завдяки спеціальному плеєру, вбудованому в двигун, ігри створені в ньому можуть відтворюватися в багатьох популярних браузерах: Google Chrome, FireFox, Internet Explorer, Opera та Safari.

Game Engine SDK поширюється як безкоштовний двигун для некомерційних розробок.

3. Як створити 2D гру в редакторі Game Maker - покроково

Game Maker. Додавання об'єкта.

Потім для об'єкту прописуються події: їх може бути десятки, кожна подія - це поведінка вашого об'єкта, його переміщення, звуки пов'язані з ним, керування, окуляри та ін. ігрові характеристики.

Щоб додати подію, натисніть кнопку з однойменною назвою - потім праворуч у стовпчику виберіть дію для події. Наприклад, переміщення по горизонталі та вертикалі, при натисканні клавіш стрілок .

Додавання подій до об'єктів.

Game Maker. Для об'єкта Сонік додано 5 подій: переміщення персонажа у різних напрямках при натисканні клавіш-стрілок; плюс задана умова при перетині кордону ігрової зони.

До речі, подій може бути дуже багато: тут Game Maker не розмінюватися на дрібниці, програма запропонує вам багато всього:

Завдання переміщення персонажа: швидкість переміщення, стрибки, сила стрибка та ін;

накладання твору музики при різних діях;

Поява та видалення персонажа (об'єкта) тощо.

Важливо!Для кожного об'єкта у грі потрібно прописати свої події. Чим більше подій для кожного об'єкта ви пропишете - тим різносторонніша і з більшими можливостями вийде гра. В принципі, навіть не знаючи що конкретно зробить ту чи іншу подію, можна тренуватися додаючи їх і дивитися як поведеться гра після цього. Загалом, величезне поле для експериментів!

6) Остання та одна з важливих дій - створення кімнати. Кімната - це свого роду етап гри, рівень, на якому і взаємодіятимуть ваші об'єкти. Щоб створити таку кімнату, натисніть кнопку з наступним значком: .

Додавання кімнати (етапу гри).

У створеній кімнаті за допомогою мишки можна розставити наші об'єкти на етапі. Налаштувати фон гри, задати назву вікна гри, вказати види тощо. Загалом - цілий полігон для експериментів та роботи над грою.

Запуск отриманої гри.

Game Maker відкриє вікно з грою. Фактично ви можете дивитися, що у вас вийшло, експериментувати, грати. У моєму випадку Сонік може рухатися залежно від натискання клавіш на клавіатурі. Свого роду міні-гра ( ех, а були часи, коли біла точка, що бігає по чорному екрану, викликала дикий подив і інтерес у народу.).

Отримана гра…

Так, звичайно, отримана гра примітивна і дуже проста, проте приклад її створення дуже показовий. Далі експериментуючи і працюючи з об'єктами, спрайтами, звуками, фонами та кімнатами - можна створити дуже не погану 2D гру. Щоб створювати подібні ігри років 10-15 тому необхідно було мати спеціальні знання, зараз - достатньо вміти обертати мишку. Прогрес!

З найкращими! Усім вдалого гра-буду…

  • Розробка під Android
  • Unity
  • Вступ

    Насамперед хочу відразу відзначити, що я не є професійним розробником. У цій статті я постараюся викласти свій досвід створення гри Feel Speed ​​Racing. Даний матеріал, швидше за все не буде цікавий тим, хто вже має великий досвід у розробці ігор, але розробникам-початківцям, які хоч трохи працювали з Unity думаю, буде цікаво.

    Дизайн

    Концепція гри полягає в тому, що автомобіль повинен пройти, якнайбільша відстань при цьому на дорозі динамічно з'являються перешкоди їх треба об'їжджати повз інакше «гра закінчена» ще потрібно стежити за шкалою палива і збирати на дорозі паливні баки, після якої гра теж зупиняється .

    Розробка

    Гра складається з 2-х сцен: головне меню та сама ігрова сцена:

    Де "menu" це головне меню, а "1" це ігрова сцена.

    Головне меню


    Для створення настільки нехитрого меню нам знадобиться елемент управління GUI, який є стандартним у Unity.

    Як тло я використав спрайт з ім'ям «background» заповнений сірим кольором. Ви можете вибрати що завгодно.

    Вміст скрипту:

    Using UnityEngine; використовуючи System.Collections; використовуючи System.Collections.Generic; using System.Runtime.Serialization.Formatters.Binary; using System.IO; public class menu: MonoBehaviour ( public GUIStyle mystyle; // оголошується для того щоб змінювати зображення GUI компонентів (шрифт, розмір і.т.п.) string score; // змінна для зберігання пройденої дистанції void Start () ( StreamReader scoredata = new StreamReader (Application.persistentDataPath + "/score.gd"); // створення файлової змінної score = scoredata.ReadLine (); // читання рядка scoredata.Close (); // закриття файлової змінної ) void Update () ( ) void OnGUI()( GUI.Box (New Rect (Screen.width*0.15f, Screen.height*0.8f, Screen.width*0.7f, Screen.height*0.1f), "MAX DISTANCE:"+score,mystyle) ; //створюємо невелике віконце для показу пройденої відстані if (GUI.Button (new Rect (Screen.width*0.15f, Screen.height*0.25f, Screen.width*0.7f, Screen.height*0.1f), "Start game",mystyle)) //створюємо кнопку для запуску ігрової сцени ( Application.LoadLevel(1);//Завантаження ігрової сцени ) if (GUI.Button (new Rect (Screen.width*0.15f, Screen.height*0.4f) , Screen.width*0.7f, Screen.height*0.1f), "Exit",mystyle)) //створюємо кнопку для виходу з гри ( Application.Quit();//Вихід з гри ) ) )
    В результаті має вийти приблизно ось так:

    Шрифт, колір та розмір GUI елементів можна змінити за допомогою MyStyle.

    Створення ігрової сцени

    Основними на цій сцені елементами є дорога, автомобіль та шкала палива.

    1. Дорога:

    Зважаючи на те, що гонка є нескінченною і зупиняється тільки коли машина потрапить у перешкоду або закінчиться бензин, дорога є рухомою. Тобто автомобіль може переміщатися вліво або вправо, а ілюзію руху прямо створює дорога.

    Кидаємо спрайт із дорогою на ігрову сцену та підганяємо за розмірами камери.

    Потім додаємо як дочірні об'єкти всередину дороги 4 блоки з перешкодами, паливний бак і не забуваємо додати до них Box Collider 2D. Ще треба відзначити Is Triger для перетину з автомобілем.

    Тепер створюємо скрипт moveroad.cs та вішаємо його на нашу дорогу.

    Додаємо до нього наступний код:

    Using UnityEngine; використовуючи System.Collections; використовуючи System.Collections.Generic; using System.Runtime.Serialization.Formatters.Binary; using System.IO; public class moveroad: MonoBehaviour ( public GUIStyle mystyle;//створення стилю int f,fuelst; float score=0,speed=-0.2f,data,fuelpos;// змінні для зберігання відстані, швидкості та рекорду public GameObject block;/// ігровий об'єкт для розміщення блоку public GameObject block1; public GameObject block2; public GameObject block3; public GameObject fuel; bool turbotriger = false; void Start () (StreamReader = float.Parse(scoredata.ReadLine ()); // читання з файлу інформації про рекорд scoredata.Close (); ) void Update () (transform. дороги із заданою вище швидкістю score = score + (speed*-10); // Підрахунок відстані if (transform.position.y< -19f) // если дорога уходит за пределы камеры то она "теле портируется" вверх { transform.position=new Vector3(0f,33.4f,0f);//новая позиция дороги block.transform.position=new Vector3(10.15f,block.transform.position.y,block.transform.position.z); block1.transform.position=new Vector3(8.42f,block1.transform.position.y,block1.transform.position.z); block2.transform.position=new Vector3(6.62f,block2.transform.position.y,block2.transform.position.z); block3.transform.position=new Vector3(4.95f,block3.transform.position.y,block3.transform.position.z); fuel.transform.position=new Vector3(11.86f,fuel.transform.position.y,fuel.transform.position.z); //скрытие за пределы камеры всех препятствий(блоков) f = Random.Range (0, 5);//случайное появление на дороге 1-го из 4-х блоков или канистры с бензином switch (f) { case 0:block.transform.position=new Vector3(2.40f,block.transform.position.y,block.transform.position.z); break; case 1:block1.transform.position=new Vector3(0.90f,block1.transform.position.y,block1.transform.position.z); break; case 2:block2.transform.position=new Vector3(-0.80f,block2.transform.position.y,block2.transform.position.z); break; case 3:block3.transform.position=new Vector3(-2.35f,block3.transform.position.y,block3.transform.position.z); break; case 4: fuelst=Random.Range(0,4); if(fuelst==0){fuelpos=2.40f;} if(fuelst==1){fuelpos=0.90f;} if(fuelst==2){fuelpos=-0.80f;} if(fuelst==3){fuelpos=-2.35f;} fuel.transform.position=new Vector3(fuelpos,fuel.transform.position.y,fuel.transform.position.z); break; } if (score>data)// якщо поточна пройдена відстань перевищує те, що записано у файлі рекорду, то йде оновлення даних ( StreamWriter scoredata=new StreamWriter(Application.persistentDataPath + "/score.gd");// створюємо файлову змінну для зберігання пройденої відстані scoredataW. (score); // записуємо нове значення у файл scoredata.Close (); f), "Distance(m): " + score, mystyle); // Створюємо вікно для підрахунку відстані ) )

    Повинно вийти приблизно так. Якщо все так залишити то після того, як дорога пройде до кінця, то залишатиметься порожній простір і так буде по колу, дорога зникатиме.

    Щоб вирішити цю проблему, треба створити дублікат вже готової дороги і трохи змінити скрипт.

    Повинно вийти так.

    2. Автомобіль:

    Кидаємо спрайт автомобіля на сцену та встановлюємо його у будь-яке місце на дорозі. Потім створюємо скрипт carcontroller.cs та вішаємо його на автомобіль.

    Вміст carcontroller.cs:

    Using UnityEngine; використовуючи System.Collections; using UnityStandardAssets.CrossPlatformInput; public class carconroller: MonoBehaviour ( void Start () ( ) public void Update () ( if (transform.rotation.z !=0) //перевірка зіткнення колайдера автомобіля та перешкоди, при зіткненні відбувається завантаження меню ( Application.LoadLevel (0) ; ) ) ) public void OnGUI() ( if (GUI.RepeatButton (new Rect (Screen.width*0.1f, Screen.height*0.9f, Screen.width*0.2f, Screen.height*0.08f), "L ")) //створюємо кнопку для руху вліво ( if (transform.position.x > -2.4f) ( transform.Translate (new Vector3 (-0.05f, 0f, 0f))); ) ) if (GUI.RepeatButton (new Rect (Screen.width*0.7f, Screen.height*0.9f, Screen.width*0.2f, Screen.height*0.08f), "R")) // Створюємо кнопку для руху вправо (if (transform.position). x< 2.4f) { transform.Translate (new Vector3 (0.05f, 0f, 0f)); } } } }
    Тепер автомобіль може рухатися.

    3.Шкала палива:

    Для створення шкали знадобилося 2 спрайти однакових розмірів, але різних кольорів (червоний, зелений). І зробити один із них дочірнім (зелений).

    Using UnityEngine; використовуючи System.Collections; public class fuelscript: MonoBehaviour ( public GameObject fuelall; float mytimer=100f;// завдання плаваючого числа // Use this for initialization void Start () ( ) void Update () ( mytimer = 100f; mytimer -= Time.deltaTime;/// зміни числа з часом if (mytimer/mytimer==1f) //перевірка на період часу в 1 секунду ( fuelall.transform.position=new Vector3(fuelall.transform.position.x-0.0011f,fuelall.transform.position). y,fuelall.transform.position.z), fuelall.transform.localScale = new Vector3(fuelall.transform.localScale.x-0.001f, 1, 1); шкали ) if (fuelall.transform.localScale.x< 0) //если шкала исчезла то загрузка идет загрузка главного меню { Application.LoadLevel(0); } } }

    Дорога у мене це road183 та її дублікат road183(1). У її дочірній об'єкт fueltrack потрібно додати скрипт для виявлення перетину з автомобілем та заповнення палива.

    Створюємо скрипт triger.cs і вішаємо його на fueltrack обох дорогах і відзначаємо як Is Triger. Код:

    Using UnityEngine; використовуючи System.Collections; public class triger: MonoBehaviour ( public GameObject fuel; col.gameObject.name == "playercar") //перевірка перетину автомобіля та об'єкта fuel ( fuel.transform.position=new Vector3(0,fuel.transform.position.y,fuel.transform.position.z); fuel. transform.localScale = new Vector3(1, 1, 1); // відновлення в об'єкта fuel стандартних значень ) ) )

    Підсумок

    У момент випуску гри на Google Playя особливо не займався її просуванням та й само собою завантажень не набралося.

    За відсутності професійного художника, з іконкою довелося працювати самостійно:

    Поділіться з друзями або збережіть для себе:

    Завантаження...