Пятница, 29 Ноября 2024, 05:15

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
HGE & Visual C++
AikidosДата: Суббота, 14 Января 2012, 15:24 | Сообщение # 21
постоянный участник
Сейчас нет на сайте
Если я не ошибаюсь, HGE перестал развиваться с 2008 года?

Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
nonameДата: Суббота, 14 Января 2012, 16:18 | Сообщение # 22
заслуженный участник
Сейчас нет на сайте
Quote (Aikidos)
Если я не ошибаюсь, HGE перестал развиваться с 2008 года?

не знаю, но похоже на то.

там, на предыдущей странице я вопрос задал. очень нужна помощь.


все правила форумной игры Дуэль Программистов
GECKДата: Суббота, 14 Января 2012, 17:20 | Сообщение # 23
заслуженный участник
Сейчас нет на сайте
Посмотрел твой проект. Подключил к проекту файлы maz_gen.h и maz_gen.cpp, потом студия сама подсказала записать #include "stdafx.h" в maz_gen.cpp. Все скомпилилось smile

На будущее - выкладывай только исходники, в архиве мусора много.


Всё гениальное просто. И хреново работает.
nonameДата: Четверг, 19 Января 2012, 15:02 | Сообщение # 24
заслуженный участник
Сейчас нет на сайте
Quote (GECK)
Подключил к проекту файлы maz_gen.h и maz_gen.cpp

как?

Quote
1>kosmobiaky.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl WorldFill(void)" (?WorldFill@@YAXXZ) в функции _WinMain@16

1>D:\my_projects\03-raise-HGE\01-Kolobok\0008\Debug\kosmobiaky.exe : fatal error LNK1120: 1 неразрешенных внешних элементов

Добавлено (14.01.2012, 17:46)
---------------------------------------------
так, вроде бы как-то это сделал. хотя сам толком не понял, что я делал.'

GECK, СПАСИБО большое))

Добавлено (16.01.2012, 16:23)
---------------------------------------------
---------------------------------------------

блукаю щазз в модулях своей многомодульной проги.

хочу понять, как делается одна штука на MS Visual C++.
а именно:

1. в функции main() объявляется двумерный массив, а затем он передаётся в качестве параметра функции, реализованной в другом модуле.

2. размеры этого массива задаются только в одном месте программы(константой, дефайнами, да чем угодно- лишь бы работало), И эти размеры доступны из любого модуля программы.

не мог ли бы кто-нить показать, как это делается, на примере с двумя модулями(основной- тот, в котором ф-ция main() И другой- в котором ф-ция, обрабатывающая массив).

Добавлено (16.01.2012, 16:24)
---------------------------------------------

Quote (noname)
в функции main() объявляется двумерный массив

а лучше- глобальное объявление, до объявления функций, в основном модуле(где main())

Добавлено (16.01.2012, 19:08)
---------------------------------------------
---------------------------------------------
вышеописанная проблема РЕШЕНА cool

Добавлено (19.01.2012, 14:56)
---------------------------------------------
---------------------------------------------
---------------------------------------------

я сделал генерёжку простого лабиринта. в отличие от старой версии "колобка", на этот раз лабиринт составляется из комнат.
размеры комнат и другие константы задаются в файле stdafx.h
сейчас там установлен режим 1050x1680xFULL_SCREEN, но это легко изменить:
http://dl.dropbox.com/u/52494730/Kolobok/2012_01_19/0012.zip
для более удобного экспериментирования с программой режим экрана лучше сменить на оконный, значения которого указаны там в комментах.

прога очень сырая. управление- стрелками, выход по ESC.

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

если кто что может подсказать по этому поводу- буду благодарен.

Добавлено (19.01.2012, 15:02)
---------------------------------------------
я имею ввиду небольшие искажения в тот момент, когда перерисовывается весь экран.


