强制停止自动旋转(Android、C++、SDL2)

Forcing auto-rotation to stop (Android, C++, SDL2)

本文关键字:Android C++ SDL2 旋转      更新时间:2023-10-16

我有一个游戏,它通过一个名为C4Droid的应用程序在Android上运行良好(如果你不知道C4Droid,只需谷歌一下)。它是用C++编写的,只使用 SDL2。

它在纵向上运行,因此,当我在打开自动旋转的情况下倾斜设备时,它会变得横向。

现在,我想要做的是做一些避免它的事情,即使在打开自动旋转时也能获得横向。请回答?

在 Manifist 文件中设置方向,如下所示 android:screenOrientation

  <activity
    android:name="com.androidgames.mreater.MrEaterGame"
    android:label="Mr. Eater" 
    android:screenOrientation="portrait"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

不,没有办法只在 SDL2 中执行此操作(您可以在 iOS 中执行此操作,但由于某种原因,他们在 Android 中使其不同)。 Wadali 的答案是最好的,以下是您可以在构建环境中使用它的一些方法:

  • 使用不同的生成环境。如果您在桌面计算机上构建 APK,则可以控制 AndroidManifest.xml 文件的内容。如果你真的想在手机上做,还有其他适用于Android的C/C++编译器。你失去的部分是 C4Droid 的易用性 - 你需要学习如何自己构建 APK。
  • 像往常一样使用 C4Droid 构建它,然后使用 APK 编辑器提取、编辑和重新打包 AndroidManifest.xml。如果您愿意将APK复制到台式计算机,则可以使用apktool解压缩APK,编辑所需的文件,然后再次重新打包(注意:执行此操作后,您需要对APK重新签名才能使用);否则,似乎也有一些APK编辑器实用程序可用于Android。

有用于控制方向的 Android API,但您无法从 SDL2 中访问它们。SDL2 创建自己的活动,并且没有任何扩展它或允许您提供自己的活动的方法,因此您无法向自己的代码公开其他 Android API 调用。

你知道

SDL_HINT_ORIENTATIONS吗?

https://wiki.libsdl.org/SDL_HINT_ORIENTATIONS

即使SDL文档声称它们适用于iOS,它们似乎在Android中也能正常工作。

SDL_SetHint(SDL_HINT_ORIENTATIONS, "Portrait");