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

Nightmaremen

Treue Seele

  • »Nightmaremen« ist der Autor dieses Themas

Beiträge: 110

Beruf: Schüler

  • Private Nachricht senden

1

28.01.2014, 17:20

problem mit player init und/oder dem setup

hallo leute
ich habe ein Problem einen Fehler zu finden , und suche bereits mehrere tage danach .
im Grunde ist es ein einfaches Programm jedoch hat sich ein Fehler eingeschlichen den ich bereits seit locker 3-4 Tagen am suchen bin und dachte mir , vielleicht könnte mir hier einer helfen.

der Fehler:-das spiel startet normal , linkfehler gibt es keine und auch Schreibfehler sind bereits rausgefixt.
-nach circa 2 sekunden wurde der screen mit mauspointer korrekt erstellt und ein schwarzer screen erscheint , weiter gehts jedoch nicht.
Eher im Gegenteil , denn der Debug beendet das Programm bereits 2 sekunden nach dem screenedit.


soweit bin ich :-an der main funktion liegt es 100%tig nicht die habe ich bereits durchgecheckt.
-in der "game" funktion konnte ich den fehler bereits auf ca 2 zeilen eingrenzen ,zwischen denen er liegen muss
-weitere fehler sind bisher nicht aufgetretren jedoch ist das klar da der fehler ganz am anfang liegt


void CGame::Init(){ //spielerinstanz und init m_pPlayer = new CPlayer; m_pPlayer->Init(); m_pPlayer->Reset();

....
ich bin soweit das ich mir ziemlich sicher bin das er innerhalb dieser zeilen liegt,deshalb hier die zugehörigen funktionen

Init
void CPlayer::Init(){ m_pSpritePlayer = new CSprite; m_pSpritePlayer->Load("Player.bmp",16,30,30); m_pSpritePlayer->SetColorKey(255, 0, 255); m_pSpriteAttack = new CSprite; m_pSpriteAttack->Load("Attack.bmp",0 , 7, 7); m_pSpriteAttack->SetColorKey(255, 0, 255); }



und die reset datei
void CPlayer::Reset(){ //startposition des spielers m_fYPos = 300.0f; m_fXPos = 400.0f; //animationsphase m_fAnimPhase = 7.0f; m_bAttackfree = false; }

Schreibfehler werden nicht angezeigt aber ein code 1 wird angezeigt beim debugger ,wenn das weiterhilft.
leider finde ich den Fehler nicht und hoffe mir kann hier jemand weiterhelfen, denn wenn ich weiterhin so lange danach suche , kann ich bald eingewiesen werden ;(
danke im voraus :)
"for a silent travel, u´d better take the next Train" (Lightning)

Cranberry

Treue Seele

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

2

28.01.2014, 17:49

Welche Library verwendest du? Das sieht ganz nach SDL aus oder täusche ich mich?
Welche Fehlermeldung erhältst du denn vom Debugger? Funktioniert der Release-Build?

P.S.: Verwende bitte Code-Tags dann wird das ganze übersichtlicher.

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

3

28.01.2014, 18:38

Bitte Code-Tags verwenden und den Code auch formatiert posten.

Ansonsten gilt auch noch:
[...]Auch solltest du keine Manual Memory Management (new/delete) verwenden, dafür gibt es RAII/Smart Pointers, hier ein guter Artikel dazu.

Nightmaremen

Treue Seele

  • »Nightmaremen« ist der Autor dieses Themas

Beiträge: 110

Beruf: Schüler

  • Private Nachricht senden

4

28.01.2014, 20:07

@Cranberry:
ja ich benutze SDL und um ehrlich zu sein sagt mir die Fehlermeldung nichts da sie mir nur anzeigt das ein Fehler gemacht wurde nicht aber was für einer :

C-/C++-Quelltext

1
2
Der Thread 0x6d0 hat mit Code 1 (0x1) geendet.
Das Programm "[3576] Sword of Blades.exe" wurde mit Code 1 (0x1) beendet.



der release build sieht (wenn ich alles so verlinke wie beim debugger) ungefähr genauso aus, nur das dann VS2013 auch gleich mit abschmiert.

tut mir leid mit den code tags aber noch bin ich neu hier und hab noch nicht alles im text editor so gecheckt, wie ich sollte ich bitte dabei um verzeihung
"for a silent travel, u´d better take the next Train" (Lightning)

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

5

28.01.2014, 20:27

Dann such mal nach allen Vorkommen von

C-/C++-Quelltext

1
return 1;

Die Meldung sagt nämlich nur aus, dass das Programm mit einem return 1; beendet wurde.

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

6

28.01.2014, 20:32

Oder exit(1)

Nightmaremen

Treue Seele

  • »Nightmaremen« ist der Autor dieses Themas

Beiträge: 110

Beruf: Schüler

  • Private Nachricht senden

7

28.01.2014, 20:40

return false habe ich an folgenden 2 Stellen welche ich aber bereits bei 1-2 anderen spielen genauso probiert habe und welche auch genauso funktioniert haben :
beim sdl init selbst
fehleraussieben:

C-/C++-Quelltext

1
2
3
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1)    {       cout << "Fehler beim sdl init" << endl;     cout << "Meldung " << SDL_GetError() << endl;
        Quit();
        return (false); }


und beim start des videomodus

C-/C++-Quelltext

1
2
3
    if (m_pScreen == NULL)  {       cout << "fehler beim start des videomodus erkannt" << endl;     cout << "Fehlermeldung: " << SDL_GetError() << endl;
        Quit();
        return (false); }



videomodus start selber

C-/C++-Quelltext

1
    if (bFullscreen == true)    {       m_pScreen = SDL_SetVideoMode(ScreenWidth, ScreenHeight, ColorDepth,         SDL_HWSURFACE | SDL_DOUBLEBUF |         SDL_FULLSCREEN);    }   else if (bFullscreen == false)  {       m_pScreen = SDL_SetVideoMode(ScreenWidth, ScreenHeight, ColorDepth,         SDL_HWSURFACE | SDL_DOUBLEBUF); }
"for a silent travel, u´d better take the next Train" (Lightning)

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

8

28.01.2014, 20:45

Nach return false war aber nicht gefragt...

Benutze bitte den Quellcode Modus um Code einzufügen. Dann ist der auch richtig formatiert.

Gelöschter Benutzer

unregistriert

9

28.01.2014, 20:52

Ich kann dir zwar nicht direkt weiterhelfen, aber einen Tipp geben (ich habe den Tipp damals auch bekommen und ich fand, den sollte jeder bekommen :D ). Ich vermute mal du lernst mit "C++ für Spieleprogrammierer" (weil doch viel Code ziemlich gleich ist wie aus dem Buch). Verwende doch den Konstruktor und Destruktor anstatt der Init(); und Quit(); Funktion. Hält den Code etwas sauberer, und vor allem, die Initialisierungen und "Deinitialisierungen" passieren ganz automatisch, so dass man nicht ausversehen über Fehler stolpern könnte, die unbewusst passieren.

Nightmaremen

Treue Seele

  • »Nightmaremen« ist der Autor dieses Themas

Beiträge: 110

Beruf: Schüler

  • Private Nachricht senden

10

28.01.2014, 21:32

also erstmal @alex : danke für den tipp :) sobald das spiel läuft werd ich mich daran machen das umzupacken , nur leider ist das nichtmehr das endprojekt des buches sondern ich versuche gerade aus dem was ich darin lernte , ein halbwegs spielbares selbsterzeugtes ergebnis zu schustern nur leider bin ich wegen dem fehler nicht über den spieler hinausgekommen , dabei hatte ich geplant bereits an der KI soweie den gegnern und dem spawnsystem zu sitzten ... das liegt momentan aber flach