все правила форумной игры Дуэль Программистов
GECKДата: Четверг, 19 Января 2012, 15:31 | Сообщение # 25
заслуженный участник
Сейчас нет на сайте
Quote (noname)
при движении видны заметные искажения

Используй вертикальную синхронизацию:
Code
hge->System_SetState(HGE_FPS, HGEFPS_VSYNC);


Всё гениальное просто. И хреново работает.
nonameДата: Четверг, 19 Января 2012, 16:06 | Сообщение # 26
заслуженный участник
Сейчас нет на сайте
Quote (GECK)

Используй вертикальную синхронизацию:

СПАСИБО. наиболее неприятный эффект при горизонтальном смещении экрана убрался.

и, в-принципе работает нормально. с учётом того, что я юзаю режим 1050x1680x32bit. тот же BlackThorne гораздо поскромнее в этом плане И к тому же без скроллинга))

Добавлено (19.01.2012, 16:06)
---------------------------------------------
и тут же СЛЕДУЮЩИЙ ВОПРОС:

вот есть у меня ф-ции:
- FrameFunc (опрос ввода и модификация состояния игры)
- RenderFunc (перерисовка экрана)

я так понимаю, что они выполняются так часто, как могут.

RenderFunc меня в этом плане абсолютно устраивает, а вот что касается FrameFunc, то хотелось бы задать частоту её вызова. напр- 100 или 10 раз в секунду. тогда и отрисовка получится более качественной, т к она будет происходить чаще, чем изменения в том, что надо отобразить.


все правила форумной игры Дуэль Программистов
GECKДата: Четверг, 19 Января 2012, 17:02 | Сообщение # 27
заслуженный участник
Сейчас нет на сайте
noname, судя по коду, проблема в другом.
Каждый кадр все объекты нужно смещать не на фиксированную величину, а на скорость_объекта * dt, где dt - промежуток времени между кадрами. В случае hge это hge->TimerGetDelta().
Если сейчас в игре уменьшить фпс вдвое, то и сама игра замедлится вдвое, что не есть хорошо. Ну или я не понял проблему smile

Quote (noname)
отрисовка получится более качественной, т к она будет происходить чаще, чем изменения в том, что надо отобразить.

Ну, на самом деле нет. Если не изменять игровой мир, то в чем смысл несколько кадров рисовать одно и то же?


Всё гениальное просто. И хреново работает.
nonameДата: Суббота, 21 Января 2012, 23:24 | Сообщение # 28
заслуженный участник
Сейчас нет на сайте
Quote (GECK)
Если сейчас в игре уменьшить фпс вдвое, то и сама игра замедлится вдвое, что не есть хорошо

именно так. а я и хочу как-то управлять частотой вызова этих функций.

Quote (GECK)
Если не изменять игровой мир, то в чем смысл несколько кадров рисовать одно и то же?

хм.. дельное замечание!

если всё просчитывается, а затем- всё выводится И при этом движение объектов на экране происходит с постоянной для каждого объекта скоростью, то лагов не должно быть.

ну чтож. буду надеяться, что отрисовка в HGE (RenderFunc) происходит только после того, как мир полностью обсчитан (FrameFunc). тогда остаётся только покумекать над переделкой моей функции отображения игрового мира (WordShow).

Quote (GECK)
hge->TimerGetDelta()
СПАСИБО, почитаю.

Добавлено (20.01.2012, 15:15)
---------------------------------------------
---------------------------------------------
личкой пришло:
HGE (Meragon) Вчера
Quote
FrameFunc исполняется каждый кадр, т.е. если у тебя вертикальная синхронизация сейчас в игре есть, то это значит фпс = частота монитора (в моем случае - 75 - кадров в секунду).
Ограничить можно через произвольную установку fps: hge->System_SetState( HGE_FPS, 60 );
Если тебе надо ограничить передвижение, то используй вместо Input_GetKeyState, InputGetKeyDown.


Добавлено (20.01.2012, 15:45)
---------------------------------------------
но это- не выход. от таких ограничений у меня только ещё больше лагает.

