SkyRiver Forum
http://skyriver.ru/forum/

Mechcraft
http://skyriver.ru/forum/viewtopic.php?f=26&t=3892
Страница 1 из 1

Автор:  Krogoth [ Сб 1 янв 2011 4:10 ]
Заголовок сообщения:  Mechcraft

Mechcraft - это МехоRTS/Меходота на спрайтах. Скорее всего, это будет что-то среднее. Почему так, изложу свои мысли в тезисах:
- в игре будет много микро;
- все детали на локации я постараюсь сделать полезными, например, за ящиками можно будет укрываться, регулируя высоту, как-нибудь можно будет использовать всякие антенны, тарелки, это я придумаю;
- много внимания будет уделено каждому механоиду, каждый будет индивидуален в своем развитии; соответственно опытным механоидом придется дорожить;
- число механоидов на локации = const, меняться будет только число глайдеров, сами глайдеры и их снаряжение;
- на локации будет 3-4 команды, во владении изначально где-то 10 механоидов;
- цель каждой команды - подавить остальные, т.е. собрать в своем составе всех-всех механоидов; механоиды нужно выбивать из глайдеров и быстренько поднимать, пока не подобрали свои или кто не украл;
- должна быть очень хорошая система повреждений, правда, я не знаю, как это визуализировать на спрайтах.
Все это я буду делать почти сам, потому что детали концепции не известны даже мне. Самое сложное будет создать хорошо детализированную продуманную локацию. Для всего этого понадобятся хорошие тестеры, которые будут объективно говорить, насколько уныло или клево все то, что у меня будет получаться.

Автор:  Krogoth [ Пн 3 янв 2011 5:17 ]
Заголовок сообщения: 

В общем, вот жутко информативный скриншот:
Изображение
Здесь мы видим, что у меня большие проблемы с моделькой для снаряда, спрайтом для взрыва снаряда и локацией. Мне бы текстурку для плоского ландшафта. :/

Добавлено спустя 2 часа 17 минут 14 секунд:

Уже даже можно поклацать.
Альфо-версио 1.
На размеры файла не смотрите - это все фигня, еще рано что-то оптимизировать. Стрельбу, как на картинке, я убрал, ибо кривая. Зато можно:
- выделять (даже SHIFT работает);
- перемещать (правый клик);
- поворачивать (клавиша R + левый клик);
- клавиша S - "стоп".
Ясное дело, что пока что это все фигня, но то, что сейчас - оно как?

Автор:  Razum [ Пн 3 янв 2011 7:01 ]
Заголовок сообщения: 

На гле или директе? Как нажатия клавиш обрабатываются?

Автор:  Frozen_Light [ Пн 3 янв 2011 10:47 ]
Заголовок сообщения: 

Мм...не запустилось. Нужны какие-то библиотеки?

Автор:  Властелин пламени [ Пн 3 янв 2011 13:49 ]
Заголовок сообщения: 

У меня запустилось.
А что, очень даже ничего выходит.

Автор:  Krogoth [ Пн 3 янв 2011 17:00 ]
Заголовок сообщения: 

Razum писал(а):
На гле или директе?
Гла.
Razum писал(а):
Как нажатия клавиш обрабатываются?
Винда сообщает в процедуру.
Frozen_Light писал(а):
Нужны какие-то библиотеки?
OpenGL32, glu32, glaux. (Первые 2 обычно есть, 3-я в архиве)

Автор:  Razum [ Пн 3 янв 2011 17:34 ]
Заголовок сообщения: 

Цитата:
Винда сообщает в процедуру.

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

Автор:  Krogoth [ Пн 3 янв 2011 17:42 ]
Заголовок сообщения: 

