Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2010, 19:01   #1
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
Сообщение [C#] Создаю игру на XNA Game Studio 3.1. Теория создания карт, редактора и другое

Игра 2D.
Вид сверху, но тут скорее от текстур зависит, откуда вид будет =).
Бегать можно во все стороны (Лево, право, низ, верх).
Жанр, пока остановлюсь на РПГ, а там как слепится =)
На момент создания сообщения пытаюсь написать класс, который будет содержать в себе всю инфу для загрузки уровня на экран. Как карты в стратегиях например Starcraft. Вот дело в том, что пока я не особо представляю как их хранить. В виде чего, чтобы не зависеть от версии игры (Прощай сериализация с помощью BinnaryFormatter). Опять же пока думаю насчёт XML (с которым на вы).

Делаю игру на XNA Game Studio 4.0. Делаю карту, ну типа как в стратегиях. Вот хочу сделать так:
Создаю класс, состоящий из одного огромного прямоугольника и в нём массив прямоугольников представляющих из себя ячейки для текстур (у каждого свои координаты естественно). Вот когда этот огромный прямоугольник будет сдвигаться в сторону и автоматом двигать за собой все эти ячейки для текстур (например цикл для всех прямоугольников с текстурами в методе ScrollMap(int dx, int dy)). Это нужно для скроллинга уровня, чтобы как бы герой по нему бегал. Размер каждой текстуры думаю будет 25х25, для большей детализации, чтоли (честно сам не знаю зачем именно такой размер, кажется, что вариантов для художеств больше будет, чем например с 50х50). Плюс ко всему раз уж каждый прямоугольник тоже получается размером 25х25, то они будут участвовать в системе столкновений. Как бы размер блокиратора путей.
Вот думаю как лучше сделать это вообще и как хранить инфу о текстурах. Пока сделал так:
List<Texture2D> listTextures = new List<Texture2D>();

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

Мне нужно сделать не убогую игру, где 3 объекта на всю карту, а чтобы там были как минимум:
1) Блокираторы путей, для воздушных юнитов и для наземных (тоже прямоугольники размером 25х25). Кстати прямоугольники потому, что у них есть метод проверяющий не пересеклись ли они, а это удобно, типа нарвался на препятствие, туда идти не получится.
2) Координаты расположения объектов, юнитов, может каких декораций.
Ну тут придумается по ходу дела, что там ещё будет.
Вообще я на верном пути? Что можете посоветовать. Какой подход лучше выбрать?

Последний раз редактировалось Casper-SC; 06.09.2010 в 18:45. Причина: Поправил заголовок
Casper-SC вне форума Ответить с цитированием
Старый 05.09.2010, 19:10   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Пиши в аську поговорим на эту тему: 301 040 873
А по теме: не забывай, что проверять столкновения и тд, и отрисовывать текстуры всего мира не стоит(ибо если большой уровень то тяжко...).
techdays.ru посмотри XNA для начинающих. (2D .....
Много интересного рассказывается...
dampirik вне форума Ответить с цитированием
Старый 06.09.2010, 18:44   #3
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Все видео пересмотрел. Поставил себе XNA Game Studio 3.1 и VS 2008 Express. Всё теперь мне доступно много примеров.

Кстати народ нашёл только что сайт с текстурами, думаю будет многим полезен. Я что-то даже не предполагал, что такие существуют
http://www.cgtextures.com/
Casper-SC вне форума Ответить с цитированием
Старый 06.09.2010, 19:27   #4
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

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

И как вы все-таки организовали хранение текстур?)
Collision Test реализовали?)
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 06.09.2010, 21:08   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Насчет сайтов с текстурами - была тема про такое:
http://programmersforum.ru/showthread.php?t=44291
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 06.09.2010, 21:18   #6
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

Пиши 41911603\ноль\
Есть заготовка игры с видом сверху\сбоку.
ZaRDaK вне форума Ответить с цитированием
Старый 06.09.2010, 22:31   #7
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Ну хранением вообще всех ресурсов в игре как я понял занимается ContentManager.
Пока я думаю сделать так: Создаю класс клетки из которых будет состоять уровень. В нём будут поля: является ли клетка блокиратором пути для наземных единиц, для воздушных, bool видима ли она на экране. Так как уровень будет прокручиваться, ну как бы скролл, герой бегает, а уровень прокручивается. Так вот рисоваться будут только те клетки, которые считаются видимыми. Как сообщать им, что они видимы, мне предстоит ещё придумать.

А проверка на то, пересекаются ли прямоугольники делается так:
Код:
    public static class TestCollisions
    {
        public static void DrawResult(SpriteBatch spriteBatch, SpriteFont font)
        {
            Rectangle rectFirst = new Rectangle(0, 0, 50, 50);
            Rectangle rectSecond = new Rectangle(18, 49, 50, 50);
            Boolean result;
            rectFirst.Intersects(ref rectSecond, out result);

            spriteBatch.DrawString(font, result.ToString(), new Vector2(20, 20), Color.White);
        }
    }
И в методе Draw() основного класса игры:
Код:
            TestCollisions.DrawResult(spriteBatch, font);
Где font это SpriteFont

Тут просто указан тестовый класс, для проверки и отображения результата на экран, нужен был только в тестовых целях, а реально нужный код для проверки, этот:
Код:
            Rectangle rectFirst = new Rectangle(0, 0, 50, 50);
            Rectangle rectSecond = new Rectangle(18, 49, 50, 50);
            Boolean result;
            rectFirst.Intersects(ref rectSecond, out result);

Последний раз редактировалось Casper-SC; 06.09.2010 в 23:12.
Casper-SC вне форума Ответить с цитированием
Старый 06.09.2010, 22:47   #8
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

>> Так вот рисоваться будут только те клетки, которые считаются видимыми. Как сообщать им, что они видимы, мне предстоит ещё придумать.

Есть куча примеров, как сделать 2D камеру в XNA, не надо ничего придумывать.
ZaRDaK вне форума Ответить с цитированием
Старый 06.09.2010, 23:18   #9
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Цитата:
Сообщение от ZaRDaK Посмотреть сообщение
>> Так вот рисоваться будут только те клетки, которые считаются видимыми. Как сообщать им, что они видимы, мне предстоит ещё придумать.

Есть куча примеров, как сделать 2D камеру в XNA, не надо ничего придумывать.
Ну их ещё найти надо. Я даже сделал мини игру с 3-мя уровнями по видео, не качая исходников, но что-то не совсем понял как это перекинуть к себе. Скролл этот. Так то я его могу сделать. Тут проблемы нет. В цикле каждой клетке передаёшь на сколько надо сдвинуться. Типа этого:
Код:
foreach (Rectangle rect in rectList)
{
     rect.Offset(dx, dy);
}
А вот как узнать на экране клетка или за ним, надо подумать.
Casper-SC вне форума Ответить с цитированием
Старый 06.09.2010, 23:33   #10
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Не надо двигать никуда кучу объектов! Двигайте только камеру.
У вас есть координаты камеры, есть размеры экрана (точнее, размер зоны в охвате камеры), координаты объектов. Если объект попадает в зону охвата камеры - объект видим, если нет - то нет.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XNA Game Studio или VC++? VintProg Свободное общение 6 02.09.2010 17:50
XNA Game Studio 4.0. Проблемы с запуском. Подробности в теме... Casper-SC Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 30.08.2010 09:07
Создаю игру AndreyX Фриланс 12 06.07.2010 17:13
Изменение функций редактора карт Far Cry 2 Владислав1967 Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 25.11.2008 17:06