Пятница, 29 Марта 2024, 18:57

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » проблема с HGE в VC++ 2010
проблема с HGE в VC++ 2010
MonolitДата: Суббота, 08 Октября 2011, 12:23 | Сообщение # 1
был не раз
Сейчас нет на сайте
Собс-но, вот в чем проблема:


Код (как во втором примере в оф. туториалах):
Code

#include "include\hge.h"

HGE *hge=0;

// Quad is the basic primitive in HGE
// used for rendering graphics.
// Quad contains 4 vertices, numbered
// 0 to 3 clockwise.
hgeQuad quad;

// Handle for a sound effect
HEFFECT snd;

// Some "gameplay" variables and constants
float x=100.0f, y=100.0f;
float dx=0.0f, dy=0.0f;

const float speed=90;
const float friction=0.98f;

// This function plays collision sound with
// parameters based on sprite position and speed
void boom() {
   int pan=int((x-400)/4);
   float pitch=(dx*dx+dy*dy)*0.0005f+0.2f;
   hge->Effect_PlayEx(snd,100,pan,pitch);
}

bool FrameFunc()
{
   // Get the time elapsed since last call of FrameFunc().
   // This will help us to synchronize on different
   // machines and video modes.
   float dt=hge->Timer_GetDelta();

   // Process keys
   if (hge->Input_GetKeyState(HGEK_ESCAPE)) return true;
   if (hge->Input_GetKeyState(HGEK_LEFT)) dx-=speed*dt;
   if (hge->Input_GetKeyState(HGEK_RIGHT)) dx+=speed*dt;
   if (hge->Input_GetKeyState(HGEK_UP)) dy-=speed*dt;
   if (hge->Input_GetKeyState(HGEK_DOWN)) dy+=speed*dt;

   // Do some movement calculations and collision detection   
   dx*=friction; dy*=friction; x+=dx; y+=dy;
   if(x>784) {x=784-(x-784);dx=-dx;boom();}
   if(x<16) {x=16+16-x;dx=-dx;boom();}
   if(y>584) {y=584-(y-584);dy=-dy;boom();}
   if(y<16) {y=16+16-y;dy=-dy;boom();}

   // Set up quad's screen coordinates
   quad.v[0].x=x-16; quad.v[0].y=y-16;
   quad.v[1].x=x+16; quad.v[1].y=y-16;
   quad.v[2].x=x+16; quad.v[2].y=y+16;
   quad.v[3].x=x-16; quad.v[3].y=y+16;

   // Continue execution
   return false;
}

// This function will be called by HGE when
// the application window should be redrawn.
// Put your rendering code here.
bool RenderFunc()
{
   // Begin rendering quads.
   // This function must be called
   // before any actual rendering.
   hge->Gfx_BeginScene();

   // Clear screen with black color
   hge->Gfx_Clear(0);

   // Render quads here. This time just
   // one of them will serve our needs.
   hge->Gfx_RenderQuad(&quad);

   // End rendering and update the screen
   hge->Gfx_EndScene();

   // RenderFunc should always return false
   return false;
}

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
   // Get HGE interface
   hge = hgeCreate(HGE_VERSION);

   // Set up log file, frame function, render function and window title
   //hge->System_SetState(HGE_LOGFILE, "hge_tut02.log");
   hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
   hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
   hge->System_SetState(HGE_TITLE, "HGE Tutorial 02 - Using input, sound and rendering");

   // Set up video mode
   hge->System_SetState(HGE_WINDOWED, true);
   hge->System_SetState(HGE_SCREENWIDTH, 800);
   hge->System_SetState(HGE_SCREENHEIGHT, 600);
   hge->System_SetState(HGE_SCREENBPP, 32);

   if(hge->System_Initiate())
   {
    // Load sound and texture
    snd=hge->Effect_Load("menu.wav");
    quad.tex=hge->Texture_Load("particles.png");
    if(!snd || !quad.tex)
    {
     // If one of the data files is not found, display
     // an error message and shutdown.
     //MessageBox(NULL, "Can't load MENU.WAV or PARTICLES.PNG", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
     hge->System_Shutdown();
     hge->Release();
     return 0;
    }

    // Set up quad which we will use for rendering sprite
    quad.blend=BLEND_ALPHAADD | BLEND_COLORMUL | BLEND_ZWRITE;

    for(int i=0;i<4;i++)
    {
     // Set up z-coordinate of vertices
     quad.v[i].z=0.5f;
     // Set up color. The format of DWORD col is 0xAARRGGBB
     quad.v[i].col=0xFFFFA000;
    }

    // Set up quad's texture coordinates.
    // 0,0 means top left corner and 1,1 -
    // bottom right corner of the texture.
    quad.v[0].tx=96.0/128.0; quad.v[0].ty=64.0/128.0;   
    quad.v[1].tx=128.0/128.0; quad.v[1].ty=64.0/128.0;   
    quad.v[2].tx=128.0/128.0; quad.v[2].ty=96.0/128.0;   
    quad.v[3].tx=96.0/128.0; quad.v[3].ty=96.0/128.0;   

    // Let's rock now!
    hge->System_Start();

    // Free loaded texture and sound
    hge->Texture_Free(quad.tex);
    hge->Effect_Free(snd);
   }
   //else MessageBox(NULL, hge->System_GetErrorMessage(), "Error", MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);

   // Clean up and shutdown
   hge->System_Shutdown();
   hge->Release();
   return 0;
}
BOOMДата: Суббота, 08 Октября 2011, 12:31 | Сообщение # 2
I am the creator of ADE
Сейчас нет на сайте
PDB - отладочный дамп. А вообще, в чём суть проблемы: программа не запускается, или ошибку выдаёт.

