частота кадров cocos2d при создании и поиске в словаре - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь создать простую игру для iPhone, которая на протяжении всего процесса выполняла бы несколько проверок, чтобы увидеть, было ли вводимое пользователем слово реальным.У меня есть текстовый файл объемом 1,7 Мб (это разумный размер?), В котором каждое слово в отдельной строке содержит все слова на английском языке.Это код, который запускается в методе init игровой сцены.correctWords - это массив, который будет содержать все проверенные пользователями слова.Этот код анализирует текстовый файл и помещает все слова в массив с именем currentDict:

    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];

, а затем проверяет, является ли слово, введенное пользователем, на самом деле словом. У меня есть эта проверка

if([currentDict containsObject: userInput]){

Всякий раз, когда загружается игровая сцена, на самом устройстве происходит очень заметная задержка (3-4 секунды), хотя там это происходит почти мгновенно в симуляторе, а затем у меня также запускаются анимации на протяжении большей частив игре, но всякий раз, когда он пытается проверить слово, есть небольшая, но заметная задержка в анимации.Мне просто интересно, есть ли лучший способ загрузить словарь в память, или есть какая-то стандартная практика для проверки слов.Также зачем проверять, вызывает ли это слово задержку анимации?Я предположил, что анимация была частью собственного потока (и, следовательно, теоретически не будет затронут)

Ответы [ 2 ]

1 голос
/ 04 апреля 2012

Я бы порекомендовал альтернативный подход. Я не знаю, как работает ваша игра, но, возможно, имеет смысл дать игроку ограниченный набор возможных вариантов слов, например что-то вроде Draw Something, где есть только так много слов, которые вы можете напечатать; тогда вы будете тестировать гораздо меньше. Перед загрузкой сцены вы можете выбрать набор возможных слов из своего словаря, а затем указать буквы или опции (независимо от того, в какую игру вы играете), которые позволяют пользователю выбирать слова только из этого набора. Затем вы можете протестировать против небольшого набора.

Другим вариантом является повторение того, что я часто говорил выше на протяжении всего вашего уровня, чтобы количество доступных слов постоянно менялось, но загружайте их периодически, когда вы не находитесь в середине анимации или чего-то еще. Если в процессе игры наступает короткая пауза, когда уровень становится сложнее, загрузите новые слова или что-то подобное.

Таким образом, на игру в реальном времени не влияет большой словарь, но вы все равно можете предлагать множество вариантов на протяжении всего игрового процесса.

0 голосов
/ 03 апреля 2012

Ничего удивительного, что сравнение тысяч строк занимает некоторое время и вызывает задержку анимации. Вы должны что-то прочитать о бинарном поиске, хэшировании и т. Д. Также загрузка всего файла в NSString и последующее его разбиение очень медленное. Ваш код просто ужасен, извините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...