Iphone 4inch Problem mit App Auflösung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Iphone 4inch Problem mit App Auflösung

    Hallo,

    ich bastel gerade zum ersten mal an einem iPhone Spiel. Ich habe es für die "alten" iPhones mit 3,5" Display Retina und Normal geschrieben. Ich dachte jetzt die alten Spiele laufen alle ohne Probleme auch auf dem neuen 4" iPhone, einfach mit automatischen Rand oben und unten. Aber der Simulator des 4" iPhones streckt mir jetzt das Bild und alles passt nicht mehr.
    Dann müssten doch alle alten Apps auch Probleme machen?
    Oder gibt es irgend wo eine Funktion eventuell einen Plist Parameter den ich setzen kann um das 4" dazu zu bringen ein 3,5" display wie gehabt für mein Spiel zu verwenden?

    Und wenns am Code liegt mal zum überblich die MainView Klasse, viel steht da eh nicht drin. Ist wirklich recht simpel alles.

    Quellcode

    1. #import <UIKit/UIKit.h>
    2. #import "GameManager.h"
    3. #import <OpenGLES/EAGL.h>
    4. #import <OpenGLES/ES1/gl.h>
    5. #import <OpenGLES/ES1/glext.h>
    6. #import <QuartzCore/QuartzCore.h>
    7. @interface MainView : UIView <UIAccelerometerDelegate> {
    8. GameManager *gameManager;
    9. UIAccelerometer *accelerometer;
    10. EAGLContext *eaglContext;
    11. GLuint renderbuffer;
    12. GLuint framebuffer;
    13. GLuint depthbuffer;
    14. GLint viewportWidth;
    15. GLint viewportHeight;
    16. }
    17. - (void) setupOGL;
    18. - (void) accelerometer: (UIAccelerometer *) accelerometer
    19. didAccelerate: (UIAcceleration *) acceleration;
    20. @end
    Alles anzeigen


    Quellcode

    1. #import "MainView.h"
    2. #import "GameManager.h"
    3. @implementation MainView
    4. #pragma mark ============================= Init Methods ===============================
    5. + (Class) layerClass {
    6. return [CAEAGLLayer class];
    7. }
    8. - (void) setupOGL {
    9. CAEAGLLayer *eaglLayer = (CAEAGLLayer *) self.layer;
    10. eaglLayer.opaque = YES;
    11. eaglContext = [[EAGLContext alloc] initWithAPI: kEAGLRenderingAPIOpenGLES1];
    12. if (!eaglContext || ![EAGLContext setCurrentContext: eaglContext]) {
    13. [self release];
    14. } else {
    15. //Renderbuffer
    16. glGenRenderbuffersOES(1, &renderbuffer);
    17. glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer);
    18. //Framebuffer
    19. glGenFramebuffersOES(1, &framebuffer);
    20. glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);
    21. glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, renderbuffer);
    22. //Graphic context
    23. [eaglContext renderbufferStorage: GL_RENDERBUFFER_OES fromDrawable: eaglLayer];
    24. glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &viewportWidth);
    25. glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &viewportHeight);
    26. //Depthbuffer (3D only)
    27. glGenRenderbuffersOES(1, &depthbuffer);
    28. glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthbuffer);
    29. glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, viewportWidth, viewportHeight);
    30. glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthbuffer);
    31. glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer); //rebind
    32. if (!gameManager) {
    33. gameManager = [GameManager getInstance];
    34. }
    35. }
    36. }
    37. #pragma mark ============================= Draw Method ===============================
    38. - (void) drawRect: (CGRect) rect {
    39. glViewport(0, 0, viewportWidth, viewportHeight);
    40. glClearColor(0.0, 0.0, 0.0, 1.0);
    41. //fuer 2D reicht glClear(GL_COLOR_BUFFER_BIT); da GL_DEPTH_TEST disabled
    42. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    43. if (!accelerometer) {
    44. accelerometer = [UIAccelerometer sharedAccelerometer];
    45. accelerometer.delegate = self;
    46. accelerometer.updateInterval = 0.033;
    47. }
    48. [gameManager drawStatesWithFrame: rect];
    49. [eaglContext presentRenderbuffer: GL_RENDERBUFFER_OES];
    50. }
    51. #pragma mark ============================= Input Handling ===============================
    52. - (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
    53. [self setMultipleTouchEnabled: YES];
    54. CGPoint p = [[touches anyObject] locationInView: self];
    55. [gameManager touchBegan: p];
    56. NSSet *allTouches = [event allTouches];
    57. //NSLog(@"Tap count: %i", [allTouches count]);
    58. if ([allTouches count] == 1)
    59. {
    60. //NSLog(@"1 Finger-Rot:");
    61. // to dies weil 1 finger!
    62. }
    63. if ([allTouches count] == 2)
    64. {
    65. //NSLog(@"2 Finger-Blau:");
    66. multyclick2=1;
    67. // to dies weil 2 finger!
    68. }
    69. if ([allTouches count] == 3)
    70. {
    71. //NSLog(@"3 Finger-Grün:");
    72. multyclick3=1;
    73. // to dies weil 2 finger!
    74. }
    75. if ([allTouches count] == 4)
    76. {
    77. //NSLog(@"4 Finger-Gelb:");
    78. multyclick4=1;
    79. // to dies weil 2 finger!
    80. }
    81. if ([allTouches count] == 5)
    82. {
    83. //NSLog(@"5 Finger-Orange:");
    84. multyclick5=1;
    85. // to dies weil 2 finger!
    86. }
    87. }
    88. - (void) touchesMoved: (NSSet *) touches withEvent: (UIEvent *) event {
    89. CGPoint p = [[touches anyObject] locationInView: self];
    90. [gameManager touchMoved: p];
    91. }
    92. - (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event {
    93. [gameManager touchEnded];
    94. }
    95. - (void) touchesCancelled: (NSSet *) touches withEvent: (UIEvent *) event {
    96. [gameManager touchEnded];
    97. }
    98. - (void) accelerometer: (UIAccelerometer *) sensor
    99. didAccelerate: (UIAcceleration *) acceleration {
    100. float x = acceleration.x; //-1 < 0 = links / 0 < 1 = rechts
    101. float y = acceleration.y; //-1 < 0 = nach unten / 0 < 1 = nach oben
    102. float z = acceleration.z; //-1 < 0 = display oben / 0 < 1 = display unten
    103. //NSLog(@"Sensor: x: %f y: %f z: %f", x, y, z);
    104. acelrateX=x; // Weil diese doofen warnmeldungen nerfen!
    105. acelrateY=y;
    106. acelrateZ=z;
    107. }
    108. -(void) dealloc {
    109. [gameManager release];
    110. if (eaglContext) {
    111. glDeleteRenderbuffersOES(1, &depthbuffer);
    112. glDeleteFramebuffersOES(1, &framebuffer);
    113. glDeleteRenderbuffersOES(1, &renderbuffer);
    114. [eaglContext release];
    115. }
    116. [super dealloc];
    117. }
    118. @end
    Alles anzeigen


    Hat jemand eine Idee? ?(
  • Mit der Einführung des iPhone 5 war das für eine gewisse Zeit möglich. Inzwischen akzeptiert Apple neue und aktualisierte Apps nur noch, wenn sie auch Auflösung des iPhone 5 unterstützen. Im Zweifelsfall kannst Du Dein Spiel ja in einen Subview packen, den Du im Hauptview zentrierst. Allerdings legen meines Erachtens gerade die Nutzer bei Spielen besonderen Wert darauf, dass die App auch die volle Fläche ausnutzt.
    „Meine Komplikation hatte eine Komplikation.“
  • Günther schrieb:

    Am besten einfach automatisch an die UIScreen.mainScreen.bounds anpassen, was machst du sonst, wenn das iPhone 6 plötzlich 4,1" hat?

    Nö, nicht die Screen-Koordinaten abfragen. Das machen doch die Viewcontroller alles automatisch, wenn die Autoresing-Masken bzw. das Autolayout vernünftig eingestellt ist.
    „Meine Komplikation hatte eine Komplikation.“