 |
JLI Spieleprogrammierung
|
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
|
Verfasst am: 30.05.2006, 15:25 Titel: Linken geht, Ausführung stürzt ab |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 30.05.2006, 16:14 Titel: |
|
|
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 |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 30.05.2006, 17:45 Titel: |
|
|
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.  | 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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.05.2006, 21:08 Titel: |
|
|
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 |
|
 |
Fossil Mini JLI'ler
Alter: 89 Anmeldedatum: 07.03.2006 Beiträge: 11 Wohnort: Tübingen Medaillen: Keine
|
|
Nach oben |
|
 |
valentin_ Mini JLI'ler

Alter: 34 Anmeldedatum: 16.07.2006 Beiträge: 28 Wohnort: Graz Medaillen: Keine
|
Verfasst am: 20.07.2006, 11:36 Titel: |
|
|
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 |
|
 |
David Super JLI'ler
Alter: 40 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 20.07.2006, 12:53 Titel: |
|
|
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 |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 20.07.2006, 13:06 Titel: |
|
|
Was David eingentlich sagen wollte 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 |
|
 |
valentin_ Mini JLI'ler

Alter: 34 Anmeldedatum: 16.07.2006 Beiträge: 28 Wohnort: Graz Medaillen: Keine
|
Verfasst am: 20.07.2006, 13:20 Titel: |
|
|
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 |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 20.07.2006, 13:45 Titel: |
|
|
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 |
|
 |
valentin_ Mini JLI'ler

Alter: 34 Anmeldedatum: 16.07.2006 Beiträge: 28 Wohnort: Graz Medaillen: Keine
|
Verfasst am: 20.07.2006, 13:50 Titel: |
|
|
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 |
|
 |
|
|
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
|