IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 小游戏实现逻辑学习总结 -> 正文阅读

[游戏开发]小游戏实现逻辑学习总结

本文的小游戏的引擎是laya和cocos引擎,相关逻辑可以复用

鼠标按住

????????1.如果是在按住期间一直执行,可以通过down?和up配合?设置一个bool值,在update 里面执行判断

????????2.如果是在按住期间多久后执行,可以在down进行延时调用,在在up里面取消延时, 中间设置一个变量来判断是否正在执行

拖动3D物体

? ? ? ? 1.通过射线检测获得所需要的物体,并保存下来

? ? ? ? 2.通过鼠标位移量来计算物体的位置并加给物体,注意松开时如果在屏幕外时不会触发up的方法会导致一直进行

? ? ? ? 3.鼠标有一个超出屏幕时的方法,可以通过这个在鼠标移出时调用

? ? ? ? 4.通过设置偏移量的比例来控制灵敏度和游戏体验

双指拖动旋转

? ? ? ? 1.先在点击的触发事件里,通过传入的参数e?来获得触点的数量如果数量符合计算以其中一个触点为轴心的角度Math.atan2并保存下来并监测鼠标移动事件

? ? ? ? 2.在鼠标移动监测事件中通过传入的参数e?来获得触点的数量如果数量符合计算以其中一个触点为轴心的角度Math.atan2并通过180 / Math.PI * (当前角度 -保存的角度)来计算需要旋转多少并把当前角度存储起来

? ? ? ? 3.同时需要注意在移出和抬起事件中取消对移动事件对监听

双指拖动缩放

? ? ? ? 1.先在点击的触发事件里,通过传入的参数e?来获得触点的数量如果数量符合计算两个点之间对距离并保存下来并监测鼠标移动事件

? ? ? ? ?2.在鼠标移动监测事件中通过传入的参数e?来获得触点的数量如果数量符合计算两个点之间对距离并通过当前距离 -保存的距离来计算需要缩放和比例并把当前距离存储起来

? ? ? ? 3.同时需要注意在移出和抬起事件中取消对移动事件对监听

遮罩-放大镜(2D)

????????放大的图在拖动时要反向移动,因为轴点都在左上角,遮罩显示区域在鼠标所在位置(也可以将图片分成网格节点,把缩放的图也等分成相同的网格节点,通过节点来控制位移)

新手引导

????????用一个数组来存储,每一步的坐标和显示框大小(以显示物为中心计算),提示的图片或者文本,??以及对应的坐标

设置一个遮罩层对下一页的所有点击事件进行覆盖

震动效果

  1. 镜头震动
    1. 对摄像机进行操作,通过tween函数对他的x,y进行左右相加
  1. 物体震动
    1. 使用rotate函数,根据方向,对x或者y 进行角度旋转,这个放在update里面,每一次旋转度数小一点
    2. 控制震动需要2个boolean类和一个时间计数器,通过boolean属性控制震动的开始和结束判断,通过时间来决定震动旋转时的时间。

页面内容的一直移动

  1. 先获得这个页面的所有需要移动的子物体
  2. 遍历每一个子物体进行移动(并且这个方法放在update里),并且进行判断,如果一个物体到达某一个边界时,直接把他放到开始移动的最边上。

判定一个物品是否在屏幕内容

  1. 将一个物品坐标转换为屏幕坐标,并进行屏幕判定,如果在则在屏幕里面
  2. 如果有子物体则,遍历子物体进行判定,如果有一个子物体不在则不在屏幕

检测物品

  1. 如果需要比较灵敏,比较跑酷的障碍物,可以通过盒子检测一堆,再通过距离判定最近的为碰撞物
  2. 如果不需要太灵敏,比较吃道具什么的可以通过物品上的脚本对玩家做距离检测(可以左右前后一起,也可以分开判定),到一定距离,去调用玩家身上的方法,减轻耦合,监听模式

对于音效和特效的处理

????????1.专门写一个管理类,把需要的特效存放到对应的数组里,通过枚举变量进行调用和管理,再初始化时获得对应的特效和物品

俯视小地图、屏幕上分屏显示视角、能够看到目的地情景的传送门、狙击枪瞄准镜里的画面、引擎中的摄像机的预览、引擎中画布UI等物品都是通过rendertxture实现

