假设你正在玩一款角色扮演游戏(RPG),主角走进了一家店铺,你用鼠标点击店铺里管家,这时屏幕显示一个待售物品菜单,然后你可以选购你需要的物品。那么,你知道从你点击鼠标的那一刻起,游戏是怎样响应的吗?让我给你详细介绍其中的逻辑。

  首先,我们抽象出鼠标点击事件的相关信息,重要的信息有三个,点击时的x坐标、点击时的y坐标,点击事件是否处理,并把它们定义到一个对象中,代码如下:

  很明显,为保持代码封装性,需要编写两个成员函数对事件对象进行读写,相关代码如下:

  其次,我们需要编写响应鼠标点击的事件代码。为简单起见,我让占据屏幕最大尺寸的canvas响应鼠标点击,如何将canvas与鼠标点击事件关联起来?看代码:

  addEventListener('click',function(){})表示将click事件与匿名函数function(){}绑定,也就是说每当鼠标点击事件发生时,将调用g_oGameData.setMousePoint()函数,将鼠标点击事件相关信息保存下来。

  好了,我们已将鼠标点击事件相关信息保存下来了,那么我们何时处理呢?如何处理呢?为了让游戏反应灵敏,我们应尽可能快地响应鼠标点击事件,一个好的方法是在游戏循环中进行处理,我将处理代码放在了drawScene()函数中,看代码:

  g_oUIManage.handleMessage()的作用是让控件数组中的每一个控件成员依次相应鼠标点击事件。这其中的机制有点复杂,让我详细给你讲解一下。

  我将控件按层进行管理,不同层的控件响应鼠标点击事件的优先级不同,用zindex表示层级别,层级别值越高响应鼠标点击事件的优先级越高,默认将游戏主面板的zindex设为1,它的事件响应优先级低,它里面含有的子控件的zindex比它高,这样每次捕获鼠标点击事件时都会先优先派发给它的子控件处理,如果它的子控件没有处理再给它来处理。先让我们看看与zindex相关的成员变量

  再看看与这两个成员变量相关的成员函数

  目前,我们的数独游戏中只有游戏主面板这个控件,用户点击游戏主面板中的数字面板空白处时应弹出数字选择面板给用户选择填入的数字,为简单起见,当用户点击数字面板空白处时,我们在浏览器控制台打印一条消息,下一节介绍控件时再详细介绍数字选择面板的实现。

  为实现这一功能,我们需要修改控件初始化参数数组g_aControlPara,代码如下:

  相应的init成员函数代码也要更改

  现在万事俱备,是时候介绍handleMessage()成员函数的代码了

  很简单,对控件数组中的每一个控件,依次调用每一个控件的消息处理函数handle(),下面让我们看看控件类gxsUI有哪些改变。首先是代表控件所在层的zindex

  最后是控件的handle()成员函数代码

  这个成员函数的功能很简单,先判断是否在控件内点击,不是则返回让其它控件处理;再判断当前层能否响应点击事件(防止在弹出窗口中点击窗口下面的控件,即事件穿透),不能则返回让其它zindex级别更高的控件响应;如果控件有回调函数,则执行回调函数。在浏览器中打开index.html,运行结果如下:

  最后将今天讲的内容录了视频,文章中没有讲到的地方大家可以对照视频一起看。

H5数独游戏开发——游戏中的事件处理

  未完待续,敬请关注!后续更精彩,谢谢大家!

