游戏启示录 关于Update的相关问题
游戏启示录 关于Update的相关问题
这里说的Update是指的游戏的主循环。一般情况下。为了程序的方便控制我们一般只会有一个主循环。所有的游戏逻辑都会在这一个循环中完成。(额,其实这么做有点浪费。因为毕竟现在的电脑都是多核的。这么做了之后。其实只是利用了其中一个核心而已。不过这个并不是我们讨论的重点。)
起因
我非常喜欢火影。里边的打斗场景做的非常不错。特别是佩恩VS九尾那段。名人九尾化之后,放出了能量弹幕而佩恩释放出了小规模的神罗天征。形成了能量屏障,将九尾的弹幕屏蔽在外。我想在我们的游戏里边加一个能量护盾。可以让射过来的弹幕弹开。不过我发现基于我们的普通更新的更新架构,没有办法完成这件事情。
原本的架构


我想说的是我们的原本的架构可能就是现在使用最广泛的架构。我们是按照个体来更新的。就是认为场中的所有的东西都是单独的个体。某一个怪物、子弹、玩家、障碍物都认为是一个个体。让他们挨个进行更新。一个更新完了下一个更新。比如说,先让怪物更新,AI或者伤害;子弹位置更新、伤害;玩家的动作等等等。虽然这是常见的更新方式。不过这样的更新方式却没有办法完成神罗天征这个技能。因为超高速的弹幕是可以直接越过护盾直接打到玩家。
按照同一个Object一块更新的模式
缺陷的分析
其实也就是在某一帧里边的更新顺序分析。可能会产生以下结果:
模式1
1. 技能先更新,查找到范围内的弹幕,然后将他们弹开。
2. 弹幕更新,因为技能已经更新,所以这一帧中后来能够进来的弹幕,会在这一帧进入技能范围。甚至击中玩家
模式2
1. 弹幕更新,弹幕进入技能范围。打出伤害
2. 技能更新,发现界面内部的范围的弹幕,将弹幕弹开。不过那些已经击中玩家的弹幕就没有办法。他们的任务已经完成了。
设想
其实这个事情也挺简单的。就是逻辑更新顺序的问题。其实应该,就是弹幕更新位置之后,技能更新将弹幕推出去,弹幕计算伤害。这样弹幕就能够被能量护盾推出去了。简直完美。
1. 弹幕位置更新 可能进入范围
2. 技能逻辑更新 将进入范围的弹幕放到合适的位置
3. 弹幕伤害计算 看有没有能够击中的目标释放伤害
扩展
其实。当这个游戏的对象的移动都比较缓慢的情况下。所有的这些细节都不是很重要了。毕竟这种更新是比较高速的情况才会出现问题的。比如说某一个弹幕的射速非常快,每秒钟的射速为1800。按照满帧60为来计算,那么每一帧的更新为30像素,因为某些顺序更新的问题可能会造成最大2帧的的差异也就是可能出现60像素的差异。其实这个已经非常夸张了吧。非常明显。如果你的护盾不够60像素,那是极有可能直接呼一脸的。
新的更新模式
如果说原来的更新模式为纵向,那么现在的更新顺序应该修改为横向。按照相同的逻辑一块更新的模式。

