搞明白事情的次序挺难,刚开始我是打算直接开发射击游戏的,然后直接放web。

直到我晚上洗澡的时候才意识到,如果做web分发,我只能做小体量的游戏。
一来是我也拿不到很多被优化压缩过的资源,网络上的资源虽然是免费的,但普遍尺寸较大,大尺寸我无法负载分发成本。
二来是找资源费时费力,主要是我懒。

现在我更偏向在线上部署一个demo合集,去验证算法,玩法以及渲染相关的一些东西。
如果是射击demo,就直接用一个模型做玩法验证,就如之前制作的俄罗斯方块一样。

说到俄罗斯方块,我将这个demo放置在左下角黑猫警长的菜单栏内了,点击之后会弹出一个模态窗口。
这个窗口会动态加载一个frame,可以直接看到我最新的制作进展。

改动

之前已经制作了方块的添加,放置,障碍判定,用键盘移动,旋转,现在添加了用鼠标拖拽的功能。

优化

相应的算法也进行了优化,之前一张Map有N个节点,这些节点都被创建了。
现在则改为一张背景图,而不去创建这些节点,节约了大量的性能。
原理是通过获取玩家点击的位置,去计算玩家点击的相对点,如下:

1
2
3
4
5
6
7
8
9
10
11
12
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);
}

清理缓存

今天刚好海河也问我了,如果要看最新的进展要清理下本地浏览器缓存。
虽然现在没啥可玩的,哈哈。