попробую последовать совету GECK. чё-та разленился, никак не начну))

Добавлено (21.01.2012, 13:05)
---------------------------------------------
упс, нашёл ошибку- оказывается я видимую область каждый раз перерисовывал дважды.

Добавлено (21.01.2012, 13:19)
---------------------------------------------
Quote (noname)
упс, нашёл ошибку- оказывается я видимую область каждый раз перерисовывал дважды.

в функции WorldShow перед оператором switch есть совершенно лишний условный оператор, который выводит либо стены либо обои, которые ниже перерисовываются в свиче.

щазз я занят более радикальной переделкой проги.

Добавлено (21.01.2012, 20:38)
---------------------------------------------
---------------------------------------------

игру упростил и перешёл на отрисовку с использованием dx=hge->TimerGetDelta();
http://dl.dropbox.com/u/52494730/Kolobok/2012_01_21/0016.zip
временно оставляю Колобка в покое И перехожу к шахматам.

в папке Debug лежит экзешник со всеми нужными для запуска файлами. остальное- для тех, кто хочет поковыряться в исходниках.

Добавлено (21.01.2012, 23:24)
---------------------------------------------
cry
проблема: экзешник запускается только на моём компе(возможно, ещё у тех, у кого стоит MS Visual C++ и HGE).

здесь два отзыва от форумчан:
http://forum.sources.ru/index.p....064302

проверил на компе своего отца- пишет "программа не запускается".

я так понимаю, что надо доложить в архив ещё файлов. НО каких?


все правила форумной игры Дуэль Программистов

Сообщение отредактировал noname - Суббота, 21 Января 2012, 20:39
DemeronДата: Суббота, 21 Января 2012, 23:29 | Сообщение # 29
User created in C++
Сейчас нет на сайте
noname, режим Release стоит? hge.dll и bass.dll вкинул к .exe? Под какую систему компилировалось?
nonameДата: Четверг, 26 Января 2012, 16:39 | Сообщение # 30
заслуженный участник
Сейчас нет на сайте
Quote (Demeron)
режим Release

да, дело было именно в этом. тока щазз узнал об этом режиме. спасибо.
(режим с Debug на Release переключается на стандартном тулбаре Visual C++).

Добавлено (22.01.2012, 00:06)
---------------------------------------------
итак, проблема решена smile

и, раз исходники я уже выложил выше, то кладу только то, что необходимо для запуска игры:
http://dl.dropbox.com/u/52494730/Kolobok/2012_01_22/Release.zip

движение всё равно далеко до идеального, а так же колобок входит в стены.

мне нравится, как реализовано движение вот этой игре:
http://gcup.ru/forum/28-15605-254259-16-1308849878
(нажимайте F1 и F2, чтобы настроить режим отображения)
--

на этом временно бросаю Колобка и перехожу к шахматам.

Добавлено (22.01.2012, 12:05)
---------------------------------------------
рассматривал ещё раз 7-й туториал к HGE- там плавно двигается большое кол-во спрайтов одновременно cool

надо только разобраться, как это делается. и применить к шахматным фигурам.

Добавлено (25.01.2012, 18:56)
---------------------------------------------
---------------------------------------------
куча уроков по HGE есть здесь:
http://hge-blog.ru/17_urok....io-2008
в самом низу жмите левую ссылку, чтобы перейти к следующему уроку.

Добавлено (26.01.2012, 12:29)
---------------------------------------------
---------------------------------------------
---------------------------------------------
cry
хочу хранить спрайты всех шахматных фигур и кое-чего ещё в анимации(в хелпе в разделе hints&tips есть указание на то, что библиотеки спрайтов удобно хранить именно так).

в связи с этим вопрос: как загрузить анимацию из *.png- файла? в уроках что-то такое есть, но там загружается из какого-то менеджера ресурсов, а это мне вообще не понятно, да и не нужно. мне бы- просто из файла..

