JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=cdf207fbb7c1a8493a5a7b72feb4b3dfMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Linken geht, Ausführung stürzt ab

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Fossil
Mini JLI'ler


Alter: 89
Anmeldedatum: 07.03.2006
Beiträge: 11
Wohnort: Tübingen
Medaillen: Keine

BeitragVerfasst am: 30.05.2006, 15:25    Titel: Linken geht, Ausführung stürzt ab Antworten mit Zitat

Hallo jli-Gemeinde,

ich hänge immer noch an Kapitel 19 fest, gebe aber zu, daß ich in letzer Zeit nicht fleißig war (Garten, Sommer(?), Familie). Ich versuche gegenwärtig etwas ganz Einfaches: im Programm "Test Sprite" den fighter durch ein anderes Sprite zu ersetzen, indem ich den IMAGE_FILE ändere.


//#define IMAGE_FILE "..\\..\\media\\fighter.bmp"
//#define SPRITE_WIDTH 74
//#define SPRITE_HEIGHT

#define IMAGE_FILE "e:\\eigene Dateien\\GenesisCD\\Buch\\BitMaps\\House3.bmp"
#define SPRITE_WIDTH 256
#define SPRITE_HEIGHT 256


Also: Zunächst habe ich den vollständigen Pfad für den fighter eingesetzt, das funktioniert. Dann habe ich (s.o.) "...\\fighter.bmp" durch "e:\\...\\house3.bmp" ersetzt, wobei house3.bmp 256x256 Pixel groß ist, also gut auf die 600x800 Oberfläche paßt (SpriteX und SpriteY habe ich auf 0 gesetzt.)

Komplieren verläuft ohne Fehler oder Warnung, ebenso das Linken. Bei der Ausführung wird noch die Message Box gezeigt, die u.a. die Verschiebemöglichkeit anzeigt, nach OK erscheint eine Message box, die einen Fehler in der Anwendung in TestSprite.exe anzeigt:

Die Anweisung in "0x736f9e76" verweist auzf Speicher "0x000000004". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.

Die Sache ist insoweit interessanter, als ich dieses Phänomen vor einiger Zeit mit allen Programmen des Kapitels 19 hatte. Ich habe netürlich an einigen dieser Programme herummanipuliert, aber was ich angestellt habe und warum plötzlich alle, auch die nicht berührten, so reagieren, ist mir schleierhaft. Ich habe mir so geholfen, daß ich alle Bespielprogramme von der CD in einen neuen Ordner geladen habe und wollte eigentlich die ganze Sache vergessen, aber jetzt ist es wieder aktuell geworden.

Noch eine Frage: wie tranferiert ihr eigentlich einen Teil des Progammcodes in eine Nachricht wie diese hier? Ich habe es zwar mit Kopieren/Einfügen auch geschafft, aber Eure Mitteilungen sehen einfach besser aus.

Kann mir jemand helfen? Vielen Dank.
Euer Fossil
_________________
Weissjurabeta
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 30.05.2006, 16:14    Titel: Antworten mit Zitat

Sicher, dass der Pfad stimmt? Wie schaut deine Laderoutine aus? Ist mit der Bitmap alles ok?

Um den Code so hübsch formatiert anzeigen zukönnen, gibt's die CPP-Tags. ;)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 30.05.2006, 17:45    Titel: Antworten mit Zitat

schon mal mit debuggen versucht? damit du weißt, wo genau dein Programm abstürzt?

btw:
GreveN hat Folgendes geschrieben:

Um den Code so hübsch formatiert anzeigen zukönnen, gibt's die CPP-Tags. Wink
kleines Beispiel:
Code:
 [cpp] hier dein C++-Code [/cpp]

um Sachen farbig hervorheben zu können:
Code:
 [cpp] >>>hier dein hervorgehobener C++-Code<<< [/cpp]

sieht dann so aus:
CPP:
normal
hervorgehoben


Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.05.2006, 21:08    Titel: Antworten mit Zitat

jup also Kkonfiguration Debug wählen, und dann compileieren. Evtl. Windowed-Mode einscahtlen (also nicht Fullscreen) dann müsste bei einem Programmabsturz ein Fenster aufgehen in dem du auf Debug klicken kannst, dann bekommst du genau die Programmzeile angezeigt in der es den Crash gab, außerdem kannst du die Inhalte aller Variablen nachschauen, usw.
Wahrscheinlich liegt es einfach daran, das er die Datei nicht finden kann. Für später lohnt es sich dann eine Sprite klasse zu programmieren, die die Datei überprüft, und wenn sie nicht geladen werden kann, einen Fehler ausgibt, bzw. in ein Logbuch schreibt.
Bei mir ist es so, das das Prog zwar mie s läuft, oder evlt. abstürtzt ich dann aber genau sehen kann, welche DAtei ich veruscht habe zu laden und so den Fehler sehr schnell beheben kann, so dass wieder alles glatt läuft.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fossil
Mini JLI'ler


