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

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

11

29.01.2011, 14:41

ok hab das mal geändert aber der ColorKey funktioniert halt immer noch nicht. >.<

Hast du Saru_'s Rat bezüglich deiner MyColorKey Methode beherzigt?
Wenn ja: kommt keine entsprechende Fehlermeldung?
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

12

29.01.2011, 14:49

Ja hab ich und nein kommt sie nicht^^ Ich hab es nun anders versucht:
Ich habe meine Funktion MyColorKey(...) in das Event geschrieben, wo ein Bild geladen werden soll. Wenn ich das Programm starte, dann passiert nichts, also alles so wie es sollte. Drücke ich jedoch die Taste, dann wird das Programm mit dem von mir genannten Fehler beendet. [ Process terminated with status 3 (0 minutes, 1 seconds) ]. Ich habe außerdem die Funktion nicht geladen, sondern den ColorKey "manuell" geladen: SDL_SetColorKey(...) und da kam genau der selbe Fehler.
Dann hab ich diese Zeile wieder gelöscht und das Programm ging wieder einwandfrei.
"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

13

29.01.2011, 16:38

Probier das mal:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
void MyColorKey(int R, int G, int B, SDL_Surface* sName)
{
    unsigned int mask = SDL_MapRGB(sName->format, &r, &g, &b);
    int status = SDL_SetColorKey(sName, SDL_SRCCOLORKEY, mask);
    if (status < 0) {
        printf("Fail!");
    }
}
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

14

29.01.2011, 17:25

geht leider auch so nicht... der Colorkey müsste ja eig. von Anfang an gehen ohne dieses Abfragen etc. oder etwa nicht? Ich weiß auch nicht, woran es noch liegen könnte.. habt ihr vielleicht ein kleines Beispielprogramm da, wo der Colorkey verwendet wird UND funktioniert? Dann könnte ich das testen.
"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

15

29.01.2011, 17:28

C-/C++-Quelltext

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
#include <stdlib.h>
 #include <SDL/SDL.h>
 int main(int argc, char *argv[])
 {
     SDL_Surface *screen, *image;
     SDL_Rect dst;
     SDL_Event event;
     int done = 0;
     if (SDL_Init(SDL_INIT_VIDEO) == -1) {
         printf("Can't init SDL:  %s\n", SDL_GetError());
         exit(1);
     }
     atexit(SDL_Quit); 
     screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
     if (screen == NULL) {
         printf("Can't set video mode: %s\n", SDL_GetError());
         exit(1);
     }
     SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 255));
     image = SDL_LoadBMP("tux.bmp");
     if (image == NULL) {
         printf("Can't load image of tux: %s\n", SDL_GetError());
         exit(1);
     }
     dst.x = 200;
     dst.y = 200;
     dst.w = image->w;
     dst.h = image->h;
     SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(image->format, 255, 0, 0));
     SDL_BlitSurface(image, NULL, screen, &dst);
     SDL_FreeSurface(image);
     SDL_Flip(screen);
     while (!done) {
         while (SDL_PollEvent(&event)) {
             switch (event.type) {
             case SDL_QUIT:
                 done = 1;
                 break;
             }
         }
     }
     return 0;
 }
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

16

29.01.2011, 17:56

Ok, dass Programm stürzt auch ab. Ich hab die SDL aber richtig eingebunden ( nach mehreren tutorials sogar [ lazy foo zB ] ) und die SDL halt von hier gedownloaded http://www.libsdl.org/download-1.2.php woran kann das Problem denn noch liegen? -.-'
"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

17

29.01.2011, 18:07

Wie schon gesagt, meist daran, dass das Bild nicht ordnungsgemäß geladen wurde.
Probier das ganze mal mit SDL_MapRGBA und benutze als Flag einfach 0.

edit: kannst es ja mal probieren, und testen, ob deine Surface nicht NULL ist, sobald du mit Colorkeys arbeitest.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Architekt« (29.01.2011, 18:13)


Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

18

29.01.2011, 18:13

geht auch nicht. Aber ich lade das Bild doch eigentlich richtig, oder etwa nicht? ich erstelle ein SDL_Surface weise dem dann zu, dass es z.B. die Datei yey.jpg laden soll und dann soll dieses auf dem Hintergrund ausgegeben werden. Und ohne Colorkey funktioniert das ja auch wunderbar.
"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

19

29.01.2011, 18:14

Wie gerade im edit gesagt, teste mal, beim benutzen von Colorkeys, ob deine Surface NULL ist.
Mehr wüsst' ich auf Anhieb auch nicht, vllt kann ich mir das ja nachher mal genauer ansehen, aber wenn schon ein Testprogramm nicht ordnungsgemäß funktioniert...
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

20

29.01.2011, 18:18

Ehm ok und wie teste ich das am besten? nach dem Aufruf des Colorkeys fragen, ob zB. Supertoll == NULL ist?
"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