OSDN Git Service

- Screen orientations implemented (NOTE: only works with either LANDSCAPE -or- PORTRA...
authorChristoph Aschwanden <contact@noblemaster.com>
Thu, 27 Sep 2012 09:03:47 +0000 (18:03 +0900)
committerChristoph Aschwanden <contact@noblemaster.com>
Thu, 27 Sep 2012 09:03:47 +0000 (18:03 +0900)
- Invaders update (OGG -> WAV)

backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSApplication.java
demos/invaders/gdx-invaders-android/assets/data/explosion.ogg [deleted file]
demos/invaders/gdx-invaders-android/assets/data/explosion.wav [new file with mode: 0644]
demos/invaders/gdx-invaders-android/assets/data/shot.ogg [deleted file]
demos/invaders/gdx-invaders-android/assets/data/shot.wav [new file with mode: 0644]
demos/invaders/gdx-invaders/data/explosion.ogg [deleted file]
demos/invaders/gdx-invaders/data/explosion.wav [new file with mode: 0644]
demos/invaders/gdx-invaders/data/shot.ogg [deleted file]
demos/invaders/gdx-invaders/data/shot.wav [new file with mode: 0644]
demos/invaders/gdx-invaders/src/com/badlogic/gdxinvaders/GdxInvaders.java
demos/invaders/gdx-invaders/src/com/badlogic/gdxinvaders/screens/GameLoop.java

index ee790be..84107fa 100644 (file)
@@ -18,7 +18,11 @@ package com.badlogic.gdx.backends.ios;
 import cli.MonoTouch.Foundation.NSDictionary;\r
 import cli.MonoTouch.UIKit.UIApplication;\r
 import cli.MonoTouch.UIKit.UIApplicationDelegate;\r
+import cli.MonoTouch.UIKit.UIDevice;\r
+import cli.MonoTouch.UIKit.UIDeviceOrientation;\r
+import cli.MonoTouch.UIKit.UIInterfaceOrientation;\r
 import cli.MonoTouch.UIKit.UIScreen;\r
+import cli.MonoTouch.UIKit.UIViewController;\r
 import cli.MonoTouch.UIKit.UIWindow;\r
 import cli.System.Console;\r
 import cli.System.Drawing.RectangleF;\r
@@ -58,9 +62,29 @@ public class IOSApplication extends UIApplicationDelegate implements Application
        @Override\r
        public boolean FinishedLaunching(UIApplication uiApp, NSDictionary options) {\r
                this.uiApp = uiApp;\r
-               RectangleF bounds = UIScreen.get_MainScreen().get_Bounds();\r
+                       \r
+               // Create: Window -> ViewController-> GameView (controller takes care of rotation)\r
+               this.uiWindow = new UIWindow(UIScreen.get_MainScreen().get_Bounds());   \r
+               UIViewController uiViewController = new UIViewController() {    \r
+                       @Override\r
+                       public void DidRotate (UIInterfaceOrientation arg0) {\r
+                               // get the view size and update graphics\r
+                               RectangleF bounds = getBounds(this);\r
+                               graphics.width = (int)bounds.get_Width();\r
+                               graphics.height = (int)bounds.get_Height();\r
+                               graphics.MakeCurrent();\r
+                               listener.resize(graphics.width, graphics.height);\r
+                       }\r
+                       @Override\r
+                       public boolean ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation arg0) {\r
+                               return true;  // TODO: need to check if orientation is supported!!!\r
+                       }\r
+               };\r
+               this.uiWindow.set_RootViewController(uiViewController);\r
+\r
+               // setup libgdx\r
                this.input = new IOSInput(config);\r
-               this.graphics = new IOSGraphics(bounds, this, input);\r
+               this.graphics = new IOSGraphics(getBounds(uiViewController), this, input);\r
                this.files = new IOSFiles();\r
                this.audio = new IOSAudio();\r
                \r
@@ -70,15 +94,40 @@ public class IOSApplication extends UIApplicationDelegate implements Application
                Gdx.input = this.input;\r
                \r
                this.input.setupPeripherals();\r
-               \r
-               this.uiWindow = new UIWindow(bounds);\r
-               this.uiWindow.Add(graphics);\r
+\r
+               // attach our view to window+controller and make it visible\r
+               uiViewController.set_View(graphics);\r
                this.graphics.Run();\r
                this.uiWindow.MakeKeyAndVisible();\r
                Gdx.app.log("IOSApplication", "created");\r
                return true;\r
        }\r
 \r
