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) –