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

21

29.01.2011, 18:19

Ehm ok und wie teste ich das am besten? nach dem Aufruf des Colorkeys fragen, ob zB. Supertoll == NULL ist?

Jepp. Sofern "SuperToll" die Surface ist, die du mit SDL_SetColorKey verwendest.
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

22

29.01.2011, 18:26

Also einfach so zB.:

http://codepad.org/LsSGwpnI


? Ich lade das Bild, frage danach ab, ob das Laden erfolgreich war , setze den Colorkey und frage danach ab, ob das Surface == 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."

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

23

29.01.2011, 20:04

Jap, genau, oder mit der Erweiterung

C-/C++-Quelltext

1
if (TestPicture == NULL || TestPicture < 0) {
nur um sicherzugehen :)
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

24

29.01.2011, 20:25

Ok, ich hab das mal gemacht und jetzt ist meine Frage: Wo sehe ich denn, ob das Laden Null oder kleiner geworden ist? ^^ ich frage mich das schon etwas länger.
"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

25

29.01.2011, 20:31

Ok, ich hab das mal gemacht und jetzt ist meine Frage: Wo sehe ich denn, ob das Laden Null oder kleiner geworden ist? ^^ ich frage mich das schon etwas länger.

Du meinst die Ausgabe? Die steht in der Konsole. Oder was meinst du?
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

26

29.01.2011, 20:33

Jo die Ausgabe. Also in der Console müsste dann stehen, dass der das Bild nicht laden konnte richtig? Wenn ja, dann : Nein, das steht da nicht. Ich versuche mal Code::Blocks auf meinem Netbook zu installieren wenn das geht, versuche ich dort auch einmal, den Colorkey zu setzen. Ich schreib dann in ca. 15 min ob es geklappt hat oder nicht. ^^

//edit: Hmm schade ich kriege es nicht hin mit dem installieren auf meinem Netbook.
"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."

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Jawaiica« (29.01.2011, 20:55)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

27

29.01.2011, 21:25

Poste nochmal den ganzen Code hier ;)
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

28

29.01.2011, 21:31

hier? Ok kann ich machen moment:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include #include #include #include #include 

void MyColorKey(int R, int G, int B, int A, SDL_Surface* sName){    SDL_SetColorKey(sName, SDL_SRCCOLORKEY, SDL_MapRGBA(sName->format, R, G, B, A));}

int main(int argc, char* argv[]){
    //***************************VARIABLEN***********************************    SDL_Surface* buffer         = NULL;                                     //dient als Hintergrund    SDL_Surface* TestPicture    = NULL;                                     //Wird als Test Bild verwendet    SDL_Surface* SuperToll      = NULL;                                     //Test    SDL_Event                     Event;                                    //Erstellt ein Event    SDL_Rect                      Rect;    bool GameIsRunning          = true;                                     //wird als Spielschleifenbedingung benutzt    //***************************VARIABLEN***********************************
    SDL_Init(SDL_INIT_VIDEO);                                                                           //SDL_INIT_VIDEO initialisiert den "Video" modus.    buffer                      = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);        //800 = Breite, 600 = Höhe, 32 = Bits pro Pixel, SDL_HWSURFACE = Sagt, dass das Surface in der Hardware verarbeitet wird.                                                                                                        //SDL_SWSURFACE geht auch, dabei wird aber das Surface in der Software verarbeitet. Lieber mit der Hardware verarbeiten lassen,                                                                                                        //Da es bei der Software zu einem "Flickern" kommen kann ( bei Bewegungen ). Diese werden hier mit SDL_DOUBLEBUF verhindert.    SDL_WM_SetCaption("haha", NULL);                                                                    //Gibt den Namen des Fensters an

    while(GameIsRunning)                                                                                //Führt den Inhalt der Schleife solange aus, bis GameIsRunning auf false gestellt wurde.    {        if(SDL_PollEvent ( &Event ))        {            if(Event.type == SDL_KEYDOWN)            {                switch(Event.key.keysym.sym)                {                    case SDLK_ESCAPE:                    {                        GameIsRunning   = false;                    }break;                    case SDLK_UP:                    {                        //MyColorKey(255,0,255,0,SuperToll);                        SuperToll = IMG_Load("test.bmp");                        if(SuperToll < 0)                        {                            std::cout << "Bild konnte nicht geladen werden!" << SDL_GetError() << std::endl;                        }                    }break;                    case SDLK_DOWN:                    {                        SDL_FreeSurface(SuperToll);                    }break;                }            }            else if(Event.type == SDL_QUIT)            {                GameIsRunning           = false;            }
        }
    TestPicture                 = IMG_Load("3-big.jpg");                                                  //Hier wird dem Surface ein "Ziel" zugeordnet. In diesem Fall das Bild "yey.bmp". SDL_LoadBMP wird zum laden eines                                                                                                          //BMP Bildes verwendet. Mit IMG_Load werden andere Bildformate geladen.

    //MyColorKey(255,0,255,0,TestPicture);    if(TestPicture < 0 || TestPicture == NULL)    {        std::cout << "Konnte Bild nicht laden: " << SDL_GetError() << std::endl;    }
    SDL_BlitSurface(TestPicture, NULL, buffer, NULL);    SDL_BlitSurface(SuperToll, NULL, buffer, NULL);                                                       //Lässt das Bild abzeigen ÜBER dem Bildschirm(buffer).    SDL_Flip(buffer);                                                                                     //Updated den Bildschirm    }
    SDL_FreeSurface(TestPicture);                                                                         //Hiermit löschen wir das Bild und geben den Speicher wieder frei.    SDL_Quit();                                                                                           //Hiermit beendet man die SDL    return 0;}



Ich hoffe, dass es net unordentlich ausschaut^^







Wenn doch dann hier:


http://codepad.org/56chpOCl
"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

29

29.01.2011, 21:57

C-/C++-Quelltext

1
2
//MyColorKey(255,0,255,0,SuperToll);
                        SuperToll = IMG_Load("test.bmp")

Du setzt erst den Colorkey und lädst _danach_ das Bild?
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

30

29.01.2011, 22:32

naja ich habs gedreht und gewendet ... egal wie rum ich den benutzt habe es ging 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