|
众所周知,IFA的众筹上是写着可以做泰拉瑞亚那样的游戏的
那我们怎么生成泰拉瑞亚那样的随机地形呢
以下是新手向内容(具有初中的数学知识即可),大神轻点喷/害怕。
先跟我拿出一张白纸,建立平面直角坐标系
随心所欲地在上面点10个点,像这样,随便点就好了
然后把它们连起来
观察一下,聪明的你已经明白了吧?
如果没有,把折线下方的区域涂黑
阴影区域就是我们要生成的地形
SO,esay,right?
再看这里,取两个相邻的点,把它们的坐标分别记为(x1,y1)和(x2,y2),设x1<x2
您刚才把他们连接起来了,不是吗?已知两点坐标,求经过这两点的直线公式,可以吧?直线记为l1
作直线l2:x=x3,x3∈(x1,x2)且x3为整数(毕竟是给游戏用)
求l1和l2交点,记为(x3,y3)。我们知道,当x3靠近x1时,y3也更接近y1,反之接近y2。不断用这样的算法,我们就能得到连续的地形了,也就是您之前连接的曲线。
现在把纸翻面或拿一张新的纸,不要看您刚才画的。
尝试把您刚才点的点在这张纸上再点一次。
很难,绝大多数人都做不到。但是我们有时希望能复现"随机"的结果,怎么办呢?
用下面这段代码就行了(这里用的是最简单的线性同余)
WL_Math.random = function(seed, range){
var a = 123;
var b = 456;
var x = seed;
var answer = [];
for(i=0;i<range;i++){
x = (a*x + b)%seed;
if(i==0) continue;
answer.push(x);
};
return answer;
};
a,b的值是可调的,通过调试找到不超过seed的最大周期(大雾)
以上就是全部内容,感谢您看到这里,留个言呗。
有心情再补图吧
|
|