gpt4 book ai didi

android - 如何在 cocos2d x for Android 中检测设备方向变化

转载 作者:行者123 更新时间:2023-11-28 06:45:47 26 4
gpt4 key购买 nike

对于 cocos2dx 2.2.3 应用程序,我正在寻找一种方法来检测设备方向是否从横向变为纵向或相反。

我在谷歌上搜索了这个主题几个小时,但一无所获。

我想检测 CCScene 中的方向改变事件。有我可以订阅的 Activity 吗?

我对如何在 Android 上执行此操作很感兴趣,但欢迎 iOS 和 Windows!

谢谢!

最佳答案

我找到了一个解决方案,但它不是很好,因为你必须修改库。无论如何

1.进入cocos2dx/platform/android/java/src/org/cocos2dx/lib

2.在Cocos2dxRenderer.java的onSurfaceChanged方法中添加如下内容

@Override
public void onSurfaceChanged(final GL10 pGL10, final int pWidth, final int pHeight) {
nativeInit(pWidth, pHeight);
}

3.进入你的项目文件夹,在proj.android/jni/[prjcpp]/main.cpp修改Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit方法

void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h)
{
if (!CCDirector::sharedDirector()->getOpenGLView())
{
//...
}
else
{
//...
CCEGLView *view = CCEGLView::sharedOpenGLView();
if (view->getFrameSize().width != w || view->getFrameSize().height != h) {
view->setFrameSize(w, h);
view->setDesignResolutionSize(w, h, kResolutionShowAll);
CCNotificationCenter::sharedNotificationCenter()->postNotification(EVENT_ORIENTATION_CHANGED, NULL);
}
}
}

4.在您可以订阅 EVENT_ORIENTATION_CHANGED 之前,您必须在 CCEventType.h 中声明它:

#define EVENT_ORIENTATION_CHANGED  "event_orientation_changed"

5.可以订阅事件:

CCNotificationCenter::sharedNotificationCenter()->addObserver(this, callfuncO_selector(Scene::orientationChangedCallback), EVENT_ORIENTATION_CHANGED, NULL);

您可以通过检查任何 CCScene 或 CCLayer 对象的 update 方法中的方向来避免使用该事件。我是通过比较屏幕的宽度和高度来做到的:

bool Scene::isLandscape()
{
CCSize _screenSize = CCDirector::sharedDirector()->getWinSize();
if (_screenSize.width > _screenSize.height)
return true;
return false;
}

必须有更好的解决方案!请分享!

关于android - 如何在 cocos2d x for Android 中检测设备方向变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25014643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com