m0_69398209 2024-05-28 13:58 采纳率: 80%
浏览 37
已结题

cocos的点击事件 怎么穿透到 原生fragment上。

接的快手百度的短视频资讯,想在上边做几个图标,如果把cocos 放到最上层 就会导致 资讯和视频没法拨动 和点击。
有好的解决方案吗?

img

  • 写回答

25条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-28 13:58
    关注
    获得0.30元问题酬金

    引自免费微信小程序:皆我百晓生

    为了解决Cocos2d-x游戏引擎中的点击事件穿透到Android原生Fragment上的问题,你需要确保Cocos2d-x的节点设置允许触摸通过,并且正确配置AndroidManifest.xml文件以处理触摸事件。以下是详细的步骤:

    1. 在Cocos2d-x项目中,你需要创建一个自定义的CCDirector类(如果你还没有的话),并重写其setTouchPriority方法,以便让触摸事件优先传递给底层的Android组件。首先,创建一个新的Java类,例如MyDirector.java,继承自org.cocos2dx.lib.CCDirector:
    package com.your_package_name;
    
    import org.cocos2dx.lib.CCDirector;
    import android.view.MotionEvent;
    
    public class MyDirector extends CCDirector {
        public void setTouchPriority(int priority) {
            // 设置触摸优先级,让底层的Android组件接收触摸事件
            super.setTouchPriority(priority - 1);
        }
    }
    

    然后,在你的C++代码中,替换默认的CCDirector实例为这个新创建的类。这通常在你的主应用类(例如AppDelegate.cpp)的初始化函数applicationDidFinishLaunching()中完成:

    #include "MyDirector.h"
    
    bool AppDelegate::applicationDidFinishLaunching() {
        // ...
        auto director = std::make_shared<MyDirector>();
        // ...
        return true;
    }
    
    1. 接下来,你需要在AndroidManifest.xml中为包含Cocos2d-x的游戏Activity设置合适的属性,确保触摸事件可以传递给底层的Fragment。打开AndroidManifest.xml文件,找到你的游戏Activity标签,添加以下属性:
    <activity
        android:name=".YourGameActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:windowSoftInputMode="adjustResize">
        <!-- 添加此属性,使得触摸事件可以穿透 -->
        <meta-data android:name="android.window.isFloating" android:value="false" />
        <!-- 添加此属性,使触摸事件不会被拦截 -->
        <meta-data android:name="android.window.translucentNavigation" android:value="true" />
        <!-- 添加此属性,使触摸事件不会被拦截 -->
        <meta-data android:name="android.window.translucentStatus" android:value="true" />
    </activity>
    
    1. 最后,确保你在Cocos2d-x的场景中设置了正确的触摸监听器和事件处理。对于不希望影响的Cocos2d-x节点,可以通过设置它们的触摸响应状态为NO_TOUCH_AREAS,这样它们就不会阻止触摸事件向下传递。例如,如果你有一个名为myNode的节点,你可以这样做:
    myNode->ignoreChildrenCollisions(true);
    myNode->setTouchEnabled(false);
    

    按照以上步骤操作,你应该能解决Cocos2d-x点击事件穿透到Android原生Fragment的问题。这样,用户就可以在Cocos2d-x元素之上正常地与原生Fragment进行交互了。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月5日
  • 创建了问题 5月28日

悬赏问题

  • ¥15 无源定位系统的时差估计误差标准差
  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题