游戏启示录 关于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日,国家新闻出版广电总局办公厅<关于移动游戏出版服务管理的通知>(新广出办发[ ...
随机推荐
- Android Button的基本使用
title: Android Button的基本使用 tags: Button,按钮 --- Button介绍: Button(按钮)继承自TextView,在Android开发中,Button是常用 ...
- AFNetworking 3.0 源码解读(十一)之 UIButton/UIProgressView/UIWebView + AFNetworking
AFNetworking的源码解读马上就结束了,这一篇应该算是倒数第二篇,下一篇会是对AFNetworking中的技术点进行总结. 前言 上一篇我们总结了 UIActivityIndicatorVie ...
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版
火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ- ...
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第十二节)
好的,那么在上一节中呢,评论功能的后台已经写好了,这一节,先把这部分后台代码和前台对接一下. 1.评论功能实现 我们修改一下保存评论按钮的点击事件,用jQuery的方式获取文本框中的值,然后通过aja ...
- JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- 一个软件开发者的BPM之路
我是小林,一名普通的软件工程师,从事BPM(业务流程管理)软件开发工作.我没有几十年的技术底蕴,无法像大牛们一样高谈阔论,品评BPM开发之道:也不是资深的流程管理专家,能与大家分析流程管理的时弊.我只 ...
- Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder
Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder 转自:ht ...
- Android中常见的图片加载框架
图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...
- 浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因
本文出处:http://www.cnblogs.com/wy123/p/6189100.html 标题有点拗口,来源于一个开发人员遇到的实际问题 先抛出问题:一个查询没有明确指定排序方式,那么,第二次 ...
- 关于javascript中的this关键字
this是非常强大的一个关键字,但是如果你不了解它,可能很难正确的使用它. 下面我解释一下如果在事件处理中使用this. 首先我们讨论一下下面这个函数中的this关联到什么. function doS ...