搞明白事情的次序挺难,刚开始我是打算直接开发射击游戏的,然后直接放web。
直到我晚上洗澡的时候才意识到,如果做web分发,我只能做小体量的游戏。
一来是并且我也拿不到很多被优化压缩过的资源,网络上的资源虽然是免费的,但普遍尺寸较大,大尺寸我无法负载分发成本。二来是找资源费时费力,主要是我懒。
现在我更偏向在线上部署一个demo合集,去验证算法,玩法以及渲染相关的一些东西。
如果是射击demo,就直接用一个模型做玩法验证,就如之前制作的俄罗斯方块一样。
说到俄罗斯方块,我将这个demo放置在左下角黑猫警长的菜单栏内了,点击之后会弹出一个模态窗口。
这个窗口会动态加载一个frame,可以直接看到我最新的制作进展。
改动
之前已经制作了方块的添加,放置,障碍判定,用键盘移动,旋转,现在添加了用鼠标拖拽的功能。
优化
相应的算法也进行了优化,之前一张Map有N个节点,这些节点都被创建了。
现在则改为一张背景图,而不去创建这些节点,节约了大量的性能。
原理是通过获取玩家点击的位置,去计算玩家点击的相对点,如下:
public INode GetNodeMouseHitWorldPoint(Vector3 HitPoint)
{
var colliderSize = new Vector3(Width, Height, 1) * Scale;
var colliderPosLeftDown = RootPosition - Vector3.one * Scale / 2f;
var relPos = HitPoint - colliderPosLeftDown;
var pointX = Mathf.CeilToInt(relPos.x / Scale) - 1;
var pointY = Mathf.CeilToInt(relPos.y / Scale) - 1;
return GetNodeWithXY(pointX,pointY);
}
清理缓存
今天刚好海河也问我了,如果要看最新的进展要清理下本地浏览器缓存。
虽然现在没啥可玩的,哈哈。