Добавлено (26.01.2012, 15:40)
---------------------------------------------
---------------------------------------------
т е есть в файле *.png куча спрайтов одинаковых размеров. ВОПРОС:
- как загрузить эти спрайты, чтобы они стали кадрами анимации?

Добавлено (26.01.2012, 16:39)
---------------------------------------------
решение найдено cool

Code
    HGE* hge = hgeCreate(HGE_VERSION);
       
     HTEXTURE tex = hge->Texture_Load(filename/*имя файла с текстурой*/);
       
     float w = hge->TexureWidth(tex);
     float h = hge->TexureHeight(tex);
       
     hgeAnimation anim = new hgeAnimation(tex/*текстура*/, numFrames/*количество кадров на текстуре*/, FPS/*частота обновления, если кадры менять не надо - ставишь 0*/,
                     0/*верхний левый угол Х*/, 0/*верхний левый угол У*/, w/*ширина текстуры*/, h/*высота текстуры*/);


все правила форумной игры Дуэль Программистов
DemeronДата: Четверг, 26 Января 2012, 22:09 | Сообщение # 31
User created in C++
Сейчас нет на сайте
noname, ну не совсем.... Нужно так:
Code
    HGE* hge = hgeCreate(HGE_VERSION);   
           
       HTEXTURE tex = hge->Texture_Load(filename/*имя файла с текстурой*/);   
           
       float w = 64.0f;//ширина одного кадра
       float h = 64.0f;//высота одного кадра
       int numFrames = 10;//количество кадров в анимации
       float FPS = 10;//количество кадров в секунду (скорость воспроизведения)
           
       hgeAnimation anim = new hgeAnimation(tex,numFrames,FPS,   
0/*верхний левый угол первого спрайта анимации по Х*/,
0/*верхний левый угол первого спрайта анимации по У*/,
w,h);


Сообщение отредактировал Demeron - Четверг, 26 Января 2012, 22:13
nonameДата: Суббота, 04 Февраля 2012, 10:10 | Сообщение # 32
заслуженный участник
Сейчас нет на сайте
в туториалах к HGE есть пример, где перемещается много покемонов Zazaka.

я только что дотумкал и реализовал другой способ перемещения, который больше подходит к шахматной программе, которую я пишу: http://forum.sources.ru/index.p....3069006

Добавлено (04.02.2012, 10:10)
---------------------------------------------
как создать русский шрифт для HGE?

я бы предпочёл не сам рисовать шрифт, а перевести какой-нить из виндузовских.


все правила форумной игры Дуэль Программистов
GECKДата: Суббота, 04 Февраля 2012, 10:18 | Сообщение # 33
заслуженный участник
Сейчас нет на сайте
В комплекте с HGE идет генератор шрифтов же.
В окошке Characters range выбираешь нужные символы, и все.


Всё гениальное просто. И хреново работает.
nonameДата: Пятница, 16 Марта 2012, 23:09 | Сообщение # 34
заслуженный участник
Сейчас нет на сайте
да, появились другие дела, так что шахматы мои пока что заброшены. и давно.

скачать то, что получилось, можно здесь:
http://dl.dropbox.com/u/52494730/CHESS/2012_02_05/0020.zip

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

Добавлено (16.03.2012, 23:09)
---------------------------------------------
кста, в моих шахматах переворачивать доску можно даже во время перемещения фигуры))


все правила форумной игры Дуэль Программистов
KwantДата: Воскресенье, 15 Июля 2012, 20:06 | Сообщение # 35
почетный гость
Сейчас нет на сайте
Падает у тя оно на:
Code
int move_num = rand()%(AI.ML.n);

AI.ML.n = 0 - у тебя идет деление на ноль
И еще интересна вот эта строка:
Code
if(PU->Fgr[c][n].alive && MvCrrct(PU,&(PU->Fgr[c][n]),x,y))
{
                result = true || result;
}


