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

  • »idioticprogrammer« ist der Autor dieses Themas

Beiträge: 18

Wohnort: Im Computer

Beruf: Schüler

  • Private Nachricht senden

1

01.02.2014, 16:06

SDL 2.0 Hintergrundtextur wird nicht angezeigt

Hey ich habe ein programm geschrieben um Texturen zu laden (also nix besinderes) nun habe ich das problem das die textur die ich ausgewählt habe nicht angezeigt wird(irgendwie ironisch XD) jedenfals hab ich nix im internet gefunden und wollte deshalb euch fragen .
ich bedanke mich für alle Antworten im voraus :).

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "SDL.h"
#include <stdio.h>

bool init();
bool loadMedia();
void close();

SDL_Window* window = NULL;
SDL_Surface* screen = NULL;
SDL_Surface* loadingPicture = NULL;

bool init()
{
    bool success = true;

    //initialisiert SDl
    if (SDL_Init (SDL_INIT_VIDEO) < 0)
    {
        printf("SDL konnte nicht initialisiert werden ! SDL_Error: %s\n", SDL_GetError());
        success = false;
    }
    else
    {
        //create Window
        window = SDL_CreateWindow("A Resume Game : Astroman", 300,300,400,700,SDL_WINDOW_SHOWN);
        if (window = NULL)
        {
            printf("Fenster konnte nicht erstellt werden ! SDL_Error: s%\n", SDL_GetError());
            success = false;
        }
        else
        {
        //Get Window Surface
            screen = SDL_GetWindowSurface ( window );
        }
    }
    return success;
}

bool loadMedia()
{
    bool success = true;
    loadingPicture = SDL_LoadBMP("02_getting_an_image_on_the_screen/Back.bmp");
    if (loadingPicture = NULL)
    {
        printf("Textur konnte nicht geladen werden %s! SDL_Error: %s\n","02_getting_an_image_on_the_screen/Back.bmp",SDL_GetError());
        success = false;
    }

    return success;
}

void close()
{
    //close screen
    SDL_FreeSurface( loadingPicture );
    loadingPicture = NULL;
    //Destroys window
    SDL_DestroyWindow( window );
    window = NULL;
    // Quit SDl
    SDL_Quit();
}


int main(int argc, char* args[]) {

    if(!init())
    {
        printf("Initialisierung fehlgeschlagen !\n");
    }
    else
    {
    if(!loadMedia())
    {
        printf("Laden der Textur gescheitert\n");
    }
    else
    {
        //Textur Öffnen
        SDL_BlitSurface ( loadingPicture, NULL, screen, NULL);
        SDL_UpdateWindowSurface( window );
        SDL_Delay (60000); // Zeitspanne des geöffneteten Fensters
    }

    }
    
    close();
    return 0;
}

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

01.02.2014, 16:22

Zeile 26 würde ich abändern.
Du hast:

C-/C++-Quelltext

1
if (window = NULL)


und ich würde zu

C-/C++-Quelltext

1
if (window == NULL)


raten.

Ebenso Zeile 44:

C-/C++-Quelltext

1
if (loadingPicture = NULL)


auf die gleiche Weise abändern. ;)

Da screen NULL ist (Ein Null Window hat nun mal keine Surface) und dein Picture auch Null ist siehst du auch nix. Wie auch. ;)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

  • »idioticprogrammer« ist der Autor dieses Themas

Beiträge: 18

Wohnort: Im Computer

Beruf: Schüler

  • Private Nachricht senden

3

01.02.2014, 17:18

Hab ich gemacht aber es wird immer noch nix angezeigt :(
trotzdem danke für die antwort :)

Counterfeit

Frischling

Beiträge: 32

Beruf: Softwareentwickler

  • Private Nachricht senden

4

04.02.2014, 09:11

1) Dein else-Block muss in eine Schleife, damit du überhaupt was sehen kannst
2) Nach SDL_BlitSurface muss ein SDL_Flip kommen

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

5

04.02.2014, 11:33

1) Dein else-Block muss in eine Schleife, damit du überhaupt was sehen kannst
2) Nach SDL_BlitSurface muss ein SDL_Flip kommen

SDL_UpdateWindowSurface ist in SDL 2.x der Ersatz für SDL_Flip.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige