gpt4 book ai didi

objective-c - 如何在 SpriteKit 游戏中获取键盘输入?

转载 作者:太空狗 更新时间:2023-10-30 03:35:20 24 4
gpt4 key购买 nike

我是 SpriteKit 编程的初学者,一直在尝试弄清楚如何处理来自键盘的输入。

到目前为止,我发现您应该继承 NSResponder 并像这样实现它:

@interface AppDelegate : NSResponder <NSApplicationDelegate>
-(void)keyUp:(NSEvent *)theEvent;
-(void)keyDown:(NSEvent *)theEvent;
@end

@implementation AppDelegate
-(void)keyUp:(NSEvent *)theEvent
{
NSLog(@"Key Released");
}
-(void)keyDown:(NSEvent *)theEvent
{
NSLog(@"Key Pressed");
}
@end

显然,AppDelegate 的接口(interface)和实现中还有一些方法/属性,但我没有将它们放在那里以保持问题的相关性。

接下来,我将开始使用键码来检测哪些键被按下,但 keyUpkeyDown 方法甚至都不会被调用。我不确定为什么。

有什么帮助吗?

更新:感谢您的回答!我发现您必须直接在场景类中实现 keyUpkeyDown,因为 AppDelegate 不会调用它们。再次感谢您的帮助!

最佳答案

我知道的最简单的方法是在您的 SKScene 中实现 keyDown 方法(而不是直接在 AppDelegate 中)。您不必继承任何东西。

- (void)keyDown:(NSEvent *)event {
[self handleKeyEvent:event keyDown:YES];
}

- (void)keyUp:(NSEvent *)event {
[self handleKeyEvent:event keyDown:NO];
}

然后使用方法 handleKeyEvent:(NSEvent *)event keyDown:(BOOL)downOrUp 来检查按下了哪个键:

- (void)handleKeyEvent:(NSEvent *)event keyDown:(BOOL)downOrUp {
// First check the arrow keys since they are on the numeric keypad.
if ([event modifierFlags] & NSNumericPadKeyMask) { // arrow keys have this mask
NSString *theArrow = [event charactersIgnoringModifiers];
unichar keyChar = 0;
if ([theArrow length] == 1) {
keyChar = [theArrow characterAtIndex:0];
switch (keyChar) {
case NSUpArrowFunctionKey:
self.defaultPlayer.moveForward = downOrUp;
break;
case NSLeftArrowFunctionKey:
self.defaultPlayer.moveLeft = downOrUp;
break;
case NSRightArrowFunctionKey:
self.defaultPlayer.moveRight = downOrUp;
break;
case NSDownArrowFunctionKey:
self.defaultPlayer.moveBack = downOrUp;
break;
}
}
}

// Now check the rest of the keyboard
NSString *characters = [event characters];
for (int s = 0; s<[characters length]; s++) {
unichar character = [characters characterAtIndex:s];
switch (character) {
case 'w':
self.defaultPlayer.moveForward = downOrUp;
break;
case 'a':
self.defaultPlayer.moveLeft = downOrUp;
break;
case 'd':
self.defaultPlayer.moveRight = downOrUp;
break;
case 's':
self.defaultPlayer.moveBack = downOrUp;
break;
case ' ':
self.defaultPlayer.fireAction = downOrUp;
break;
}
}
}

我从 Apple SpriteKit Adventure 游戏中获取了这段代码。我发现学习 SpriteKit 非常有用 :)

关于objective-c - 如何在 SpriteKit 游戏中获取键盘输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23049776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com