我正在尝试学习Swift语言,并且我在Youtube上学习了很多教程。由于大多数都是针对iOS的,我想制作这个版本的OSX版本:https://www.youtube.com/watch?v=8PrVHrs10to(SideScroller游戏)
我小心翼翼地跟着它,但是当我必须更新玩家位置时,我被困在大约22分钟的视频中。我的第一个问题是获得按键。我来自C#语言,所以我想找到像
这样的东西If(Keyboard.GetState().IsKeyDown(Keys.Right))
man.Position.x += 5 //player position
但这不存在,所以我想出了这个:
override func keyDown(theEvent: NSEvent!)
{
updateManPosition(theEvent)
}
func updateManPosition(theEvent:NSEvent)
{
if theEvent.keyCode == 123
{
man.position.x -= 2
}
else if theEvent.keyCode == 124
{
man.position.x += 2
}
else if theEvent.keyCode == 126
{
println("jump")
}
}
我使用println(theEvent.keyCode)
找到了相应的值(123/124/126),但如果我必须识别很多键,它就没有用。
无论如何,它适用于这个游戏,玩家的位置发生变化。但我有另一个探测器,即每次更新时都不会调用函数keyDown
(每秒60次),这会阻止玩家顺利移动。
所以,这是我的问题:如何在每次更新时调用 keyDown ,并且是否有人更清楚地获取按下的键?
谢谢
答案 0 :(得分:3)
好的,我发现了如何更新,所以我在这里发布,因为它可能对其他人有帮助。想法是使用布尔值:
var manIsMoving:Bool = false
override func keyDown(theEvent: NSEvent!) // A key is pressed
{
if theEvent.keyCode == 123
{
direction = "left" //get the pressed key
}
else if theEvent.keyCode == 124
{
direction = "right" //get the pressed key
}
else if theEvent.keyCode == 126
{
println("jump")
}
manIsMoving = true //setting the boolean to true
}
override func keyUp(theEvent: NSEvent!)
{
manIsMoving = false
}
override func update(currentTime: CFTimeInterval)
{
if manIsMoving
{
updateManPosition(direction)
}
else
{
cancelMovement()
}
}
它可能会帮助别人。 但是获得按键的字符仍然不清楚......
答案 1 :(得分:2)
结合上面的方法,我创建了一个将键更改为字符的方法:
private func returnChar(theEvent: NSEvent) -> Character?{
let s: String = theEvent.characters!
for char in s{
return char
}
return nil
}
这将返回一个字符(来自按下的键)。 然后你可以做这样的事情:
override func keyUp(theEvent: NSEvent) {
let s: String = String(self.returnChar(theEvent)!)
switch(s){
case "w":
println("w")
break
case "s":
println("s")
break
case "d":
println("d")
break
case "a":
println("a")
break
default:
println("default")
}
}
您可以将此方法与上面的方法结合使用,以创建类似于键侦听器的内容。