Не, вроде реагируют.
Вот кусок кода:
Код:
LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    switch (uMsg)
   {
        case WM_PAINT:
            BeginPaint(hWnd, &ps);
            EndPaint(hWnd, &ps);
            return 0;
      case WM_MOUSEMOVE:
      {
            //lParam:
            //(0,0)     (1,0)
            //
            //
            //(0,1)     (1,1)
         cursor.X = 1 / GLfloat(WinRect.Height) * (2 * GLfloat(LOWORD(lParam)) - WinRect.Width);
         cursor.Y = 1 - 2 * (GLfloat(HIWORD(lParam)) / WinRect.Height);
         return 0;
      }
        case WM_LBUTTONDOWN:
            //Selection
            cursor.Selection = true;
            cursor.Xp = cursor.X;
            cursor.Yp = cursor.Y;
            return 0;
        case WM_LBUTTONUP:
            if (Command == move)
            {
                PickUnit
                if (u.Selected)
                {
                    u.CurrentOrder.Id = 1;
                    u.CurrentOrder.X  = cursor.X;
                    u.CurrentOrder.Y  = cursor.Y;
                }
                Command = nothing;
            }
            else
            if (Command == rotate)
            {
                PickUnit
                if (u.Selected)
                {
                    u.CurrentOrder.Id = 2;
                    u.CurrentOrder.X  = cursor.X;
                    u.CurrentOrder.Y  = cursor.Y;
                }
                Command = nothing;
            }
            else
            {
            //Selection
            cursor.Selection = false;
            if (cursor.X == cursor.Xp && cursor.Y == cursor.Yp)
            {
                if (!Shift)
                PickUnit
                u.Selected = false;
                PickUnit
                if (GetDistance(cursor.X, cursor.Y, u.X, u.Y) < u.RealSize)
                {
                    u.Selected = true;
                    break;
                }
                return 0;
            }
            return 0;
        case WM_RBUTTONDOWN:
            PickUnit
            if (u.Selected)
            {
                u.CurrentOrder.Id = 1;
                u.CurrentOrder.X  = cursor.X;
                u.CurrentOrder.Y  = cursor.Y;
            }
            return 0;
        case WM_KEYDOWN:
            //VK_0 - VK_9 = 0x30 - 0x39
            //VK_A - VK_Z = 0x41 - 0x5A
            if (wParam == VK_SHIFT)
                Shift = true;
//            if (wParam == 0x41)
//                PickUnit
//                if (u.Selected)
//                    u.Fire();
            if (wParam == 0x4D)
                if (Command == move)
                    Command = nothing;
                else
                    Command = move;
            if (wParam == 0x52)
                if (Command == rotate)
                    Command = nothing;
                else
                    Command = rotate;
            if (wParam == 0x53)
                PickUnit
                if (u.Selected)
                    u.CurrentOrder.Id = 0;
            if (wParam == VK_ESCAPE)
                DeInit();
            return 0;
        case WM_KEYUP:
            if (wParam == VK_SHIFT)
                Shift = false;
            return 0;
        case WM_DESTROY:
            DeInit();
            return 0;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

Автор:  Razum [ Пн 3 янв 2011 17:44 ]
Заголовок сообщения: 

Ага, это вендовая, знач, обработка, а не гловская.

Автор:  Krogoth [ Пн 3 янв 2011 17:52 ]
Заголовок сообщения: 

Ну, да. Да я так понял, что ГЛовское лучше по минимуму юзать вообще, если только дело не доходит до велосипедостроительства.

Добавлено спустя 3 минуты 27 секунд:

Razum писал(а):
Ага, это вендовая, знач, обработка, а не гловская.
У меня стоит CodeBlocks. Там при создании Win-приложения автоматически прописывается код инициализации окошка со всем необходимым; для OpenGL-приложения - инициализация OpenGL; для Ogre походу тоже что-то. Просто я не знаю, в чем ты обычно пишешь.

Автор:  Razum [ Пн 3 янв 2011 18:19 ]
Заголовок сообщения: 

На визуалке.

Автор:  Krogoth [ Пн 3 янв 2011 18:44 ]
Заголовок сообщения: 

А-а. Но CodeBlocks и поудобнее будет. Раза в 4.

Я щас щиты буду клепать. ^_^

Автор:  Дрон [ Чт 6 янв 2011 20:39 ]
Заголовок сообщения: 

А что, по моему понт. Только при запуске вместо текстур скарабеев фигня какая-то. Иногда при повороте такое тоже происходит.

А это вообще какое кунг-фу?
И должно ли все быть настолько сурово построено? В плане чертовой кучи ифов.

Автор:  Krogoth [ Пт 7 янв 2011 0:03 ]
Заголовок сообщения: 

Сейчас все построено на чертовой куче классов, потому что что-то меня стали стремать всякие наследования.

Зато насладиться успел на все 100: написал какой-то код, например, за два часа, а дебаггю - четыре. :D
Причем еще один глюк найду - и выложу.

Про глюк с текстурами я хз, у себя ни разу не наблюдал.

Добавлено спустя 52 секунды:

Дрон писал(а):
В плане чертовой кучи ифов.
Ифы будут, когда я буду маршруты рассчитывать.)

Автор:  Дрон [ Пт 7 янв 2011 0:12 ]
Заголовок сообщения: 

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

Автор:  Krogoth [ Пт 7 янв 2011 4:02 ]
Заголовок сообщения: 

Дрон писал(а):
Тееекс, а можно в двух словах все что ты используешь для создания игры и что это самое из себя представляет.
Для создания игры я использую классы: Мир <>-> Юнит <>-> Приказ, ну, т. е. не чертова куча, конечно, но в каждом отдельно описаны методы, которые их реализуют. И на счетчике я обновляю мир, мир обновляет юниты, юниты обновляют свои списки приказов. Рисую при помощи OpenGL.

Добавлено спустя 3 часа 35 минут 23 секунды:

Альфо-версио II.
Сделал я мало:
- через Shift ставим приказ в очередь и смотрим маршруты;
- Caps-Lock'ом можно зафиксировать видимость маршрутов;
- разворот я пока убрал.
Из очевидных минусов пока самый большой в том, что глайдеры прибывают не совсем туда, куда надо, потому что они неправильно ориентируются на занос, а чтобы они ориентировались правильно, мне нужно сделать, чтобы они умели им пользоваться. Т. е. выглядеть это будет так: перед прибытием после поворота глайдер разворачивается в том же направлении, чтобы погасить инерцию. Но пока, я думаю, это не так принципиально.
(!) В архиве лежат 2 экзехи: первая - это плавная графика маршрутов, вторая - резкая. Поделитесь мнением, что лучше.

Добавлено спустя 2 минуты 47 секунд:

И да, может, не надо выделять цветом маршрут выделенного юнита?

Автор:  Дрон [ Пт 7 янв 2011 19:19 ]
Заголовок сообщения: 

Krogoth писал(а):
В архиве лежат 2 экзехи: первая - это плавная графика маршрутов, вторая - резкая. Поделитесь мнением, что лучше.

Что-то я различий не увидел. По маршрутам ездят? Ездят.
Я думаю что не надо выделять маршрут не выбранного юнита. Можно потом сделать так, чтобы было видно общий маршрут выделенной группы, но это уже в потом.

Автор:  WaterMan [ Пт 7 янв 2011 23:55 ]
Заголовок сообщения: 

Можно вопрос? А это так и задумано, что оно не будет работать на Windows 7 x64? (Ну, в смысле, может используемые библиотеки не поддерживают 64-версии, или >1-ядерные процессы)
Ну как всё происходит: двойной клик, экран становится чёрным (за исключением полоски меню пуск внизу экрана), и на этом фоне тут же идёт "прекращена работа программы Mechcraft1(2).exe"

Автор:  Krogoth [ Сб 8 янв 2011 0:49 ]
Заголовок сообщения: 

Ну, видимо мне придется компилировать для семерки отдельно. :/

Автор:  Razum [ Сб 8 янв 2011 2:03 ]
Заголовок сообщения: 

Скорее всего, дело в х64. Может, древние библиотеки юзаешь? Типа глаукса.

Автор:  Krogoth [ Сб 8 янв 2011 2:29 ]
Заголовок сообщения: 

Э-э-э-э-э...

Добавлено спустя 37 секунд:

А чо есть самое новое и самое классное?

Автор:  MIRAND [ Пн 17 янв 2011 18:13 ]
Заголовок сообщения: 

не скорее всего он так и есть) у меня 4 ядра у эвм) но норм гоняем)
кстати у меня у 1 нельзя скачать вторую версию?

Автор:  Krogoth [ Ср 26 янв 2011 16:05 ]
Заголовок сообщения: 

Не, я вот тоже за не своим компом скачать хотел - фик.)

Автор:  SAPZER [ Чт 27 янв 2011 1:03 ]
Заголовок сообщения: 

Не получается на 7ке запустить. Либо "прекращена работа программы" либо (в режиме совместимости) просто белый экран... Может я не туда тыкаю?

Автор:  Krogoth [ Сб 29 янв 2011 15:28 ]
Заголовок сообщения: 

Не, все правильно. Просто я заюзал старую библиотеку. В общем, как переделаю под новую, выложу и все будет ок.

Автор:  MIRAND [ Сб 29 янв 2011 20:43 ]
Заголовок сообщения: 

кхм.. а если все картинки в длл запихнуть и ужать?

Автор:  Krogoth [ Сб 29 янв 2011 20:55 ]
Заголовок сообщения: 

Все будет.

Автор:  MIRAND [ Сб 29 янв 2011 21:00 ]
Заголовок сообщения: 

давай я те с ландшафтом помогу) текстурку травки там норм) плюс идея насчет ветра е)

Страница 1 из 1 Часовой пояс: UTC + 4 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/