Форум Игромании

Форум Игромании (http://forum.igromania.ru/index.php)
-   Игрострой (http://forum.igromania.ru/forumdisplay.php?f=278)
-   -   Учимся делать игры (http://forum.igromania.ru/showthread.php?t=11396)

razor21 21.10.2006 21:21

Ребят, а как подключить Irrlicht к MS Visual Studio .NET 2003?

BestPlay 22.10.2006 22:48

Люди, подскажите плиз какую-нибудь прогу, где можно делать простенькие игры, но чтобы было ну очень легко освоить

pokibor 22.10.2006 23:59

Цитата:

Сообщение от razor21 (Сообщение 1122866)
Ребят, а как подключить Irrlicht к MS Visual Studio .NET 2003?

Копируешь все из папок lib и include в соответствующие папки в дирректории <дирретория Visual Studio>\vc7. Кроме того, кидаешь DLL к экзешнику каждого проекта, юзающего Irrlicht.
Цитата:

Сообщение от BestPlay (Сообщение 1127165)
Люди, подскажите плиз какую-нибудь прогу, где можно делать простенькие игры, но чтобы было ну очень легко освоить

Редактор твоей любимой игры. Проще не найдешь. Мне, например, очень нравится редактор StarCraft. Вроде даже в WarCraft 3 он намного мощнее, а вот поди ж ты...

STOLEN 23.10.2006 00:17

Цитата:

Люди, подскажите плиз какую-нибудь прогу, где можно делать простенькие игры, но чтобы было ну очень легко освоить
Если ты хочешь сделать ну очень простенькую игру, тогда можешь попробовать Game Maker. А вообще лучший вариан конечно у Pokibor

Nord 24.10.2006 18:16

Цитата:

Сообщение от BestPlay (Сообщение 1127165)
Люди, подскажите плиз какую-нибудь прогу, где можно делать простенькие игры, но чтобы было ну очень легко освоить

Во первых, что ты вкладываешь в понятие "простенькие игры"?

Вообще, всё зависит от тебя, если ты знаешь основы базовых языков типа Pascal или Basic, то тебе не сложно будет разобраться в каком-нибудь Blitz3D. Все программы, в которых программирование сведено к минимуму - это просто движок и редактор левелов, но и там тебе надо будет писать скрипты. На счет Game Maker - не пробывал, но говорят очень простой, попробуй, потом расскажешь :)).

razor21 24.10.2006 18:26

Цитата:

Сообщение от Nord (Сообщение 1131163)
Вообще, всё зависит от тебя, если ты знаешь основы базовых языков типа Pascal или Basic, то тебе не сложно будет разобраться в каком-нибудь Blitz3D.

Зачем учить basic для разработки игр? Все равно ничего толкового не написать! Надо учить С++ и работать с такими движками, как irrlicht (сейчас сам его изучаю), или неплохой 2D жвижок Haaf's Game Engine 1.6 (HGE). Вот :)

pokibor 24.10.2006 19:03

Цитата:

Сообщение от razor21 (Сообщение 1131192)
Зачем учить basic для разработки игр? Все равно ничего толкового не написать! Надо учить С++ и работать с такими движками, как irrlicht (сейчас сам его изучаю), или неплохой 2D жвижок Haaf's Game Engine 1.6 (HGE). Вот :)

Верно. Про Blitz мое (и не только мое) отношение выражено здесь (отобраны отдельные посты):
http://forum.igromania.ru/showpost.p...6&postcount=32
http://forum.igromania.ru/showpost.p...5&postcount=45
http://forum.igromania.ru/showpost.p...9&postcount=86
http://forum.igromania.ru/showpost.p...7&postcount=87
http://forum.igromania.ru/showpost.p...3&postcount=88

razor21 24.10.2006 20:04

У меня вопрос к тебе, как к хорошему знатоку irrlicht'a:
при компиляции моего первого проекта у меня возникает ошибка, точнее при запуске: "Unable to start program 'c:/_______/razor21/мои док./vis studio proj/irr_hello/irr_hello.exe' - Не удается найти указанный файл!" Как мне ее решить?
Вот код, который я написал:
Код:

#include "irrlicht.h"
using namespace irr;
using namespace core;
using namespace video;
using namespace scene;
using namespace io;
using namespace gui;
#pragma comment(lib, "C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/lib/Irrlicht.lib"

int main()
{  IrrlichtDevice *device = createDevice(EDT_SOFTWARE, dimention2d(512, 384), 16, false, false, false, 0);
  device->setwindowcaption(L"Hello, World! Irrlicht DEMO";
  IVideDriver *driver = device->getVideoDriver();
  ISceneManager *smgr = device->getSceneManager();
  IGUIEnvironment *guienv = device->getGUIEnvironment();
  guienv->addStaticText(L"Hello, World!", rect(10, 10, 200, 22), true);
}

P.S.
Заголовочный файл irrlicht.h тоже подключить не забыл.

pokibor 24.10.2006 21:06

Больше похоже на то, что проблема не в irrlicht, а в файловой системе - компилятор, по-видимому, не может найти только что скомпиленый экзешник для запуска. попробуй сохранять проект в какой-нибудь более нормальной папке, а не в "Моих документах", причем без русских букв. Я вообще обычно стараюсь делать имена папок только английскими, причем даже без пробелов. Также не забудь, что в папке с экзешником должны лежать Irrlicht.dll и (если проект .NET) Irrlicht.NET.dll. Также может быть, что у тебя как-то не так настроен компилятор (обычно он сохраняет екзешник в папке Debug либо Release в зависимости от режима).
Кстати, к lib-файлу в #pragma вовсе не обязательно указывать полный путь, если он находится в папке lib компилятора, хватит и просто имени файла.
И как ты себе представляешь работу этой программы? У тебя же в ней цикла нет, она у тебя сразу завершит работу! Добавь-ка
Код:

        while(device->run())
        {
                driver->beginScene(true, true, SColor(255,100,101,140));
                smgr->drawAll();
                guienv->drawAll();
                driver->endScene();
        }
        device->drop();

и в строке device->setwindowcaption(L"Hello, World! Irrlicht DEMO"; у тебя скобочка закрывающая нет стоит...

Pilate 24.10.2006 22:22

А вообще как, в иррлихте на сколько тяжело разобраться (если не учитывать знание C++)?

pokibor 24.10.2006 22:52

Цитата:

Сообщение от @nton_Kek$ (Сообщение 1132106)
А вообще как, в иррлихте на сколько тяжело разобраться (если не учитывать знание C++)?

Кому как. Имхо, по примерам и хелпу - элементарно. Хотя есть несколько неочевидных вещей, но о них и спросить можно. Например, почему-то по умолчанию альфа-канал в материале считает значения < 0.5 равными нулю. Зачем это сделано, для меня осталось загадкой, но для устранения нужно поменять значение переменной материала MaterialTypeParam на ненулевое (насколько я понял, на какое, роли не играет. Хотя тут я могу ошибаться. Но значение 0.01 работает 100%). Впрочем, о таких вещах обычно написано в хелпе, просто внимательно читать его нужно. Я вот невнимательно читал, за что и поплатился нервными клетками :(
А вот чтобы модифицировать движок под свои нужды, нужны уже знания поглубже. Впрочем, такая необходимость бывает нечасто. Мне пока что было необходимо лезть в движок всего два раза - один раз посмотреть, в каком порядке матрицы перемножаются для вычисления поворота, и один - исправить ошибку в классе системы частиц и дописать еще пару эмитеров.

Nord 25.10.2006 18:37

Цитата:

Сообщение от razor21 (Сообщение 1131192)
Зачем учить basic для разработки игр? Все равно ничего толкового не написать! Надо учить С++ и работать с такими движками, как irrlicht (сейчас сам его изучаю), или неплохой 2D жвижок Haaf's Game Engine 1.6 (HGE). Вот :)

Да я ничего против C++ не имею! Я только за, т.к. сам учусь на программиста и понимаю все преимущества языка си . Но BestPlay сказал, что ему нужно делать простенькие игры, кстати, я не сказал учить бейсик, я предложил блитц как вариант, если он упешно изучил бейсик в школе. Как я понял ему надо "быстро и просто", вы представляете сколько времени и сил он потратит на изучение си?

Pilate 26.10.2006 08:27

а насколько движок игровой (иррлихт) упрощает разработку игры?

pokibor 26.10.2006 09:04

Цитата:

Сообщение от @nton_Kek$ (Сообщение 1135482)
а насколько движок игровой (иррлихт) упрощает разработку игры?

Сильно. Во-первых, его изучить проще, чем DirectX. Во-вторых, код с использованием Irrlicht писать быстрее, чем код с использованием непосредственно DirectX. В-третьих, многие наиболее употребляемые фишки в Irrlicht уже реализованы (например, генерация земли по карте высот, системы частиц и т.п.). В-четвертых, Irrlicht может использовать как OpenGL, так и DirectX, а может и вообще в Software варианте работать. При этом для переключения тебе достаточно изменить всего одно значение, ну и шейдеры нужные грузить. Также нужно отметить, что в Irrlicht реализована загрузка многих популярных типов файлов (как 3d-моделей, так и текстур), тогда как в DirectX, например, из 3D-моделей по-умолчанию только x-файлы грузит. А из текстур Irrlicht, например, даже фотошоповские psd грузить умеет.
В остальном Irrlicht можно считать надстройкой над OpenGL/DirectX, объединяющей их разрозненную структуру с длинными именами в удобные классы.

Pilate 26.10.2006 12:49

тоесть, если я скачал иррлихт, то директИКС качать не надо?

pokibor 26.10.2006 15:46

Цитата:

Сообщение от @nton_Kek$ (Сообщение 1135890)
тоесть, если я скачал иррлихт, то директИКС качать не надо?

Нет, если ты не будешь перекомпиливать исходники Irrlicht. Впрочем, DirectX SDK тебе все равно может понадобится, так как Irrlicht - чисто графический движок. В него не входят компоненты работы с сетью и со звуком. Впрочем, Direct Sound есть очень простая вещь. Про DirectPlay практически ничего сказать не могу - мне нравится Winsock, и я юзаю его.
P.S. Кстати, я надеюсь, ты выше имел ввиду DirectX SDK, а не собственно библиотеку?

razor21 27.10.2006 12:42

У меня назрели некоторые вопросы по Irrlicht'у:

1. Можно ли менять цвет кнопок, edit box'ов, label'ов, заднего фона? Как?
2. Как поменять размер шрифта?
3. Поддерживает ли Irrlicht русские буквы?
4. Как работать с таймером? т.е. как его подключить к проекту и примерно покажите синтаксис такого примера: каждую секунду значение label'а возрастает на 1.
Подскажите....

pokibor 27.10.2006 13:49

Цитата:

Сообщение от razor21 (Сообщение 1138506)
1. Можно ли менять цвет кнопок, edit box'ов, label'ов, заднего фона? Как?

И да, и нет. Меняется как бы общий цвет для каждого элемента управления, т.е. как бы каждому элементу задается общий оттенок. Это делается так (пример из кода моей игры, ALPHA - прозрачность интерфейса):
Код:

        #define ALPHA 255
        for (s32 i=0; i<EGDC_COUNT ; ++i)
        {
                SColor col = env->getSkin()->getColor((EGUI_DEFAULT_COLOR)i);
                col.setAlpha(ALPHA);
                env->getSkin()->setColor((EGUI_DEFAULT_COLOR)i, col);
        }
        env->getSkin()->setColor(EGDC_3D_FACE, SColor(ALPHA,0,128,0));
        env->getSkin()->setColor(EGDC_3D_SHADOW, SColor(ALPHA,0,128,0));
        env->getSkin()->setColor(EGDC_HIGH_LIGHT , SColor(ALPHA,0,128,0));
        env->getSkin()->setColor(EGDC_3D_HIGH_LIGHT, SColor(ALPHA,128,160,128));
        env->getSkin()->setColor(EGDC_WINDOW, SColor(ALPHA,128,160,128));
        #undef ALPHA

В общем, за визуальный вид интерфейса отвечает IGUISkin. У него много интересных методов... Смотри хелп.
Цитата:

Сообщение от razor21 (Сообщение 1138506)
2. Как поменять размер шрифта?

Где? Если в интерфейсе, то шрифт меняется так:
Код:

env->getSkin()->setFont(IGUIFont *Font)
Создается объект с интерфейсом IGUIFont методом getFont GUIEnviroment'а. Шрифт создается из bmp-файла, и потому его размер просто так не поменяешь. Кстати, так в большинстве игр: векторных шрифтов нет, есть только растровые. Привыкай.

Цитата:

Сообщение от razor21 (Сообщение 1138506)
3. Поддерживает ли Irrlicht русские буквы?

Да, а то как бы моя игра была на русском языке. Но, во-первых, русские буквы должны быть в шрифте (а шрифт в Irrlicht берется из bmp-файла определенного формата, причем идущая с ним программа для создания этого файла IrrFontTool почему-то шрифты с кириллицей конвертирует как без кириллицы). Я обошел это так: взял моноширинный шрифт и нарисовал все вручную. Могу поделится: http://www.amais.org.ru/file/index.p...tory=Irrlicht&

Цитата:

Сообщение от razor21 (Сообщение 1138506)
4. Как работать с таймером? т.е. как его подключить к проекту и примерно покажите синтаксис такого примера: каждую секунду значение label'а возрастает на 1.
Подскажите....

Не забывай, у тебя в Irrlicht идет бесконечный цикл рендера, навыки из Borland C++ Builder'а тут абсолютно бесполезны. Ты должент каждый раз в этом цикле рендера сам проверять таймер. Время в миллисекундах, прошедшее с момента запуска программы, можно получить так:
Код:

device->getTimer()->getTime();
Если хочешь, можешь получить время с начала работы системы:
Код:

device->getTimer()->getRealTime();
Теперь об организации класса таймера. Можно, например, сделать глобальный список таймеров, каждый раз в циле пробегать его, передавая каждому время. Таймер будет сверять это время со временем своей последней активации, и, если оно больше или равно этому времени + интервал таймера, ставить его соответственно и вызывать что тебе нужно, то есть примерно так:
Код:

TTimer::TTimer() {
  next_act_time = device->getTimer()->getTime() + interval;
}
void TTimer::checkTimer(unsigned int curTime) {
  while (curTime >= next_act_time) {
    next_act_time += interval;
    OnTimer();//Процедура, срабатывающая в таймере
  }
}

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

razor21 27.10.2006 13:55

Цитата:

Сообщение от pokibor (Сообщение 1138608)
Надеюсь, понятно.

pokibor
Да, большое спасибо!

pokibor 27.10.2006 14:06

Кстати, вообще с русскими буквами в Irrlicht не все понятно. В большиснтве случаев строка для вывода имеет тип wchar_t * и можно подумать, что писать нужно в кодировке unicode. Так вот, это не так. нужно писать в обычной windows'овской кодировке, но как wchar_t. При этом компилятор жутко тупит... в общем, я пока обнаружил единственный способ писать в коде русские wchar_t-константы - писать их как массив из char и приводить ссылку на него к ссылке на wchar_t (в игре я, кстати, это не использую - у меня весь текст идет из ресурсных файлов):
В общем, пишется все так:

((wchar_t *)"Р\0у\0с\0с\0к\0о\0е\0 \0с\0л\0о\0в\0о\0\0")

То есть после каждой буквы ставится нулевой байт, потом это все трактуется как wchar_t (т.е. 2 байта на символ) - и все получется верно. Сдается мне, если разместить русские буквы в шрифте подальше, то все, может, и нормально будет, но это не факт, а так у меня все работает. И не забудь в конце ставить лишний \0, так как еще один \0 к нему добавится как конец char-строки.


Часовой пояс GMT +4, время: 10:18.

Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.