+       private RectangleF getBounds(UIViewController viewController) {\r
+               // or screen size (always portrait)\r
+               RectangleF bounds = UIScreen.get_MainScreen().get_Bounds();\r
+\r
+               // determine orientation and resulting width + height\r
+               UIInterfaceOrientation orientation = viewController.get_InterfaceOrientation();\r
+               int width;\r
+               int height;\r
+               switch (orientation.Value) { \r
+                       case UIInterfaceOrientation.LandscapeLeft: \r
+                       case UIInterfaceOrientation.LandscapeRight: \r
+                          height = (int)bounds.get_Width();\r
+                          width = (int)bounds.get_Height();\r
+                          break;\r
+                       default: \r
+                               // assume portrait\r
+                               width = (int)bounds.get_Width();\r
+                          height = (int)bounds.get_Height();\r
+               } \r
+               Gdx.app.log("IOSApplication", "View: " + orientation.toString() + " " + width + "x" + height);\r
+               \r
+               // return resulting view size (based on orientation)\r
+               return new RectangleF(0, 0, width, height);\r
+       }\r
+       \r
        @Override\r
        public void OnActivated(UIApplication uiApp) {\r
                Gdx.app.log("IOSApplication", "resumed");\r
diff --git a/demos/invaders/gdx-invaders-android/assets/data/explosion.ogg b/demos/invaders/gdx-invaders-android/assets/data/explosion.ogg
deleted file mode 100644 (file)
index d7cc022..0000000
Binary files a/demos/invaders/gdx-invaders-android/assets/data/explosion.ogg and /dev/null differ
diff --git a/demos/invaders/gdx-invaders-android/assets/data/explosion.wav b/demos/invaders/gdx-invaders-android/assets/data/explosion.wav
new file mode 100644 (file)
index 0000000..e4f9d7f
Binary files /dev/null and b/demos/invaders/gdx-invaders-android/assets/data/explosion.wav differ
diff --git a/demos/invaders/gdx-invaders-android/assets/data/shot.ogg b/demos/invaders/gdx-invaders-android/assets/data/shot.ogg
deleted file mode 100644 (file)
index 7e0c843..0000000
Binary files a/demos/invaders/gdx-invaders-android/assets/data/shot.ogg and /dev/null differ
diff --git a/demos/invaders/gdx-invaders-android/assets/data/shot.wav b/demos/invaders/gdx-invaders-android/assets/data/shot.wav
new file mode 100644 (file)
index 0000000..47ec76d
Binary files /dev/null and b/demos/invaders/gdx-invaders-android/assets/data/shot.wav differ
diff --git a/demos/invaders/gdx-invaders/data/explosion.ogg b/demos/invaders/gdx-invaders/data/explosion.ogg
deleted file mode 100644 (file)
index d7cc022..0000000
Binary files a/demos/invaders/gdx-invaders/data/explosion.ogg and /dev/null differ
diff --git a/demos/invaders/gdx-invaders/data/explosion.wav b/demos/invaders/gdx-invaders/data/explosion.wav
new file mode 100644 (file)
index 0000000..e4f9d7f
Binary files /dev/null and b/demos/invaders/gdx-invaders/data/explosion.wav differ
diff --git a/demos/invaders/gdx-invaders/data/shot.ogg b/demos/invaders/gdx-invaders/data/shot.ogg
deleted file mode 100644 (file)
index 7e0c843..0000000
Binary files a/demos/invaders/gdx-invaders/data/shot.ogg and /dev/null differ
diff --git a/demos/invaders/gdx-invaders/data/shot.wav b/demos/invaders/gdx-invaders/data/shot.wav
new file mode 100644 (file)
index 0000000..47ec76d
Binary files /dev/null and b/demos/invaders/gdx-invaders/data/shot.wav differ
index 6942bb2..e749b6e 100644 (file)
@@ -26,6 +26,11 @@ import com.badlogic.gdxinvaders.screens.InvadersScreen;
 import com.badlogic.gdxinvaders.screens.MainMenu;\r
 \r
 public class GdxInvaders extends Game {\r
+       \r
+       /** Music needs to be a class property to prevent being disposed. */\r
+       private Music music;\r
+       \r
+       \r
        @Override\r
        public void render () {\r
                InvadersScreen currentScreen = getScreen();\r
@@ -37,6 +42,10 @@ public class GdxInvaders extends Game {
                // next screen. Ideally the screen transitions are handled\r
                // in the screen itself or in a proper state machine.\r
                if (currentScreen.isDone()) {\r
+                       // dispose music\r
+                       music.dispose();\r
+                       music = null;\r
+                       \r
                        // dispose the resources of the current screen\r
                        currentScreen.dispose();\r
 \r
@@ -69,7 +78,7 @@ public class GdxInvaders extends Game {
        @Override\r
        public void create () {\r
                setScreen(new MainMenu());\r
-               Music music = Gdx.audio.newMusic(Gdx.files.getFileHandle("data/8.12.mp3", FileType.Internal));\r
+               music = Gdx.audio.newMusic(Gdx.files.getFileHandle("data/8.12.mp3", FileType.Internal));\r
                music.setLooping(true);\r
                music.play();\r
                Gdx.input.setInputProcessor(new InputAdapter() {\r
index 17cee73..b38819e 100644 (file)
@@ -36,8 +36,8 @@ public class GameLoop extends InvadersScreen implements SimulationListener {
                simulation = new Simulation();\r
                simulation.listener = this;\r
                renderer = Gdx.graphics.isGL20Available() ? new RendererGL20() : new RendererGL10();\r
-               explosion = Gdx.audio.newSound(Gdx.files.internal("data/explosion.ogg"));\r
-               shot = Gdx.audio.newSound(Gdx.files.internal("data/shot.ogg"));\r
+               explosion = Gdx.audio.newSound(Gdx.files.internal("data/explosion.wav"));\r
+               shot = Gdx.audio.newSound(Gdx.files.internal("data/shot.wav"));\r
        }\r
 \r
        @Override\r