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

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

1

28.01.2011, 23:04

[C++ & SDL] Colorkey funktioniert nicht -.-'

hallo leute,

ich hab nach einer etwas längeren pause wieder mit der SDL angefangen und schon hab ich mein erstes Problem... der ColorKey den ich setze funktioniert nicht und lässt das Fenster abstürzen.( Ohne die Zeile mit dem ColorKey funktioniert es einwandfrei) Hier findet ihr mal mein SDL-Test Programm:

http://codepad.org/DQoUVzLh

Als Compiler benutze ich sowohl Code::Blocks als auch Visual C++ 2010. Bei beiden wird mir kein Fehler angezeigt, sondern nur, ein kurzes aufblitzen des Fensters und der sofortige Absturz. Das sind nur die letzten Zeilen bei Visual C++ 2010:



Zitat:



Eine Ausnahme (erste Chance) bei 0x00191530 in SDL-Test.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000004.
Unbehandelte Ausnahme bei 0x00191530 in SDL-Test.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000004.
Das Programm "[4868] SDL-Test.exe: Systemeigen" wurde mit Code -1073741819 (0xc0000005) beendet.




Ich hoffe ihr könnt mir helfen

(Link)



Mit freundlichen Grüßen



Jawaiica'
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

2

28.01.2011, 23:21

Den von dir beschriebenen Fehler kann ich nicht nachvollziehen. Es scheint nicht am ColorKey zu liegen (die Funktion liefert übrigens -1 zurück, wenn etwas schief gegangen ist - nur so als Info).
Allerdings habe ich kein IMG_Load() benutzt, sondern ein normales SDL_LoadBMP(), denn ich habe die Lib nicht auf dem Rechner.

Aber beim Herunterfahren der SDL ( also SDL_Quit() ) stürzt es bei mir ab.

Gruß
SaRu_

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

3

29.01.2011, 10:23

hmm also ich hab mal bei Code Blocks den Code ein wenig verändert... Habe statt IMG_Load() jetzt SDL_LoadBMP() und das SDL_Quit() am Ende entfernt aber dennoch funktioniert es nicht! Hier Code Blocks spuckt auch was aus:


Process terminated with status 3 (0 minutes, 1 seconds)

MfG Jawaiica'
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

4

29.01.2011, 11:39

Process terminated with status 3 (0 minutes, 1 seconds)

Das sagt uns jetzt nichts, weil hier wohl niemand weiß, wann bzw. wo dein Programm mit Code 3 beendet wird, da musst du schon selbst nach suchen.

Das SDL_Quit() zu entfernen, ist keine gute Ideen, das sollte definitiv drinbleiben. Wenn es dabei zu einem Fehler kommt, kann es entweder sein, dass vorher irgendwo irgendwas schief gelaufen ist, aber erst beim Freigeben der Resourcen der Fehler "entdeckt" wird. Du solltest also probieren alle Stellen, wo ein Problem auftreten könnte, abzusichern und zu prüfen, ob eins aufgetreten ist. Dann kannst du einen Fehler auch später an diese Stelle zurückverfolgen und sparst dir das suchen. ;) Andererseits kann es auch bedeuten das etwas mit der SDL Bibliothek nicht stimmt. Das ist der eher unwahrscheinliche Fall, insbesondere wenn sie bei anderen Anwendungen funktioniert (schon getestet?), aber es besteht halt eine Möglichkeit, besonders wenn du LIBs & DLL selbst kompiliert hast.

Gruß
SaRu_

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

5

29.01.2011, 11:56

hmm also das programm funktioniert ja einwandfrei ohne die Zeile mit MyColorKey(...) auch wenn die Funktion oben steht aber halt nicht aufgerufen wird.
ich habe in das programm jetzt ein paar events reingeschrieben ( http://codepad.org/YV4js22A ) und das funktioniert alles nur nicht, wenn ich die funktion aufrufe. Wenn ich den ColorKey normal aufrufe geht es allerdings auch nicht....
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

6

29.01.2011, 13:37

Änder mal deine ColorKey-Funktion ab:

C-/C++-Quelltext

1
2
3
4
5
6
7
void MyColorKey(int R, int G, int B, SDL_Surface* sName)
{
    if( SDL_SetColorKey(sName, SDL_SRCCOLORKEY, SDL_MapRGB(sName->format, R, G, B)) < 0)
    {
        std::cout << "Konnte ColorKey nicht setzen: " << SDL_GetError() << std::endl;
    }
}



Gruß
SaRu_

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

7

29.01.2011, 13:52

2 Sachen: du überprüfst weder, ob dein Bild wirklich korrekt geladen wurde, noch prüfst du beim setzen des Colorkeys, ob ein valider Zeiger übergeben wurde. Die Abfrage, ob beim setzen des Colorkeys ein Fehler auftrat, hat dir ja bereits Saru_ gezeigt.
Dennoch würde ich dir raten, auch zu prüfen, ob das Bild geladen wurde und im Fehlerfall eine entsprechende Fehlermeldung auszugeben.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

8

29.01.2011, 13:54

Danke, aber da kommt leider immer noch der selbe Fehler. =(

@ Architekt


Ok, ich werde das mal hinzufügen, aber kann es denn daran liegen, dass das bild nicht geladen wurde? Ich meine, wenn ich die .exe ausführe, ohne diese eine Zeile ( MyColorKey(...) ), dann wird das Bild ja geladen.
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

9

29.01.2011, 14:06

Nein, das waren lediglich Ratschläge für ein besseres Design und für spätere Fehler schnell eine Lösung parat zu haben.
Was mich bei deinem Code noch wundert:
Du scheinst bei deinem Code mit der DOWN Taste das Bild "superToll" freizugeben, blittest jedoch ohne Überprüfung weiterhin das Bild.
Das sollte dir vllt. auch nochmal zu denken geben.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

10

29.01.2011, 14:25

ok hab das mal geändert aber der ColorKey funktioniert halt immer noch nicht. >.<
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

Werbeanzeige

Ähnliche Themen