Alter: 89
Anmeldedatum: 07.03.2006
Beiträge: 11
Wohnort: Tübingen
Medaillen: Keine

BeitragVerfasst am: 01.06.2006, 15:50    Titel: Linken geht, Ausführung stürzt abLiebe G Antworten mit Zitat

Liebe GreveN, DirectXer und Jonathan_Klein,

vielen Dank für Eure Anregungen. Es war tatsächlich ein Fehler im Pfad. Ich habe so oft die Beispiele von der Buch-CD heruntergeholt und wieder gelöscht, daß sich da ein Fehler eingeschlichen hat.

Euer http://www.jliforum.de/board/images/smiles/icon_biggrin.gif
http://www.jliforum.de/board/images/smiles/icon_biggrin.gif
Fossil
_________________
Weissjurabeta
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
valentin_
Mini JLI'ler


Alter: 34
Anmeldedatum: 16.07.2006
Beiträge: 28
Wohnort: Graz
Medaillen: Keine

BeitragVerfasst am: 20.07.2006, 11:36    Titel: Antworten mit Zitat

Habe so ziemlich das selbe Problem wie Fossil es beschrieben hat. Linken und ausführen funktioniert ohne Probleme nur an genau der Stelle wo das Sprite gezeichnet werden sollte, kommt diese Fehlermeldung. zu dem wenn ich da auf debuggen klick, kommt die selbe fehlermeldung wieder, nur ohne "debuggen"-button.


Bin dabei den JLI_ASTEROIDS Code zu erweitern(mit Items und so):


CPP:
void CreateItem(int nextItem)
{
   CSprite* Item = new CSprite;

   float x=rand()%940+15;
   float y=rand()%700+15;

switch(nextItem)
{
case 0:
sprintf(IDItem,"ITEM_CROSS_");
break;
case 1:
sprintf(IDItem,"ITEM_BLITZ_");
break;
case 2:
sprintf(IDItem,"ITEM_MAGNET_");
break;
case 3:
sprintf(IDItem,"ITEM_BOMB_");
break;
}

Item->Create(Direct3D.GetDevice(),&ResourceManager,1);
Item->SetPosition(x, y);

Item->AddTexture(ResourceManager.GetTexture(IDItem));
Item->Draw();   
}



CPP:
#define ITEM_CROSS_   "D:\\Grafik\\Item_Cross.png"
#define ITEM_BLITZ_      "D:\\Grafik\\Item_Blitz.png"
#define ITEM_MAGNET_   "D:\\Grafik\\Item_Magnet.png"
#define ITEM_BOMB_      "D:\\Grafik\\Item_Bomb.png"


Danke schonmal im vorrraus!!
valentin_
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
David
Super JLI'ler


Alter: 40
Anmeldedatum: 13.10.2005
Beiträge: 315

Medaillen: Keine

BeitragVerfasst am: 20.07.2006, 12:53    Titel: Antworten mit Zitat

Hi!

Da sind eindeutig einige Anführungszeichen zuviel, oder?
Dieser ganze #define Kram is sowiso Müll, überleg dir da doch eine bessere Alternative...

grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 20.07.2006, 13:06    Titel: Antworten mit Zitat

Was David eingentlich sagen wollte Wink ist:

Lass die doppelten Hochkommata (") bei sprintf() weg:

CPP:
sprintf(IDItem, ITEM_CROSS_);


Eine Alternative zu der Lösung mit #define ist, z.B. std::strings zu verwenden:

CPP:
const std::string ITEM_CROSS =  "D:\\Grafik\\Item_Cross.png";


C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
valentin_
Mini JLI'ler


Alter: 34
Anmeldedatum: 16.07.2006
Beiträge: 28
Wohnort: Graz
Medaillen: Keine

BeitragVerfasst am: 20.07.2006, 13:20    Titel: Antworten mit Zitat

Ja es ist zwar schöner ohne #define, aber daran liegt doch nicht der Fehler. Die doppelten " hab ich weggeben, jetzt kommt keine Fehlermeldung mehr, aber es erscheit auch kein Sprite.
wieso??

valentin_
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 20.07.2006, 13:45    Titel: Antworten mit Zitat

Wenn du 'std::string' verwendest und unbedingt bei 'sprintf' bleiben willst, musst du die Methode 'c_str' vom Stringobjekt aufrufen, da 'sprintf' ein klassischen C-String erwartet.

Grafiken auch im korrekten Verzeichnis/Pfadangaben korrekt etc.?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
valentin_
Mini JLI'ler


Alter: 34
Anmeldedatum: 16.07.2006
Beiträge: 28
Wohnort: Graz
Medaillen: Keine

BeitragVerfasst am: 20.07.2006, 13:50    Titel: Antworten mit Zitat

Hab jetzt den fehler fefunden. es wird bei mir Item->Draw() nur ein einziges mal aufgerufen!!

Dann sollte es funktioniern!

Trotzdem DANKE!!

valentin_
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum