Перехід між рівнями, створення більшої карти - Створення 2D гри, використовуючи можливості Java

Спершу, я збільшу кулькість елементів двумірного масиву у класу GameMap, але тільки цього не достатньо, тому що виникає проблема. Карта дійсно стала більше, але виходить за межі видимості.(ст.60[3]) Тому потрібно зробити так щоб при пересуванні персонажу рухалась сама карта, а персонаж залишився на одному місті, і тим самим буде досягнена іллюзія руху персонажу.

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

Поля posY і posY як і раніше зберігають реальний стан персонажа, а posRenderX і posRenderY положення, видиме на ігровому екрані. Наступні зміни торкнуться класу Game, конкретно методу update. Для початку ми визначимо розміри, які будуть відповідати за відображення на нашому ігровому екрані - widthTile і heightTile, вони будуть зберігати значення, скільки плиток по ширині і висоті можна намалювати за раз. Поля cWidthTile і cHeightTile визначають центральне положення в нашій ігровий рамці. Поля startTileX, startTileY, endTileX, endTileY визначають координати, які потрібно взяти з об'єкта карти і намалювати на екрані. Змінні offsetX і offsetY це поправка, яка виникає через нерівномірність переміщення персонажа, тобто швидкість руху персонажа не дорівнює розміру плитки, тому залишається залишок, на який потрібно зрушити карту для плавного руху. І нарешті, movePlayerX і movePlayerY визначають потрібно рухати карту або самого персонажа. Якщо персонаж підійшов надто близько до краю, то картка не зміщується, а пересувається сам персонаж, якщо ж він знаходиться в центрі, то рухаємо саму карту.

До методу start додаємо:

//устанавливаем позицию

    1. player. posRenderX =BaseTile. SIZE; 2. player. posRenderY =BaseTile. SIZE;

При компіляції ми отримаємо лабіринт, в якому буде рухатися наш персонаж. При знаходженні персонажа в центрі змінюється позиція карти, при наближенні їм краю, він переміщається сам. Працювати з дуже великим масивом незручно, та й справа витратна в плані ресурсів. Але є рішення - створити дві карти і об'єднати їх дверима. Свого роду магічні портали, перетинаючи які, персонаж виявляється на іншій карті. Інакше кажучи, ми зробимо, так що б персонаж, встаючи на певну плитку, переміщався на іншу карту. Для реалізації цього ми зробимо з GemaMap абстрактний клас, і визначимо від нього ще два Map1 і Map2.

Звичайно, карта 2 виглядає маленькою кімнатою, але нам для прикладу цього буде достатньо. Далі в класі BaseTile ми визначимо поле door - це числове поле які буде зберігати номер карти, на який вона посилається, якщо "0" то це звичайна клітина. І зробимо спеціальну плитку з номером 3 і 4 - вони будуть посилатися на карти, нехай їх кольору будуть червоного кольору.

До класу Game додамо новий метод, відповідаючий за встановлення карти:

/**

    1. * Метод отвечает за установку карты. 2. * @param mapId Номер карты. 3. */ 4. public void setMap(int mapId) { 5. if(mapId == 2) { 6. map = new Map2(); 7. } else { 8. map = new Map1(); 9. }

Та додамо метод checkingChangeMap, котрий буде викликатися з початку update.

За таким принципом можна будувати багатовимірні простору і практично нічим не обмежені карти.

Похожие статьи




Перехід між рівнями, створення більшої карти - Створення 2D гри, використовуючи можливості Java

Предыдущая | Следующая