游戏启示录 关于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日,国家新闻出版广电总局办公厅<关于移动游戏出版服务管理的通知>(新广出办发[ ...
随机推荐
- Xamarin+Prism开发详解一:PCL跨平台类库与Profile的关系
在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]中提到过以下错误,不知道大伙还记得不: 无法安装程序包"Microsoft.Identity.Client 1.0. ...
- SOLID 设计原则
SOLID 原则基本概念: 程序设计领域, SOLID (单一功能.开闭原则.里氏替换.接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期 引入的记忆术首字母缩略字,指代了面向对象编程和面向对象 ...
- 最新的 cocoaPods 安装方法
经过努力终于发现了最新的 解决cocoaPods安装的办法: taobao Gems 源已停止维护,现由 ruby-china 提供镜像服务 第一步:安装rvm, 不管需不需要升级ruby,rvm可以 ...
- 如何dos命令打开服务窗口?
1.输入services.msc点击<确定>进入服务窗口.如图:
- 跟着老男孩教育学Python开发【第四篇】:模块
双层装饰器示例 __author__ = 'Golden' #!/usr/bin/env python # -*- coding:utf-8 -*- USER_INFO = {} def ch ...
- Harmonic Number(调和级数+欧拉常数)
题意:求f(n)=1/1+1/2+1/3+1/4-1/n (1 ≤ n ≤ 108).,精确到10-8 (原题在文末) 知识点: 调和级数(即f(n))至今没有一个完全正确的公式, ...
- Spring Quartz实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
- Xamarin.Android之ActionBar与菜单
一.选项卡 如今很多应用都会使用碎片以便在同一个活动中能够显示多个不同的视图.在Android 3.0 以上的版本中,我们已经可以使用ActionBar提供的Tab来实现这种效果,而不需要我们自己去实 ...
- 2015微软MVP全球峰会见闻
2015.10.31-2015.11.8 一周的时间完成微软MVP全球峰会旅程,这一周在不断的倒时差,行程安排非常的紧张,还好和大家请假了没有更新微信公众号,今天开始继续更新微信公众号,开始新的旅程, ...
- C#委托使用详解(Delegates)
摘要 委托是C#编程一个非常重要的概念,也是一个难点.本文将系统详细讲解委托. 1. 委托是什么? 其实,我一直思考如何讲解委托,才能把委托说得更透彻.说实话,每个人都委托都有不同的见解,因为看问题的 ...