По логу отладки, вроде нормально...


______________________________
Я вернулся, и это чудо.
______________________________
MonolitДата: Суббота, 08 Октября 2011, 13:20 | Сообщение # 3
был не раз
Сейчас нет на сайте
появляется экран с эмблемой HGE, и программа прекращает работу
должен появиться объект шарика, которые по нажатию клавиш "бегает" по экрану
BOOMДата: Суббота, 08 Октября 2011, 13:49 | Сообщение # 4
I am the creator of ADE
Сейчас нет на сайте
Monolit, попробуй в коде расскомментировать все сообщения об ошибках, и посмотри, что получится...

______________________________
Я вернулся, и это чудо.
______________________________
MonolitДата: Суббота, 08 Октября 2011, 17:41 | Сообщение # 5
был не раз
Сейчас нет на сайте
это довольно проблематично, потому что я специально поставил их, ибо без коментариев выдает:

Code
1>------ Построение начато: проект: proj, Конфигурация: Debug Win32 ------
1>Построение начато 08.10.2011 17:40:42.
1>InitializeBuildStatus:
1>  Обращение к "Debug\proj.unsuccessfulbuild".
1>ClCompile:
1>  s.cpp
1>c:\users\алексей\desktop\мои проги на c++\hge\proj\proj\s.cpp(126): error C2664: MessageBoxW: невозможно преобразовать параметр 2 из "const char [37]" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>c:\users\алексей\desktop\мои проги на c++\hge\proj\proj\s.cpp(158): error C2664: MessageBoxW: невозможно преобразовать параметр 2 из "char *" в "LPCWSTR"
1>          Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:02.18
DemeronДата: Суббота, 08 Октября 2011, 17:58 | Сообщение # 6
User created in C++
Сейчас нет на сайте
Monolit, или ставь L перед текстом (L"My Text", TEXT(my char*)) или поменяй кодировку на MultyByte. Из лога ты увидишь что не так.
MonolitДата: Суббота, 08 Октября 2011, 18:23 | Сообщение # 7
был не раз
Сейчас нет на сайте
а ресурсы(звуки, png) просто в папку кинуть можно, или как то по особенному подключать?Ибо похоже проблема все таки в этом....

ЗЫ.
Quote
или ставь L перед текстом (L"My Text", TEXT(my char*)) или поменяй кодировку на MultyByte

если не секрет, а что это означает?)т.е. L эта...
DemeronДата: Суббота, 08 Октября 2011, 18:27 | Сообщение # 8
User created in C++
Сейчас нет на сайте
Quote (Monolit)
а ресурсы(звуки, png) просто в папку кинуть можно, или как то по особенному подключать?Ибо похоже проблема все таки в этом....

В папку с .ехе файлом они должны лежать.
Quote (Monolit)
если не секрет, а что это означает?)т.е. L эта...

Это значит что ты преобразовываешь в LPCWSTR.
BOOMДата: Суббота, 08 Октября 2011, 21:09 | Сообщение # 9
I am the creator of ADE
Сейчас нет на сайте
Monolit, вот где мышь та зарыта crazy . У тебя сборка Юникодовская, то есть определён макрос UNICODE, как 1. Этот параметр указывает компилятору собирать приложение, используя длину в символе, равную 16 битам. Это, конечно, даёт большое преимущество, однако оставляет много проблем. С этим можно бороться двумя способами:
1. Первый, это, либо в настройках сборки, либо в начале файла ссылок переключить макрос UNICODE так, что бы он был равен нулю.
2. Второй чётко отразил Demeron.


______________________________
Я вернулся, и это чудо.
______________________________
nonameДата: Четверг, 19 Января 2012, 15:05 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
требуется помощь с HGE в VC++ 2008:
http://gcup.ru/forum/45-19693-329570-16-1326970936
смотрите нижнюю часть сообщения.


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

Сообщение отредактировал noname - Четверг, 19 Января 2012, 15:06
Форум игроделов » Программирование » C/C++ » проблема с HGE в VC++ 2010
  • Страница 1 из 1
  • 1
Поиск:

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