作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个游戏,我需要在屏幕上绘制随机线。现在看来 Random 需要一个信号才能在 0.13 中工作(我们被迫在 0.13 中工作)。那么如何获得这些随机数呢?
我从 elm-lang 网站提供的游戏框架开始,得到了这个:
type UserInput = { space : Bool, keys : [KeyCode] }
type Input = { timeDelta : Float, userInput : UserInput }
userInput : Signal UserInput
userInput = lift2 UserInput Keyboard.space Keyboard.keysDown
framesPerSecond = 30
delta : Signal Float
delta = lift (\t -> t / framesPerSecond) (Time.fps framesPerSecond)
input : Signal Input
input = Signal.sampleOn delta (Signal.lift2 Input delta userInput)
gameState : Signal GameState
gameState = Signal.foldp stepGame defaultGame input
stepGame : Input -> GameState -> GameState
stepGame i g =
if g.state == Start then *Get random floats*
现在在stepGame中,我想绘制随机线。问题是I can only get random floats by providing a signal in 0.13 。我的输入信号靠近步进函数,但是当我将标题更改为stepGame:信号输入 -> GameState -> GameState
它无法编译。那么我如何在该函数中获得信号来获取一些随机数...我似乎找不到解决方案,这让我发疯。
最佳答案
有两种方法可以做到这一点。这实际上取决于您需要的随机数数量是否是静态的。
使用 Random.floatList
中的随机数扩展您的输入
:
type Input = { timeDelta : Float, userInput : UserInput, randoms : [Float] }
staticNoOfFloats = 42
input : Signal Input
input = Signal.sampleOn delta (Signal.lift3 Input delta userInput (Random.floatList (always staticNoOfFloats <~ delta)))
使用名为 also outlined in this SO answer 的社区库 ( generator ) 。您可以通过使用 Random.range
来使用随机种子,其方式与上面概述的方式大致相同。该库是一个纯伪随机数生成器,基于生成随机数和一个将生成下一个随机数的新生成器
。
Random.floatList
?通常,如果您需要动态数量的随机数,则该数字取决于程序的当前状态。由于该状态是在 foldp
内捕获的,您还可以根据这些随机数进行更新,因此无法使用“信号函数”,即 Signal 类型的函数a -> 信号 b
。
关于random - 如何在没有信号的情况下在 Elm 0.13 中获取随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590231/
我是一名优秀的程序员,十分优秀!