游戏启示录 关于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日,国家新闻出版广电总局办公厅<关于移动游戏出版服务管理的通知>(新广出办发[ ...
随机推荐
- 前端学HTTP之日志记录
前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两 ...
- 创建 OVS Local Network - 每天5分钟玩转 OpenStack(129)
上一节我们完成了 OVS 的准备工作,本节从最基础的 local network 开始学习.local network 不会与宿主机的任何物理网卡连接,流量只被限制在宿主机内,同时也不关联任何的 VL ...
- C#多线程之线程池篇3
在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...
- 使用C/C++写Python模块
最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...
- android计算每个目录剩余空间丶总空间以及SD卡剩余空间
ublic class MemorySpaceCheck { /** * 计算剩余空间 * @param path * @return */ public static String getAvail ...
- Android开发案例 – 在AbsListView中使用倒计时
在App中, 有多种多样的倒计时需求, 比如: 在单View上, 使用倒计时, 如(如图-1) 在ListView(或者GridView)的ItemView上, 使用倒计时(如图-2) 图-1 图-2 ...
- 安装并使用PHPunit
安装并使用PHPunit Linux 下安装PHPunit PHP 档案包 (PHAR) 要获取 PHPUnit,最简单的方法是下载 PHPUnit 的 PHP 档案包 (PHAR),它将 PHPU ...
- Linux-Rhel6 恢复误删文件
需要工具extundelete(可通过xshell上传下载到linux)知识点:ifconifig eth0 查看ipfdisk /dev/sda 管理磁盘m ...
- 设置WindowServer2012 时间同步NTP
在powershell中以管理员身份运行以下命令即可 w32tm /config /manualpeerlist:pool.ntp.org /syncfromflags:MANUAL Stop-Ser ...
- 自制Azure中国版“加血包”
Micrsoft Azure中国版的国际出口最近升级为电话线拨号模式,目测为10个用户共享一条56kb的电话线拨号链路.有图有真相: 中国的IT从业者,有三分之一的职业生涯时间是在跟网络斗智斗勇.这点 ...