晴朗的土地 - WebGL游乐场平台

2021-04-20 15:05:17

Sunny Land是一个学习实验和持续的项目,可以展示Elm' Webgl游乐场包潜力。

在介绍屏幕之后和在播放之前(以及为每个级别更改),使用级别中的信息生成实体.spawns并分配给Memory.entities。当实体准备好游戏循环时可以运行。

所有游戏实体都已更新。特别地,在该步骤中,用户输入被捕获并为NPC' s(非玩家字符)的加速。

物理模拟运行以找出所有与其考虑任何联系人的所有实体的下一个位置。

最终使用由步骤(2)产生的联系人列表来执行任何游戏逻辑。

物理代码已由IAN Millington游戏物理发动机开发书中发现的粒子引擎。它处理圆圈和圆圈之间的接触检测和分辨率对抗线段。

为了处理触点,每个物理机构(游戏实体)具有相关的圆形形状(由半径定义),而接地和墙壁由线段定义。物理模块非常了解游戏本身,因此可以轻松提取并在另一个项目上提取和使用。严格地讲的物理机构只需要一个实体字段的子集,因此它被定义为可扩展记录:

别名物理体A = {a | INT,P:VEC2,V:VEC2,A:VEC2,RADIUS:Float,Restitution:Float,联系人:Vec2,ContactTestBitmask:int,ComponentBitMask:Int,DiscumentByGravity:Bool,受影响的Gool,受影响的Gool:Bool}

物理引擎的入口点是物理学.STEP功能。在每个帧,阶梯函数被称为接受当前级别的墙壁和物理体,并保养:

在循环通过联系人列表的同时,在oderBodies传递到Entity.respond函数时,致密,在循环中致密。这个功能数字计算下一步,即当玩家击中敌人时,游戏需要决定前者是否踩到后者或被击中。

游戏级别使用瓷砖设计,保存到JSON文件,然后通过Python脚本(参见级别)转换为ELM代码。您可以使用瓷砖打开资产/ level1.json,看看各种级别层如何用于定义地形,障碍和游戏实体的产生点。