dann @Tankard: sry ich glaube ich habe da was falsch verstanden hat sich aber erledigt . ich habe den text nochmal durchsucht und tatsächlich ein exit (1) gefunden jedoch ist mein problem nur noch größer geworden ... die stelle ist nämlich folgende

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void CSprite::Load(const string sFilename)
{
    // Bitmap laden
    m_pImage = SDL_LoadBMP(sFilename.c_str());

//fehlercheck
    if (m_pImage == NULL)
    {
        cout << "Fehler beim Laden von: " << sFilename.c_str();
        cout << endl;
        cout << "Fehlermeldung: " << SDL_GetError() << endl;

        g_pFramework->Quit();

        exit(1);
    }



in der Funktion lade ich die bitmaps nur ist mein Problem jetzte nurnoch schlimmer geworden ... denn damit hatte ich gerechnet aber leider habe ich seit 3 tagen genau dort nach dem übeltäter gesucht und bin zu keinem ergebnis gekommen ....

an der Farbentiefe und den Formaten liegt es meiner (anfänger-) meinung nach nicht die habe ich schon mehrfach überprüft und auch im fensteredit die farbtiefe entsprechend angepasst ... auch die bitmap/animationsbereiche habe ich jeweils vorab bereits berechnet daher gehe ich davon aus das es daran nicht liegt, zumal ich auch das schon mindestens 10 mal überprüft habe, in der Hoffnung das es daran liegt ...

vielleicht wisst ihr ja weiter aber mir fällt nixmehr ein was an den bitmaps nich stimmen könnte, da sie auch korrekt ins projekt eingefügt wurden .
so langsam macht sich ein Gefühl breit bei mir , das ich hier irgendwie großen Bockmist gebaut habe :( .
"for a silent travel, u´d better take the next Train" (Lightning)

Werbeanzeige