(https://mp.weixin.qq.com/s/o0S45X9PH8axNfC6OoHubA)

  1. 小地图,是创建一个rendertxture来保存摄像机的图片,并保存到ui的图片中充当材质贴图
  2. 传送门是一个物体(可以用平面或者面片充当)无法直接用rendertxture赋予,而是要通过材质球来赋予,所以先要创建一个材质球并设置成漫反射贴图,并把rendertxture赋给材质球,把材质球给显示的传送门。

//注意效果优化1.通过扩展人物对传送门的不同角度控制渲染摄像机的旋转,时传送门真的显示另外一个空间一样。

进度条(加载条)

  1. 通过slider组件,通过加载返回的值拉设置进度条内容(这种要设置图标和位置大小)
  2. 设置两个加载条的图片,一个为父物体并设置为mask,然后另外一个设置为子物体表示显示的加载条,通过加载值来设置mask的宽度来显示遮罩的内容(如果需要有进度条前方的图标也可以使用加上位移量来实现)

计时器(倒计时)

  1. 直接使用数字,到时间替换(可以用间隔时间的函数或者直接在update里计时)
  2. 多个图片交替(可以实现图片旋转消失显示的效果),通过设置一个数组保存所有需要显示的图片。
  3. 圆环形的倒计时(本质还是一个方形图片) 动态创建一个蒙板遮罩,根据值去遮罩

怪物节点或者一些通用节点

????????把同一类型的物体放入一个节点下,当需要共同操作时可以直接遍历这个节点子物体操作(比如释放一些全局技能时),也可以在创建时存入一个全局数组里进行操作。(前面时间换空间,后面空间换时间)

????????

毒圈功能(毒圈收缩在中心点)(吃鸡那种任意毒圈?)

  1. 可以给毒圈设置碰撞器进行检测,因为是中空的,所以碰撞器在无毒的中心点,有碰撞检测则无伤害,否则扣血,这个检测可以写在毒圈身上
  2. 通过自身与毒圈中心的距离检测来判断自己是否在毒圈范围内,可以把距离检测写在人物身上

当多个物体对玩家进行影响且是通过距离判断时

????????可以把影响方法写在人物身上,并把当前对人物造成影响的物品存储起来,判断条件时但不符合的情况只会对存储的对象进行判断(物体是不是当前影响的物体),以防其他物体一直影响到人物的状态?

随机物品生成实现

  1. 如果是规则平面,可以平面中心为原点,进行网格化,把网格坐标存储起来,在生成时随机生成
  2. 在开始前设置空物体做为坐标点,游戏开始时把坐标存储起来,并清除空物体节省性能

组合模式用法(可以用来合并成一个复杂的类)

????????例如人物控制有?血量和伤害??人物移动??基本配置信息??外界输入控制?模块

????????如果写在一起就特别繁琐?不易管理和复用,通常可以写成一个个基本类,然后在主类即控制类里进行集合,相互之间的信息可以通过回调,事件传递来进行控制

小游戏常用外加功能

七日签到(签到奖励的数据(数据存储的形式,奖励类型,奖励数量),签到记录数据(已签到日子,签到次数),一个控制显示管理器(控制UI显示,控制点击事件,控制获取特效,控制获取的奖励存储),一个UI显示界面(显示界面,控制玩家的交互))(典型的MVC架构)

  1. 通过UI图片搭建一个完整UI(像这种显示和领取的UI一般有正常搭建的UI元素和一个遮罩层,类似的有图鉴,一些道具解锁页也是一样)
  2. 创建一个脚本,先根据配置的数据初始化这些元素是否显示,显示什么内容,再根据今天的是否领取,把今天所对应的UI元素存储起来,添加监听事件。
  3. 对点击事件进行处理,根据第几天,来获得相对应的奖励,并且通过直接的方法进行存储,并更新UI界面

敌人位置显示(可以设置一个类专门计算也可以放到每一个敌人身上)

(核心思想,把玩家和敌人的坐标转化为屏幕坐标,根据位置差值进行图标方向和旋转角度,难度在于距离适配刚好在屏幕之内,因为屏幕是方形且不同机型屏幕坐标不一致)

  1. 通过一个屏幕位置数组,把屏幕用四条线框起来(根据图标要显示的位置来设置距离边界的偏移,根据偏移和屏幕宽高来设置点可以方便机型适配)
  2. 把玩家和敌人坐标转化屏幕坐标(因为不同引擎转化的屏幕坐标方法会有一些不一样,先打印确定一下数据是否符合自己要求),计算两者的方向和距离(这里有一个差别就是方向是否归一化)
  3. 计算玩家与敌人的连线是否与屏幕坐标线段是否有交点,有交点则显示在交点上,并根据方向计算旋转角度,没有则表示在屏幕内,需要隐藏图标
  4. 计算两条直线的交点

https://blog.csdn.net/hjk61314/article/details/82254381?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.queryctr&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.queryctr&utm_relevant_index=2

老虎机抽奖(一般是三列,抽奖的图标每一列都有)

  1. UI实现(可以通过UI直接搭建也可以通过代码添加实现(推荐))
  2. 在点击开始抽奖或者显示页面时确定抽到的对象
  3. 开始抽奖时控制页面中的图标移动(每一列是)(可以通过设置旋转时间,也可以设置旋转的次数,当次数到时判断抽中的图标是不是在对应的位置范围内,然后根据所在位置和目标位置的偏差通过缓动制作一个回弹效果)
  4. 当最后一个回弹结束后下发奖励

(扩展:可以记录抽奖次数来作为累计一定时下发奖励的标准,其次还有保底,多少次必中什么等扩展)

(抽奖页图标的移动类似无限翻页效果,通过在update中持续往一个方向移动,当最前面的图标超过一定位置时直接移动到最后一个图标后面

//抽奖逻辑一般在开始抽时就确定奖品是什么,然后在结束后显示到结果的那一面

轮盘抽奖

  1. 先搭建UI
  2. 通过代码和配置设置轮盘上的奖项
  3. 点击开始游戏时,先确定抽奖的奖品是什么,根据奖品ID确认在哪一块范围,再根据范围确定旋转的目标值,并开始旋转指针/轮盘,
  4. 开始旋转后通过插值将旋转物体的角度设置为目标值(使用插值可以自然的实现快结束时那种减速效果),注意因为通过插值移动可能不能完全与目标值一致,所以加一个判断(接近时则结束)
  5. 相关奖励的存储放在转盘结束后(以防转到一半,玩家离开)

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:26:03  更:2022-01-16 13:26:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:42:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码