Du bist nicht angemeldet.

Werbeanzeige

1

04.01.2015, 15:06

Probleme mit Landscape/Portrait C++/SDL2

Hallo
ich experimentiere schon seit einiger zeit mit SDL2 und kann damit mitlerweile echt viel machen ;)
Nun ist mir die Tage aufgefallen, dass wenn ich ein SDL2 Programm in Android ausführen
will und den screen oder besser gesagt das Handy drehe, mein programm immer abstürtzt

-> bei SDL1.2 und SDL2/OpenGl Es funtioniert alles reibungslos... warum ??

nach tiefere recherche in google fand ich raus, das es anscheind mit dem SDL_GetDesktopDisplayMode
sowie dem "event.window" zusammen hängt - doch leider finde ich im Netz nur was im zusammenhang mit OpenGL ES

-> da ich aber momentan kein OpenGL Es benötige wollte ich euch mal fragen, ob ihr mir weiterhelfen könnt
ich habe ein einfaches programm mit nen cursor programmiert , der sich mithilfe des touchscreen bewegen lässt

- wenn ich mein Handy aber drehe dann wird das programm nur noch bis zur hälfte dargestellt
(von portrait in landsape -> total verzehrt || von landscape nach portrait nur noch halb)
und ich kann nichts mehr machen

:dash:

Architekt

Community-Fossil

Beiträge: 2 490

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

04.01.2015, 15:26

Hast du das Problem im offiziellen SDL Forum mal angesprochen? Ansonsten wäre es nett, wenn du den entsprechenden Code zeigst.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

3

04.01.2015, 21:32

hey ich hab mir heute nochmal einige Beispiele ganz genau angeschaut und bin zu folgendem ergebnis gekommen:

-> jetzt kann man das handy auch drehn :) :thumbsup: :thumbup:

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
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>

#define __USE_C99_MATH
#include <stdbool.h>

SDL_Surface* screen =NULL;
SDL_Surface* window = NULL;
SDL_Surface* Background = NULL;
SDL_Surface* Cursor = NULL;

int main(int argc, char** argv)
{
  SDL_DisplayMode mode;
  SDL_Init(SDL_INIT_VIDEO);
  SDL_GetDesktopDisplayMode(0, &mode);

 SDL_Window * window = SDL_CreateWindow("SDL Example",
                                         SDL_WINDOWPOS_UNDEFINED,
                                         SDL_WINDOWPOS_UNDEFINED,
                                         mode.w, mode.h,
                                         SDL_WINDOW_SHOWN );

  screen = SDL_GetWindowSurface(window);

  Background = SDL_LoadBMP("data/background.bmp");
  Cursor = IMG_Load("data/cursor.png");

 SDL_Rect cursorPosition;
 cursorPosition.x = 100;
 cursorPosition.y = 300;


 SDL_Event event;
 bool quit;

 //GAME LOOP
 while (quit == false)
 {
    while (SDL_PollEvent(&event))
 {
  switch(event.type)
  {
   case SDL_QUIT:
   quit= true;
   break;
  }

   if(event.type == SDL_MOUSEMOTION)
   {
    cursorPosition.x = event.motion.x;
    cursorPosition.y = event.motion.y;
   }


     if (event.type == SDL_WINDOWEVENT &&
      event.window.event == SDL_WINDOWEVENT_RESIZED)
     {
       screen =  SDL_GetWindowSurface(window);
       SDL_UpdateWindowSurface(window);
      }
 }

  SDL_BlitSurface(Background, NULL, screen, NULL);
  SDL_BlitSurface(Cursor, NULL, screen,&cursorPosition);

  SDL_UpdateWindowSurface(window);
 }

 SDL_DestroyWindow(window);
 SDL_FreeSurface(screen);

 SDL_FreeSurface(Background);
 SDL_FreeSurface(Cursor);

 IMG_Quit();
 SDL_Quit();
 return 0;
}


ich hoffe ich konnte anderen weiterhelfen

Architekt

Community-Fossil

Beiträge: 2 490

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

04.01.2015, 22:32

Was genau war denn das Problem? Eine kleine Zusammenfassung wäre sicher hilfreich.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige