Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

PD

unregistriert

1

14.01.2006, 00:42

Probleme mit dem 2D dus-Framework

Juten Tach, nach langer zeit schau ich nochmal rein und bin auf das Framework von David gestoßen. Und der Aufbau bzw. die Funktionsweise gefällt mir wirklich gut... zumindest würde es das wenn es richtig klappen würde...

nach einigen problemen (ich benutze Dev-C++) habe ich nun das DX9c devpak gefunden und installiert. Dann ne grundlegende Anwendung erstellt und er kompilierte dann auch fast Fehlerfrei (er meckerte wegen doppeltem_D3DVECTOR typedef... einfach das infdef auch in d3d9types.h eingefügt und es klappte...)... naja, außer der initialisierung der grafik und nem Shutdown im game destructor (so wie einer state klasse die aber nix weiter macht außer zu existieren und registriert bzw. ausgewählt zu werden ^^)... leider kommt dann ein Fehler auß dem ich net ganz schlau werde, ich schreib mal das wesentliche raus:

Quellcode

1
2
3
4
5
Assertion failed!
File: code/framework/singleton.h
Line 45

Expression: p_inst


Und dann noch irgendwas das ich in die VC++ hilfe schauen solle... obwohl ich wie gesagt DevC++ verwnede (ich hatte 2 ergebnislose versuche mit VC 6 und VC 2005 Express o_Ô).

Nun hab ich keine ahnung was ne assertion ist und will deshalb net damit rum spielen... ich würde mich sehr über eure Hilfe freuen, danke im vorraus ^^

Achja, das SpaceGame konnte ich kompilieren wie ich grade ausprobiert habe und das läuft auch fehlerfrei...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

14.01.2006, 09:46

Du musst schon Deinen Code zeigen...
Assertions benutzt man, um sicherzustellen, dass ein bestimmter Ausdruck wahr ist. Z.B.:

C-/C++-Quelltext

1
2
3
4
5
void setzeFeld(int x, int y, int feld)
{
    assert(x >= 0 && y >= 0 && x < 100 && y < 100);
    feld[x][y] = feld;
}

Anonymous

unregistriert

3

14.01.2006, 11:40

Ach assert abfangen ist doch nichts. Hardwareexceptions abfangen ist das einzig wahre!

p.s.:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
template<typename T> inline void setField (unsigned long x, unsigned long y, T** field, T value) 
{ 
    field[x][y] = value; 
}
unsigned, weil es keine negativen Arraypositionen gibt
long, weil es im gegensatz zu int nicht Systemspezifisch ist
T, um flexibler zu sein
und den Pointer nicht vergessen ;) Sonst hilft Assert da auch nix.

PD

unregistriert

4

14.01.2006, 11:59

ich kenne zwar exceptions (naja, zumindest flüchtig) aber asserts sind mir neu ^^"

Ok, ich zeig mal was ich hab:

main.h:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// I N C L U D E S //////////////////////////////////////////////////////////////
#include <string>
#include "framework/framework.h"

// G L O B A L E S //////////////////////////////////////////////////////////////
using namespace dus;
using namespace std;

// C L A S S E S / M E T H O D E S / F U N C T I O N S //////////////////////////

// Die Hauptklasse des Spiels, sie kümmert sich um
// die Initialisierung und das Aufräumen
class RaumschiffeVersenken : public Game {
    public:
        RaumschiffeVersenken();
        ~RaumschiffeVersenken();
};


// Diese GameState Klasse für das Intro
class stateIntro : public GameState {
    public:
        stateIntro();
        ~stateIntro();
        string getName() const { return "intro"; }
        void onRender(float dt);
};



main.cpp:


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// I N C L U D E S //////////////////////////////////////////////////////////////
#include "main.h"

// G L O B A L E S //////////////////////////////////////////////////////////////


// C L A S S E S / M E T H O D E S / F U N C T I O N S //////////////////////////

// Die WinMain Funktion initialisiert das Spiel
int WINAPI WinMain(HINSTANCE inst, HINSTANCE prevInst, char* p_cmdLine, int showCmd) {

    RaumschiffeVersenken game;
    game.registerGameState(new stateIntro);

    game.setGameState("intro");
    
    game.run();
    
    return 0;
}


/////////////////////////////////////////////////////////////////////////////////
// Klasse: RaumschiffeVersenken
// Methode: Konstruktor
// Parameter: keine
// Rückgabewert: keiner
/////////////////////////////////////////////////////////////////////////////////
RaumschiffeVersenken::RaumschiffeVersenken() {
    new Graphics(800, 600, 16, GF_WINDOWED, "Stargate - Raumschiffe Versenken");
}

/////////////////////////////////////////////////////////////////////////////////
// Klasse: RaumschiffeVersenken
// Methode: Destruktor
// Parameter: keine
// Rückgabewert: keiner
/////////////////////////////////////////////////////////////////////////////////
RaumschiffeVersenken::~RaumschiffeVersenken() {
    Graphics::shutdown();
}



/////////////////////////////////////////////////////////////////////////////////
// Klasse: stateIntro
// Methode: Konstruktor
// Parameter: keine
// Rückgabewert: keiner
/////////////////////////////////////////////////////////////////////////////////
stateIntro::stateIntro() {

}

/////////////////////////////////////////////////////////////////////////////////
// Klasse: stateIntro
// Methode: Destruktor
// Parameter: keine
// Rückgabewert: keiner
/////////////////////////////////////////////////////////////////////////////////
stateIntro::~stateIntro() {
    
}

/////////////////////////////////////////////////////////////////////////////////
// Klasse: stateIntro
// Methode: onRender()
// Parameter:
//      dt = Zeit seit letztem Frame in Sekunden
// Rückgabewert: keiner
/////////////////////////////////////////////////////////////////////////////////
void stateIntro::onRender(float dt) {

}


Naja, ansonsten halt nur das Framework... wie gesagt, kompiliert ohne Fehler oder Warnungen und bringt mir die Assertion failed Meldung.

Danke weiterhin ^^

matthias

Alter Hase

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

5

14.01.2006, 12:31

du must noch ein Input objekt erzeugen

RaumschiffeVersenken::RaumschiffeVersenken() {
new Graphics(800, 600, 32, GF_WINDOWED, "Stargate - Raumschiffe Versenken");
new Input;
}

und natürlich
Input::shutdown();

PD

unregistriert

6

14.01.2006, 12:53

*drop*

Es ist immer schön wenn man ein paar Stunden verzweifelt und dann merkt an was für nem Fliegenschiss man eigentlich verzweifelt ist -_-"

Ok, vielen dank, jetzt gehts natürlich ^^" Muss die zeile überlesen haben die angibt das man zwingend ein Input objekt braucht :rolleyes:

Danke nochmal :)

matthias

Alter Hase

Beiträge: 449

Wohnort: wipperfürth

  • Private Nachricht senden

7

15.01.2006, 16:49

naja mit einem debugger kann man die Position des fehlers doch recht schnell ausmachen...

Werbeanzeige