H5数独游戏开发——游戏中的事件处理相关推荐

  1. H5数独游戏开发——游戏通关及重玩

    如何判断游戏是否通关?通关后如何重新开始游戏,让用户重玩?今天给大家详细介绍如何实现以上功能.先看一下数独游戏通关后的提示界面,截图如下: 首先,我们需要判断游戏是否通关,那么如何判断呢?有两个条件: ...

  2. 1.15 从0开始学习Unity游戏开发--游戏UI

    上一章中,我们剩下最后一个任务,需要支持鼠标控制准心来进行设计,那么准心本质上就是一个始终呈现在屏幕上的一个图片,你当然可以用一个3D物体来制作,之前讲解渲染概念的时候也提到过,我们的屏幕就是相机的近 ...

  3. Android游戏开发–游戏循环

    游戏循环是每个游戏的心跳. 到目前为止,我们仅使用了非常简单的一种(您可以在此处找到),无法控制我们更新游戏状态的速度或速度以及要渲染的帧. 概括地说,最基本的游戏循环是while循环,该循环一直执行 ...

  4. android_Android游戏开发–游戏循环

    android 游戏循环是每个游戏的心跳. 到目前为止,我们使用的是非常简单的游戏(您可以在此处找到),无法控制我们更新游戏状态的速度或速度以及要渲染的帧. 概括地说,最基本的游戏循环是while循环 ...

  5. android游戏开发_Android游戏开发–游戏循环

    android游戏开发 游戏循环是每个游戏的心跳. 到目前为止,我们仅使用了非常简单的一种(您可以在此处找到),无法控制我们更新游戏状态的速度或速度以及要渲染的帧. 概括地说,最基本的游戏循环是whi ...

  6. 数独游戏开发——游戏主面板显示

    上次给大家介绍了如何实现资源加载进度条,资源加载完毕后就会进入游戏主界面.我们接着来实现游戏的功能--显示游戏主面板. 目前我们的数独游戏在资源加载完毕后就没有后续动作了,即游戏画面一直停留在进度条显 ...

  7. 游戏运营全过程剖析,游戏开发,游戏运营,游戏推广问题分析

    产品策划:一个好的idea至关重要,结合当时的社会环境,游戏开发水平,玩家喜好,市场需求等考虑.精美的画面,流畅的游戏节奏,情节,完善的游戏系统能让你的游戏立于不败之地. 产品开发:游戏主线框架定好后 ...

  8. Xcode与C++之游戏开发: 游戏对象

    上一篇:Xcode与C++之游戏开发:Pong游戏 游戏对象 在前面的 Pong 游戏中,没有用不同的类去代表墙,球拍和球,仅仅使用了一个 Game 类.像 Pong 这种简单游戏当然没问题,但它不是 ...

  9. Unity游戏开发-游戏热更新以及登录流程

    本篇主要分享基于热更新的游戏初始化方案. 整体初始化的流程大致为:检查是否需要解压资需要则解压,之后再检查是否存在需要热更新的资源文件需要则更新,更新完成后则初始化结束可进入登录界面. 关于登录这块的 ...

最新文章

  1. flutter笔记1 VScode安装dart code插件踩坑记录
  2. iptables之iptables命令详解
  3. 面向站长和网站管理员的Web缓存加速指南
  4. script标签中的async和defer
  5. mysql innodb索引原理
  6. java data 图像 显示_Java(JMF)获取本地摄像头,实时显示图像
  7. Android TextureView 与 SurfaceView用法区别
  8. linux下 卸载qt_Windows 下 Qt creator安装和使用
  9. Linux下硬盘分区的最佳方案
  10. 测试人员在工作中如何查日志?
  11. 贪心算法解决哈夫曼编码问题
  12. php curl getinfo详解,php curl getinfo
  13. python贴吧签到多账号版本最新可用
  14. 百度网盘机器人好友群组消息虚拟商品自动发货回复软件机器人助手
  15. android+扁平+png,[3.28更新]更好看的扁平化主题 —Flat+ 超全图标
  16. 真Unity3d_梦幻西游无双的引擎是?
  17. 【Linux】【编译相关】execvp: /bin/sh: Argument list too long问题处理小结
  18. java上传视频文件到服务器,java视频上传到远程服务器
  19. 如何利用长尾关键词挖掘推广口红?
  20. expect的基本用法

热门文章

  1. MIPS寄存器文件设计实验
  2. 电脑如何免费畅听所有音乐
  3. 2024东华大学计算机考研信息汇总
  4. 分类的性能度量(准确率、精确度、召回率、F1值、Kappa系数)
  5. android多媒体——5步学会使用系统相机
  6. Sql Server查看所有数据库名,表名,字段名(SQL语句)
  7. python元组特点_python元组的优势有哪些
  8. Spring Boot入门(16):Spring Boot 整合 Swagger-UI 实现在线API接口文档 | 超级详细,建议收藏
  9. 迪拜机场和迪拜乐园及度假村签署独家协议,将在迪拜国际机场展示主题公园景点
  10. 初识一周Linux(Ubuntu)我学会了什么