• 400-650-7353

    精品课程

    您所在的位置:首页 > IT干货资料 > unity > 【Unity基础知识】Cocos2d-x事件机制

    【Unity基础知识】Cocos2d-x事件机制

    • 来源:Unity干货资料
    • 2020-11-11 14:59:52
    • 阅读()
    • 分享
    • 手机端入口

    简介

    游戏中会有各种各样的处理用户输入的需求,例如当玩家按下了某个按键则飞机会发射一颗子弹,三消游戏中拖动屏幕中的方块移动会触发与其边上的方块交换等。

    那么在Cocos2d-x引擎中这部分功能是如何实现的呢?答案是通过事件分发机制响应用户事件,引擎不仅内置了常见的事件如触摸事件,键盘事件等,而且还提供了创建自定义事件的方法以满足我们在游戏的开发过程中特殊的事件响应需求。今天就来为大家讲解在Cocos2d-x引擎中如何使用事件分发机制来处理用户的输入。

    事件相关基本概念

    首先我们要搞清楚与事件相关的三个基本元素,它们分别为:

    (1)事件监听器:负责接收事件,并执行预定义的事件处理函数

    (2)事件分发器:负责发起通知

    (3)事件对象:记录事件的相关信息

    监听器的类型

    监听器总共有5种类型,分别为:

    (1)EventListenerTouch - 响应触摸事件

    (2)EventListenerKeyboard - 响应键盘事件

    (3)EventListenerAcceleration - 响应加速度事件

    (4)EventListenMouse - 响应鼠标事件

    (5)EventListenerCustom - 响应自定义事件

    【Unity基础知识】Cocos2d-x事件机制

    接下来重点给大家介绍触摸事件和键盘事件。

    触摸事件

    触摸事件是手机游戏中最重要的事件,它易于创建,还能提供多种多样的功能。当你触摸移动设备的屏幕时,设备获取到触控位置,同时取得触控的内容,最后在程序中响应这个过程,这就是触摸事件流程处理。可以按照以下步骤进行:

    // 创建一个"one by one" 触摸事件监听器(同时只能响应单点触摸)

    auto listener1 = EventListenerTouchOneByOne::create();

    // 给监听器追加响应回调函数-开始触摸

    listener1->onTouchBegan = [](Touch* touch, Event* event){

    //在这里处理核心业务逻辑

    return true;

    };

    // 给监听器追加响应回调函数-触摸中移动

    listener1->onTouchMoved = [](Touch* touch, Event* event){

    //核心业务代码

    };

    // 给监听器追加响应回调函数-结束触摸

    listener1->onTouchEnded = [=](Touch* touch, Event* event){

    // 核心业务代码

    };

    //添加监听器

    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, this);

    可以看到,在使用触摸事件监听器时,可以监听三种不同的事件,每一个事件都有自己触发的时机。

    三种事件及其触发时机:

    (1)onTouchBegan 开始触摸屏幕时

    (2)onTouchMoved 触摸屏幕,同时在屏幕上移动时

    (3)onTouchEnded 结束触摸屏幕时

    键盘事件

    对于桌面游戏,一般需要通过键盘做一些游戏内的控制,这时你就需要监听键盘事件。Cocos2d-x 支持键盘事件,就像上节介绍的触摸事件一样。

    创建键盘事件监听器:

    auto listener = EventListenerKeyboard::create();

    //绑定按键按下事件与按键抬起事件

    listener->onKeyPressed = CC_CALLBACK_2(KeyboardTest::onKeyPressed, this);

    listener->onKeyReleased = CC_CALLBACK_2(KeyboardTest::onKeyReleased, this);

    //添加监听器到事件派发器

    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

    // 按键按下回调函数

    void KeyboardTest::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event)

    {

    log("Key with keycode %d pressed", keyCode);

    }

    // 按键抬起回调函数

    void KeyboardTest::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event)

    {

    log("Key with keycode %d released", keyCode);

    }

    可以看到,在使用键盘事件监听器时,可以监听两种不同的事件,每一个事件都有自己的触发时机。

    两种事件及触发时机:

    onKeyPressed 按键被按下时

    onKeyReleased 按下状态的按键被放开时

    课程好礼申请领取
    您的姓名
    您的电话
    意向课程
     

    中公优就业

    官方QQ

    扫描上方二维码或点击一键加群,免费领取价值599元网课,加群暗号:599。 一键加群

    >>本文地址:
    注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

    推荐阅读

    优就业:ujiuye

    关注中公优就业官方微信

    • 关注微信回复关键词“大礼包”,领80G学习资料
    QQ交流群
    领取免费网课
    (加群备注“网站”)
    IT培训交流群 加入群聊 +
    软件测试 加入群聊 +
    全链路UI/UE设计 加入群聊 +
    Python+人工智能 加入群聊 +
    互联网营销 加入群聊 +
    Java开发 加入群聊 +
    PHP开发 加入群聊 +
    VR/AR游戏开发 加入群聊 +
    大前端 加入群聊 +
    大数据 加入群聊 +
    Linux云计算 加入群聊 +
    优就业官方微信
    扫码回复关键词“大礼包”
    领取80G学习资料

    测一测
    你适合学哪门IT技术?

    1 您的年龄

    2 您的学历

    3 您更想做哪个方向的工作?

    获取测试结果
     
    课程资料、活动优惠 领取通道
     
     
    韩国毛茸茸的丰满妇女,亚洲国内自拍愉拍,高清性色生活片97,亚洲日本成本人观看 网站地图