0
我有一个问题:在OSX上使用Sprite Kit处理玩家输入(移动角色)的最佳做法是什么?OS X上的Sprite Kit - 移动
是在keyDown:
方法中使用switch-case
语句的最佳方法,还是比200行开关有更好的方法吗?
我问,因为我处理玩家输入有点麻烦。
祝您有愉快的一天。
我有一个问题:在OSX上使用Sprite Kit处理玩家输入(移动角色)的最佳做法是什么?OS X上的Sprite Kit - 移动
是在keyDown:
方法中使用switch-case
语句的最佳方法,还是比200行开关有更好的方法吗?
我问,因为我处理玩家输入有点麻烦。
祝您有愉快的一天。
当苹果公司将其臭名昭着的冒险游戏在线作为如何使用SpriteKit的例子时,他们确实使用了keyDown
和keyUp
方法。他们甚至将它们组合成一种方法来处理这两种情况。在SKScene:
- (void)keyDown:(NSEvent *)event {
[self handleKeyEvent:event keyDown:YES];
}
- (void)keyUp:(NSEvent *)event {
[self handleKeyEvent:event keyDown:NO];
}
- (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;
}
}
}
这是从他们的冒险游戏代码,直到他们把它取下来,从他们的服务器(其中,可悲的是,意味着你不能再访问)。我一直认为这是做这件事的最好方式,因为Doc's推荐它,但我可能是错的。另外,我从来没有真正需要处理> 200个不同的按键输入,就像你在问题中说的那样。但是,对于使用典型的wasd,空格键和其他键的游戏,这对我来说工作得非常好。
Thans。我希望玩家设置自己的移动设置,并允许单个设备上最多4名玩家不用网络游戏。因此我需要处理所有可以使用的键。我使用基于NSArray的解决方案,该解决方案对每个键都有索引,并包含对执行的对象和选择器的引用。但是出现了一些神秘的问题(如果所有角色都在移动,其中一个角色滞后直到enyone按下键),所以我想知道是否列举NSArray是最佳做法。我还想知道,即使在Apple TV等RICS CPU上,开关盒的时间复杂度也是O(1)。 (顺便说一句,你有演示项目?ty) –