1
我一直试图让字段工作,但保持失败。我也一直在寻找例子,但我能找到的唯一例子是使用Elm 0.14,它使用Elm 0.13中没有的新的Channel API。如何使用Elm中的字段0.13
所以我从catalog
import Graphics.Input.Field (..)
import Graphics.Input (..)
name : Input Content
name = input noContent
nameField : Signal Element
nameField = field defaultStyle name.handle identity "Name" <~ name.signal
提供的例子开始而为了使用该字段我试过
main : Signal Element
main = Signal.lift2 display Window.dimensions gameState
display : (Int,Int) -> GameState -> Element
display (w,h) g =
container w h middle <|
collage gameWidth gameHeight
(if | g.state == Menu ->
[ rect gameWidth gameHeight
|> filled black
, toForm nameField
, plainText "*The name entered in the nameField*"
]
| otherwise -> []
)
但我不断收到以下错误
Expected Type: Signal.Signal Graphics.Element.Element
Actual Type: Graphics.Element.Element
为什么这个元素不再是一个信号......函数定义清楚地说明了它应该输出一个信号,对吗?现在我怎么能够输入一个名字,然后我就可以在一个变量中使用?
那么,如果我想将此行为扩展到游戏菜单,该怎么办?我从你的回复中了解到,我应该发送所有信号,不管它们是否与当时相关,或者不是作为“显示”的额外输入。当菜单不可见时,它们将被忽略,并在菜单弹出时变得相关。这很有意义。现在我唯一关心的是,我将如何能够将信息发回田野?我将如何能够发送当前值? –
我不完全确定你的意思。你想影响显示在字段中的信息吗?我将编辑代码,以便在可以影响该领域的地方更加清晰可见。例如, – Apanatshka
。我有一个有名字的球员。所以'name'应该是'Player'类型的字段。当菜单打开时,它会将球员的名字从场地中读出并填入场地中。现在,用户可以在该字段中更改名称,如果它想要以不同的名称播放并且该字段将更新为新名称。 –