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

1

08.11.2014, 12:39

SDL2 - Raumschiff wird nicht dargestellt

Hallo

Ich arbeite seit neusten mit SDL2 und habe vorher nochnie mit Klassen gearbeitet
ich hab im internet diesen code gefunden
http://stackoverflow.com/questions/22532…ent-not-working

nun hab ich das Problem dass zwar der hintergrund gezeigt wird aber nicht das Raumshiff

hier mein code, ich benutze Render und Textures...

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
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
 
SDL_Renderer* renderer = NULL;
SDL_Surface* ScreenSurface =NULL;
SDL_Surface* window = NULL;
 
SDL_Surface* Background = NULL;
SDL_Surface* Player = NULL;
       
       
        SDL_Texture * texture2 = SDL_CreateTextureFromSurface(renderer,Player);
       
SDL_Rect posPlayer;
       
class thePlayer
{
    public:
    thePlayer();
 
    void player_movement();
    void show_player();
 
 
    private:
};
 
 
thePlayer::thePlayer()
{
    posPlayer.x = 200;
    posPlayer.y = 300;
    posPlayer.w = 20;
    posPlayer.h = 30;
 
}
 
void thePlayer::player_movement()
{
   
}
 
void thePlayer::show_player()
{
    SDL_RenderCopy(renderer, texture2, NULL, NULL);  
         
   //SDL_BlitSurface( Player, NULL, renderer,NULL);  
    //SDL_SetColorKey(Player, SDL_TRUE, SDL_MapRGB(Player->format, 255, 255, 255));
}
 
 
int main(int argc, char** argv)
{
   
    SDL_Event event;
 
    SDL_Init(SDL_INIT_VIDEO);
 
SDL_Window * window = SDL_CreateWindow("SDL TestGame",
    SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,   480, 854, 0);
   
       
    SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0);
 
    Background= IMG_Load("background.png");
   
    Player = SDL_LoadBMP("ship.bmp");
   
       
       
        SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer,Background);
       
           
    bool quit = false;
    thePlayer myPlayer;
   
 //GAME LOOP
    while (quit == false)
    {
        SDL_RenderCopy(renderer, texture, NULL, NULL);  
         
        myPlayer.show_player();
        myPlayer.player_movement();
       
         SDL_RenderPresent(renderer);
    }
}


warum wird das raumschiff nicht dargestellt?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Patty1991« (08.11.2014, 12:44)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

08.11.2014, 16:07

Vermutlich, weil dein Renderer beim Aufruf in Zeile 12 noch NULL ist.
Du könntest dir den Rückgabewert mal anschauen oder Alternativ SDL_GetError aufrufen, wie in der Doku zu SDL_RenderCopy beschrieben:

Zitat

Returns 0 on success or a negative error code on failure; call SDL_GetError() for more information.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

3

08.11.2014, 16:59

kannst du mir das mal bitte kurtz richtig stellen, ich hab das so probiert:
aber es pop nur einmal kurtz auf und schließ sich wieder -.-

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
...
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
 
SDL_Window * window = SDL_CreateWindow("SDL TestGame",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,   480, 854, 0);

SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0);
 
SDL_Surface* Background = NULL;
SDL_Surface* Player = NULL;
...


ich weiss sonst nicht wie - so funktioniert es nicht
was für ein rückgabewert auf succes stellen? bin noch recht neu auf dem gebiet

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

08.11.2014, 18:28

Wenn dir SDL_RenderCopy eine 0 zurückgibt, dann gab es keine Fehler, ansonsten hast du was falsch gemacht und du kannst deinen Fehler durch einen Aufruf von SDL_GetError bekommen und ausgeben.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

5

09.11.2014, 18:18

Hallo!
Die Frage wurde durch Architekt schon beantwortet. Nimm doch einfach die Zeile 12 z.B. in die Zeile 70 runter.
Dann sollte es eigentlich funktionieren?

Lg

6

14.11.2014, 11:03

hallo, ersteinmal danke für soviel unterstützung (war lange nicht mehr ihr on)
so jetzt zum Problem:

Ich hab die 12te Zeile in die 70te gepackt und

C-/C++-Quelltext

1
SDL_Texture* texture2 = NULL 

oben hinzugefügt

es wird nur das Bild vom Background dargestellt
...
wenn ich das ganze mit BlitSurface mache und das fenster nicht über Renderer laufen lasse sonderen auch als surface (wie bei sdl 1.2)
funktioniert alles Tadellos ... mitlerweile hab ich auf diese Schiene Feinde und Schüsse -> alles wird dargestellt aber ich möchte gerne auf Render ebdende darstellen
wie im Beispiel oben

-> SDLGETError zeigt keine fehler an 8| ?(

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Patty1991« (14.11.2014, 13:59)


Werbeanzeige