Ich versuche ein einfaches iPhone-Spiel zu erstellen, das während des Laufs mehrere Überprüfungen durchführt, um zu sehen, ob Benutzereingaben ein echtes Wort sind. Ich habe eine 1.7mb Textdatei (ist das eine angemessene Größe?) Mit jedem Wort in einer eigenen Zeile, die alle Wörter in der englischen Sprache enthält. Dies ist der Code, der in der init-Methode der Spielszene ausgeführt wird. correctWords
ist ein Array, das alle von Benutzern bestätigten Wortschätzungen enthält. Dieser Code analysiert durch die Textdatei und legt allen Wörtern in ein Array currentDict
genannt:cocos2d Bildrate Verzögerung bei der Erstellung und Suche von Wörterbüchern
correctWords = [[NSMutableArray alloc] init];
//set where to get the dictionary from
NSString *filePath = [[NSBundle mainBundle] pathForResource: [NSString stringWithFormat: @"dictionary"] ofType:@"txt"];
//pull the content from the file into memory
NSData* data = [NSData dataWithContentsOfFile:filePath];
//convert the bytes from the file into a string
NSString* string = [[[NSString alloc] initWithBytes:[data bytes]
length:[data length]
encoding:NSUTF8StringEncoding] autorelease];
//split the string around newline characters to create an array
NSString* delimiter = @"\n";
currentDict = [string componentsSeparatedByString:delimiter];
[currentDict retain];
und dann gibt der Benutzer, wenn das Wort ist ein Wort, das ich dieses Kontroll haben in der Tat zu überprüfen
if([currentDict containsObject: userInput]){
Immer wenn die Spielszene geladen wird, gibt es eine merkliche Verzögerung (3-4 Sekunden) auf dem Gerät selbst, obwohl es fast simultan im Simulator passiert, und dann habe ich Animationen während des größten Teils des Spiels, aber wann auch immer es versucht ein Wort zu verifizieren, es gibt eine leichte, aber spürbare Verzögerung in den Animationen. Ich frage mich nur, ob es einen besseren Weg gibt, das Wörterbuch in den Speicher geladen zu bekommen, oder ob es eine Art Standardpraxis für die Überprüfung von Wörtern gibt. Auch warum sollte prüfen, ob es ein Wort ist, eine Verzögerung in der Animation verursachen? Ich hatte angenommen, dass die Animation Teil eines eigenen Threads war (und somit theoretisch nicht betroffen wäre)
1,7 MB Text entspricht Zehntausenden, wenn nicht Hunderttausenden von Wörtern. Die Suche nach einer Zeichenfolge in diesem Wörterbuch * wird * langsam sein. Natürlich läuft der Simulator schneller, weil er die CPU Ihres Macs nutzen kann, die zehn- bis hundertmal schneller ist als die iOS-CPUs. – LearnCocos2D
seine rund 70.000 Wörter. Diese Größe ist etwas unumgänglich, aber es gibt viele Spiele, die das gleiche Wörterbuch verwenden und eine effektive Methode zum Laden haben. Ich habe es derzeit in ein Array geladen, aber ich frage mich, ob es eine Art von Standard-Praxis gibt, die ich machen kann dafür? Im Moment sucht die Suche nur nach einem o (n) -Such durch alle Elemente, so dass ich nach der Implementierung einer binären Suche schneller loggen kann, aber was das Laden betrifft, ist ein Array die beste Option? sollte ich ein nsdictionary verwenden? Was ist der Unterschied in Bezug auf die Geschwindigkeit – Ben