Device Orientation ändern bei Cocos2D V2.1 + CocosBuilder

  • Device Orientation ändern bei Cocos2D V2.1 + CocosBuilder

    Hallo zusammen,

    ich verzweifle aktuell an einem Problem mit der Device Orientation in einem Cocos2D App. Ich will folgendes in meiner App umsetzen: Die App soll je nach Screen entweder in den Portrait Modus schalten oder in den Landscape. Automatische Rotationen sollen nicht möglich sein. Also Screen A soll nur Portrait sein und wechsel ich zu Screen B soll das App automatisch in den Landscape Modus gehen.

    Ich bekomme es nur überhaupt nicht hin. Im Internet habe ich gelesen, dass man das ganze jetzt über die Methode -shouldAutorateDevicOrientation (oder so ähnlich) bei jedem ViewCobntroller regeln kann. Aber bei dem Konzept von Cocos2D gibt es nur einen ViewController die ganze Zeit mit na GLView, welche als RootViewController in einem NavigationController gepackt wird. Deswegen kann ich am Anfang über die Methode ein Orientation setzen. Aber wie mach ich das, wenn ich die device Orientation zur Laufzeit nochmal ändern will?

    Vielleicht hat das jemand schon mal mit Cocos2D umgesetzet oder einen Lösungsvorschlag? Mir gehen nämliuch langsam die Ideen aus.

    Vielen dank Schonmal.

    Gruß
    MasterOP22
  • Tach!

    Da hier keine Antwort gekommen ist, habe ich natürlich noch ewig weitergeforscht und habe jetzt endlich eine brauchbare Lösung, die ich gerne hier Posten möchte:

    Die Lösung sieht so aus, dass einfach die in cocos2D verwendete EAGLView stumpf gedreht wird. fertig!

    Quellcode

    1. EAGLView *glView = [[CCDirector sharedDirector] openGLView];
    2. CGRect rect = CGRectMake(0, 0, DEVICE_HEIGHT,DEVICE_WIDTH);
    3. glView.bounds = rect;
    4. glView.center = CGPointMake(DEVICE_WIDTH/2.0, DEVICE_HEIGHT/2.0);
    5. [[[CCDirector sharedDirector] openGLView] setTransform:CGAffineTransformMakeRotation(M_PI_2)];
    6. [[CCDirector sharedDirector]reshapeProjection:rect.size];


    Wobei DEVICE_WIDTH in den Fall 1024 und HEIGHT = 768. Für Retina muss man dies natürlich anpassen.