如果是这种更新模式的话。就可以在某一个对象更新中插入其他的更新逻辑。简直棒棒哒的。
算了其实这种总结的内容说起来比较困难。只有体会过才会明白。
游戏启示录 关于Update的相关问题的更多相关文章
- Unity游戏暂停之Update与FixedUpdate区别
游戏暂停 示例程序 下面这段代码演示游戏暂停 using UnityEngine; using System.Collections; public class GamePauseTest : Mon ...
- 如何系统掌握游戏编程中3D图形学相关的基础?
https://www.zhihu.com/question/27544895 三维几何学基础:三维坐标系统点与矢量矩阵与几何变换四元数与三维旋转
- windows游戏编程X86 (内存)寄存器相关的基本概念
本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22446971 作者:jadeshu 邮箱: jades ...
- 游戏编程算法与技巧 Game Programming Algorithms and Techniques (Sanjay Madhav 著)
http://gamealgorithms.net 第1章 游戏编程概述 (已看) 第2章 2D图形 (已看) 第3章 游戏中的线性代数 (已看) 第4章 3D图形 (已看) 第5章 游戏输入 (已看 ...
- 介绍用C#和VS2015开发基于Unity架构的2D、3D游戏的技术
[Unity]13.3 Realtime GI示例 摘要: 分类:Unity.C#.VS2015 创建日期:2016-04-19 一.简介 使用简单示例而不是使用实际示例的好处是能让你快速理解光照贴图 ...
- cocos2d-x游戏引擎核心之六——绘图原理和绘图技巧
一.OpenGL基础 游戏引擎是对底层绘图接口的包装,Cocos2d-x 也一样,它是对不同平台下 OpenGL 的包装.OpenGL 全称为 Open Graphics Library,是一个开放的 ...
- 游戏引擎架构 (Jason Gregory 著)
第一部分 基础 第1章 导论 (已看) 第2章 专业工具 (已看) 第3章 游戏软件工程基础 (已看) 第4章 游戏所需的三维数学 (已看) 第二部分 低阶引擎系统 第5章 游戏支持系统 (已看) 第 ...
- python作业-2048小游戏
需了解的知识 Pygame中的各个模块及其功能: Pygame.init():初始化所有导入的模块 pygame.display: pygame.display.init() - 初始化 disp ...
- APP 游戏审核改动
广电总局封杀游戏 移动游戏将进入洗牌期 封杀了电影.电视剧.网络剧 现在轮到游戏了 新法速递 2016年7月1日,国家新闻出版广电总局办公厅<关于移动游戏出版服务管理的通知>(新广出办发[ ...
随机推荐
- Matlab 绘制三维立体图(以地质异常体为例)
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Node.js:理解stream
Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...
- Hawk 5.1 数据导入和导出
除了一般的数据库导入导出,Hawk还支持从文件导入和导出,支持的文件类型包括: Excel CSV(逗号分割文本文件) TXT (制表符分割文本文件) Json xml Excel 目前来看,Exce ...
- [WPF] Wait for a moment.
一.控件介绍 在 WPF 中使用的等待控件,控件包括三种,普通的等待信息提示(WaitTip),进度条提示(WaitProgress),以及主程序覆盖的模拟时钟等待窗口(WaitClock),具体效果 ...
- java面向对象六原则一法则
1. 单一职责原则:一类只做它该做的事. 2. 里氏替换原则:子类必须能够替换基类(父类),否则不应当设计为其子类. 3. 依赖倒换原则:设计要依赖于抽象而不是具体化. 4. 接口隔离原则:接口要小而 ...
- jQuery可自动播放动画焦点图插件Koala
Koala是一款简单而实用的jQuery焦点图幻灯片插件,焦点图不仅可以在播放图片的时候让图片有淡入淡出的动画效果,而且图片可以自动播放.该jQuery焦点图的每一张图片都可以设置文字描述,并浮动在图 ...
- 【干货分享】流程DEMO-人员调动流程
流程名: 调动 流程相关文件: 流程包.xml 流程说明: 直接导入流程包文件,即可使用本流程 表单: 流程: 图片:3.png DEMO包下载: http://files.cnblogs.com ...
- v14.0\AspNet\Microsoft.Web.AspNet.Props 找不到
错误 E:\Github\AutoMapper\src\AutoMapper\AutoMapper.CoreCLR.kproj : error : 未找到导入的项目"C:\Program ...
- RTP与RTCP协议介绍(转载)
RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...
- 从零开始,DIY一个jQuery(2)
在上篇文章我们简单实现了一个 jQuery 的基础结构,不过为了顺应潮流,这次咱把它改为模块化的写法,此举得以有效提升项目的可维护性,因此在后续也将以模块化形式进行持续开发. 模块化开发和编译需要用上 ...