2D直升机游戏,如何创建走廊墙?


12

我正在研究改编经典的“直升机”游戏(即http://www.addictinggames.com/helicopter.html),但我还没有弄清楚如何创建墙生成引擎。

伪代码中有任何指针吗?我对中间的对象不是很感兴趣-只是随着游戏的进行而以增加难度(更多闭合,具有更多意外曲线)的方式生成边的方法。


1
另外-要澄清一下,我需要使墙壁更弯曲而不是块状,因为它们实际上将是“水波” ...
davidkomer 2012年

1
只是作为块,但在每个之间进行平滑插值。
Gustavo Maciel 2012年

Answers:


17

您可以为此使用1D Perlin噪声。这是2D噪点的图像。我在红线所在的地方进行了采样,然后将它们乘以某个常数以获得绿线。

一维截面的二维噪声

将值乘以的常数将确定噪声的高度。这样您就可以轻松提高难度。Perlin噪声的另一个好处是,它可以生成可平铺的噪声,因此您可以构建看似无穷无尽的水平。

如果要创建底部和天花板,请不要产生任何无法通过的区域,这一点很重要。最简单的方法就是简单地将噪声的“上部”部分(例如1.0 - noiseValue)用作天花板,而将下部部分(noiseValue)用作底部(当然之间会有一些偏移)。如果看起来太呆板,您还可以考虑两个接近的样本,例如。想象另一个红色采样线向上或向下一个或两个像素。这将产生相似但不相同的波动。


哇,这真是个帮助!谢谢:)我正在Flash / Actionscript中进行开发,我看到有一个内置的perlinNoise函数...将使用它并查看其运行过程:)
davidkomer 2012年

@davidkomer我很高兴这很有用。在Flash中,您必须创建一个BitmapData对象并使用其perlinNoise功能。位图可以800x3像素或极端的东西,那么你可以简单的提取顶部和底部线的值(像(bitmap.getPixel(x,y) & 0xff) / 255.0应该给你的值0..1范围内。
bummzack

嗯,我知道了,但是常数/乘数将值推到了不可逾越的地方……这是我的代码,有什么想法吗?(vect是一个32位值的矢量,从perlin噪声行中采样...因此y_val只是蓝色通道乘以缩放器后得到的值)for(idx = 0; idx <vect.length; idx ++){y_val =(vect [idx]&0xFF)*定标器;drawData.fillRect(新Rectangle(idx,drawData.height-y_val,1,y_val),0x0000ff); drawData.fillRect(新Rectangle(idx,0,1,y_val),0x0000ff); }
davidkomer 2012年

我得运行现在-但有些事告诉我,我只是需要更仔细地阅读您的意见;)这是我在这么远pastebin.com/1tmMtEAh
davidkomer

什么是scaler?您获得的值将0..255在代码的范围内。
bummzack,2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.