自制像素游戏物理引擎BUGE(MPL协议)
尝试制作并开源一个完整的游戏引擎。我们将从物理引擎开始先借用unity的显示引擎,最终我们将完成c#平台下的完整的引擎。最后我们可能制作出js版本用作网页游戏的引擎。当然我们的最终目标是制作完整的跨平台引擎。
NightPoetry
热衷于用技术实现小马世界的brony一枚
展开
-
专栏声明
本专栏的所有代码归作者NightPoetry所有,并且遵循MPL开源协议。原创 2020-12-05 16:56:00 · 132 阅读 · 0 评论 -
BlockE核心物理触发器设计——设计动机及其考虑
BUGE物理引擎分为触发引擎和牛顿引擎两种引擎,触发引擎只负责区块的转移和区块的探索以及物理触发器的触发。而牛顿引擎将模拟反弹碰撞等特效,牛顿引擎依赖于触发引擎,这是由于牛顿引擎需要与触发引擎相互作用的结果,只有触发引擎的物体对于拥有牛顿引擎的方块来说是刚体。所有的方块默认带有触发引擎(以及基础显示引擎)。牛顿引擎属于可选引擎(可选择为实体),同时牛顿引擎分为两种子引擎,第一种是使用字链表的推动式引擎,优点是精度高不容易出现反牛顿的现象,缺点是设计复杂易出错而且对待旋转的物体不友好(如果物体发生旋转会发生反原创 2020-12-05 22:57:20 · 531 阅读 · 0 评论 -
005插件类编写——搜索插件SearchDirection2D及其依赖的抽象数据结构AbstractBlock2D
//抽象数据结构,供插件使用,这是一个数据插件public abstract class AbstractBlock2D{ private AbstractBlock2D left; private AbstractBlock2D right; private AbstractBlock2D up; private AbstractBlock2D down; public abstract int X { get; set; } public abstr...原创 2020-12-05 16:51:47 · 145 阅读 · 0 评论 -
003设计框架的修正——对插件和模块概念的修正
之前我们使用接口来用来链接插件和模块,后来我发现如果这样的话会出现大段的代码重复,也就是说插件起的作用并不大。其次插件的作用并不是用来管理模块而是辅助模块工作,也就是模块提供给插件一些数据,然后插件经过运算返回一些数据。如果用上一篇对插件的设计的话就会导致本末倒置,我们赋予了插件管理模块的能力,既然要管理模块势必会导致模块数据化,这样就要付出额外的成本来维护我们模块,以使我们的模块符合插件的需求。但是旧的设计还是有一些优势的那就是每个模块都可以当数据处理,也就是可以实现嵌套递归的对数据和模块的定义,即模块套原创 2020-12-05 14:01:59 · 130 阅读 · 0 评论 -
004使用递归定义方式定义的数据结构——BlockEData类
public class BlockEData{ public int x; public int y; public BlockEData left; public BlockEData right; public BlockEData up; public BlockEData down;}这里使用的是十字链表法,表头由于仅仅是一个数组所以将它简单的合并在物理引擎类中不再另开新类。其中数据域是int x和int y,使用整形保证数据的跨平台运行,抛弃了浮点数的不...原创 2020-12-04 23:21:13 · 188 阅读 · 0 评论 -
002类的初始设计结构——数据结构和算法草稿
物理引擎blockE X索引头 Y索引头 方向结构enum 探测某个方向下一个方块。 探测某个方向的紧邻的方块。 添加方块碰撞回调。(当两个方块的碰撞区域处于同一个节点) 添加碰撞方块 删除碰撞方块 改变碰撞方块的激活状态 移动方块 添加回调(内部方法) 添加添加碰撞方块事件回调 添加删除碰撞方块事件回调 添加改变激活状态事件回调 添加移动方块事件回调 从全部事件中删除某个回调。 物理数据结构blockData X Y 上邻接块原创 2020-12-04 23:13:44 · 123 阅读 · 0 评论 -
001首先确定设计风格——模块化插件化设计
模块化设计 模块化设计会导致一定的信息冗余,例如,我们的显示模块需要世界坐标而物理模块也需要世界坐标因此我们存储了两个坐标,但是由于这两个模块相距很远因此这样的冗余是值得的,试想你或许可以实现显示位置和物理位置不一样这样的功能。因此各个模块之间功能差异需要比较大才可以。其次模块化之中有一个很重要的插件的概念,所谓插件应该是属于单一的抽象算法逻辑而不能依赖于任何模块,这样插件才可以实现通用化。 对于插件我们可以使用接口来决定插件的抽象操作,然后基于这些抽象的操作进行处理。同时我...原创 2020-12-04 20:02:27 · 165 阅读 · 1 评论