У тебя тут постоянно true -_-

Проверка чисел с плавающей точкой:
if((G.FgCur.sx==G.FgDst.sx)&&(G.FgCur.sy==G.FgDst.sy)) - надо бы: fabs( A - B ) < E

Структура:
TFigure - на 32-битной платформе, размер может быть уменьшен с 24 до 20 байт, перестановкой полей.

Ну и функция void Q_10() == void Q_50() - зачем дубликаты лепить?


Сообщение отредактировал Kwant - Воскресенье, 15 Июля 2012, 20:15
nonameДата: Суббота, 10 Ноября 2012, 14:26 | Сообщение # 36
заслуженный участник
Сейчас нет на сайте
Kwant, спасибо! не ожидал, что кто-то разберётся- собирался уже слезать с HGE обратно на Zen(что было бы печально, ибо он заточен под Delphi).

правда, времени сейчас мало, но продолжу разбираться.

Добавлено (08.11.2012, 21:34)
---------------------------------------------

Quote (Kwant)
AI.ML.n = 0 - у тебя идет деление на ноль
похоже на правду. AI.ML.n хранит кол-во возможных ходов. я сделал защиту от деления на ноль(не иду по этой ветке, если нет ходов), но она не срабатывает в случае, если у компа ровно один ход. потому как я считаю ходы с нуля(а если ходов нет, то AI.ML.n == -1).

блин, а я так долго пытался понять- почему иногда, когда я ставлю шах компу, прога вылетает! это был самый достающий момент для меня, из-за которого я уже начал думать, что не понимаю, что происходит, и даже собирался перестать пользоваться HGE. короч, Kwant, - огромное тебе спасибо)))

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

Quote
result = true || result;
}

У тебя тут постоянно true
да, там вродь и должно быть true. но лишний || result надо будет убрать. только ещё раз присмотрюсь к этому месту- правильно ли там всё сделано.
--

Quote (Kwant)
Проверка чисел с плавающей точкой:
if((G.FgCur.sx==G.FgDst.sx)&&(G.FgCur.sy==G.FgDst.sy)) - надо бы: fabs( A - B ) < E

отлично! а я-то этого не знал, и пытался налепить костылей. большое спасибо))
--

Quote (Kwant)
Структура:
TFigure - на 32-битной платформе, размер может быть уменьшен с 24 до 20 байт, перестановкой полей.

с одной стороны- кого волнуют в наши дни какие-то 4-ре байта, а с другой- интересно, что куда надо переставить?
--

Quote (Kwant)

Ну и функция void Q_10() == void Q_50() - зачем дубликаты лепить?

Quote
// действуем соответственно текущему состоянию
switch (Q)
{
case 10: Q_10(); break; // ждём начала игры
case 20: Q_20(); break; // ждём хода юзера
case 30: Q_30(); break; // перемещаем выделенную фигуру
case 40: Q_40(); break; // Искуственный Интеллект
case 50: Q_50(); break; // партия окончена, ожидаем завершения игры
case 255: ; // ничего не делаем
}
ну, всё же, декларативно, это разные функции. и даже если они в данный момент совершенно одинаковы, то когда-нибудь, теоретически, могут измениться, если я добавлю, например, какие-нибудь специфические эффекты при ожидании начала игры.

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

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

ещё раз спасибо!

Добавлено (10.11.2012, 14:26)
---------------------------------------------

Quote (Kwant)
if((G.FgCur.sx==G.FgDst.sx)&&(G.FgCur.sy==G.FgDst.sy)) - надо бы: fabs( A - B ) < E

Quote (noname)
отлично! а я-то этого не знал, и пытался налепить костылей. большое спасибо))

да, перемещение фигур в моей проге организовано не в духе традиций HGE, но переделывать уже не буду- разберусь с этим моментом хорошенько в следующем своём проекте(платформер).


все правила форумной игры Дуэль Программистов
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг