Autor Wątek: Problem z VC++ i Dark GDK - Access violation  (Przeczytany 1190 razy)

Offline Bart K

  • Użytkownik

# Sierpień 13, 2010, 02:34:28
Przede wszystkim witam, bo jestem nowy tu na forum :)

Problem polega na tym:
W szkole pracuje z Borlandem, jednak jakis rok temu chcialem sprobowac swoich sil w "bawieniu sie" (bo profesjonalnym programowaniem tego nie nazwe) w tworzenie gier. Wybor padl na VC++ i Dark GDK (ze wzgledu, ze oba free, no i po tutorialach wydawalo sie proste). Tak, wiem, Dark GDK to niezbyt dobre narzedzie to tego... Ale od czegos trzeba zaczac ;)
Wracajac do problemu.
Po sporym uplywie czasu i juz na nowym, lepszym kompie chcialem do tego wrocic. Zainstalowalem VC++ 2008 express, Dark GDK, wszystko wg. instrukcji, podpialem liby i includy w Visualu, no i otwarlem projekt. Startuje, debuguje az do czasu, kiedy wywala blad:

Unhandled exception at 0x4fec688c in room.exe: 0xC0000005: Access violation reading location 0x00000000.

Ta zielona strzalka od debugu pokazuje miedzy dbSync () a dbEscapeKey () (ktory jest w if, ale to raczej nie ma znaczenia). Sprawa o tyle dziwna, ze wtedy ten projekt ladnie chodzil...
Aha, ani debug, ani release nie wchodzi (jest to samo). Reinstalacja wszystkiego nie pomogla.

Dla proby otworzylem inny projekt - prosta gierka w 2D (kopia kultowego Ponga) i chodzi bez problemu.


Mam nadzieje, ze pomozecie, bo zalezy mi na kontynuowaniu tego projektu :)

Pozdrawiam,
Bartek


Btw, jesli nie ten watek, to prosze o przeniesienie (nie wiedzialem, czy uznac to jako platforme, czy Dark GDK jako juz gotowy silnik).
Btw2: google przeszukane, nie znalazlem odpowiedzi...

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Rares

  • Użytkownik
    • Moja strona

# Sierpień 13, 2010, 07:03:47
Pokaż kod.

Offline Bart K

  • Użytkownik

# Sierpień 13, 2010, 12:55:30
#include "DarkGDK.h"

void strzalki_mysz (void);
void ShowXYZ (void);
void ograniczenia (void);

float g_fSpeed = 0.3f;
float g_fTurn = 0.03f;
float g_fOldCamAngleX = 0.0f;
float g_fOldCamAngleY = 0.0f;
float g_fCameraAngleX = 0.0f;
float g_fCameraAngleY = 0.0f;

float tHeight;

void DarkGDK (void)
{
dbSetDir ("files");

dbSetDisplayMode (1024, 768, 32);

//dbHideMouse ();
//dbSetWindowOff ();
dbMaximizeWindow ();

dbBackdropOff (0);

dbLoadImage ("loading.jpg", 5);
dbPasteImage (5, 1, 1);
dbSync ();

dbLoadImage ("floor.jpg", 1);
dbLoadImage ("detail.jpg", 2);
dbLoadImage ("wall1.jpg", 3);
dbLoadImage ("sufit.jpg", 4);

//--- podloga

dbMakeObjectBox (1, 31.0f, 2.0f, 41.0f);
dbTextureObject (1, 1);
dbPositionObject (1, 15.0f, -1.0f, 20.0f);

//--- sciany

dbMakeObjectBox (2, 31.0f, 8.2f, 2.0f);
dbTextureObject (2, 3);
dbScaleObjectTexture (2, 9, 1);
dbPositionObject (2, 15, 2.5f, 41.3f);

dbMakeObjectBox (3, 31.0f, 8.2f, 2.0f);
dbTextureObject (3, 3);
dbScaleObjectTexture (3, 9, 1);
dbPositionObject (3, 15, 2.5f, -1.2f);

dbMakeObjectBox (4, 2.0f, 8.2f, 41.0f);
dbTextureObject (4, 3);
dbScaleObjectTexture (4, 12, 1);
dbPositionObject (4, -1.0f, 2.5f, 20.0f);

dbMakeObjectBox (5, 2.0f, 8.2f, 41.0f);
dbTextureObject (5, 3);
dbScaleObjectTexture (5, 12, 1);
dbPositionObject (5, 31.0f, 2.5f, 20.0f);

//--- sufit

dbMakeObjectBox (6, 31.f, 2.0f, 41.0f);
dbTextureObject (6, 4);
dbPositionObject (6, 15.0f, 7.6f, 20.0f);

//--- lozko

dbLoadObject ("lozko.x", 7);
dbPositionObject (7, 7.0f, 2.0f, 37.0f);
dbScaleObject (7, 220, 220, 220);

//-- szafa

dbLoadObject ("szafa.x", 8);
dbPositionObject (8, 29.1f, 2.6f, 30.0f);
dbScaleObject (8, 270, 270, 270);
dbRotateObject (8, 0, 90, 0);


dbSyncOn ();
dbSyncRate (60);

dbPositionMouse (dbScreenWidth () /2, dbScreenHeight () /2);

dbPositionCamera (3.0f, 0, 3.0f);

//dbHideLight (0);
dbDeleteLight (0);

dbMakeLight (0);
dbSetSpotLight (0, 1, 100);
dbPositionLight (0, 25.0f, 5.0f, 39.0f);
dbSetLightRange (0, 50.0f);

//dbSetNormalizationOn ();

dbSetAmbientLight (30);

//dbFogOn ();
//dbFogDistance (60);
//dbFogColor (255, 255, 255);

dbAutomaticCameraCollision (0, 0.5f, 1);

dbSetShadowShadingOn (7);
dbSetShadowShadingOn (8);
dbSetShadowShadingOn (9);

int gloop = 1;

while (gloop == 1)
{
ograniczenia ();
strzalki_mysz ();
ShowXYZ ();
dbUpdateTerrain ();
dbSync ();

//tutaj wlasnie sie zatrzymuje debuger

if (dbEscapeKey ())
gloop = 0;
}

return;
}

void strzalki_mysz (void)
{

int kierunek = 0; // 1 - dol, 2 - gora

dbControlCameraUsingArrowKeys (0, 0.3f, 5.0f);

if (dbRightKey ())
{
dbYRotateCamera (0, dbCameraAngleY (0) + 90);
dbMoveCamera (0.3f);
}
if (dbLeftKey ())
{
dbYRotateCamera (0, dbCameraAngleY (0) - 90);
dbMoveCamera (0.3f);
}

g_fOldCamAngleY = g_fCameraAngleY;
g_fOldCamAngleX = g_fCameraAngleX;

g_fCameraAngleY = dbWrapValue (g_fCameraAngleY + dbMouseMoveX () * 0.4f);
g_fCameraAngleX = dbWrapValue (g_fCameraAngleX + dbMouseMoveY () * 0.4f);

dbYRotateCamera (dbCurveAngle (g_fCameraAngleY, g_fOldCamAngleY, 24));
dbXRotateCamera (dbCurveAngle (g_fCameraAngleX, g_fOldCamAngleX, 24));

//tHeight = dbGetTerrainGroundHeight (1, dbCameraPositionX (), dbCameraPositionZ ());

dbPositionCamera (dbCameraPositionX (), 3.5f, dbCameraPositionZ ());

dbText (700, 20, dbStr (dbCameraAngleX ()));

if ((dbCameraAngleX () > 0) && (dbCameraAngleX () < 80))
kierunek = 1;
else
if ((dbCameraAngleX () > 280) && (dbCameraAngleX () < 360))
kierunek = 2;

if ((dbCameraAngleX () > 80.0f) && (kierunek == 1))
dbXRotateCamera (80.0f);
else
if ((dbCameraAngleX () < 280.0f) && (kierunek == 2))
dbXRotateCamera (280.0f);


if ((dbCameraAngleX () > 0) && (dbCameraAngleX () < 80))
dbText (700, 35, "w dol");
else
if ((dbCameraAngleX () > 280) && (dbCameraAngleX () < 360))
dbText (700, 35, "w gore");
}

void ShowXYZ (void)
{
float x, y, z;

x = dbCameraPositionX ();
y = dbCameraPositionY ();
z = dbCameraPositionZ ();

dbText (5, 5, "x = ");
dbText (35, 5, dbStr (x));

dbText (5, 20, "y = ");
dbText (35, 20, dbStr (y));

dbText (5, 35, "z = ");
dbText (35, 35, dbStr (z));
}

void ograniczenia (void)
{
// --- sciany

if (dbCameraPositionX () < 1.5f)
dbPositionCamera (1.6f, 3.5f, dbCameraPositionZ ());

if (dbCameraPositionX () > 28.5f)
dbPositionCamera (28.4f, 3.5f, dbCameraPositionZ ());

if (dbCameraPositionZ () < 1.6f)
dbPositionCamera (dbCameraPositionX (), 3.5f, 1.5f);

if (dbCameraPositionZ () > 38.5f)
dbPositionCamera (dbCameraPositionX (), 3.5f, 38.4f);

// --- lozko

if ((dbCameraPositionX () > 5.0f) && (dbCameraPositionX () < 9.0f) && (dbCameraPositionZ () > 33.0f))
dbPositionCamera (dbCameraPositionX (), 3.5f, 32.9f);

//if ((dbCameraPositionZ () > 33.0f) && (dbCameraPositionZ () < 38.0f) && (dbCameraPositionX () > 5.0f))
// dbPositionCamera (4.9f, 3.5f, dbCameraPositionZ ());
}

W sumie wiekszosc, to korzystalem z gotowych funkcji z Dark GDK.



Aha, jesli kod jest kiepski, niezoptymalizowany itd, to prosze o wyrozumialosc - profesjonalista nie jestem, jak juz pisalem :)

Offline Minus

  • Użytkownik

# Sierpień 13, 2010, 15:25:17
Nie wiem czy te funkcje cokolwiek zwracają, jeśli tak-sprawdź czy jakiegoś errora nie ma ;)