#objective-c #cocoa #nsimage
#objective-c #cocoa #nsimage
Вопрос:
Я создаю простую игру, в которой используются «игроки с искусственным интеллектом» (они не являются настоящими игроками с искусственным интеллектом). Мне нужно выяснить, имеет ли определенная часть используемой мной «карты» определенные цвета, чтобы я мог заставить «игроков с искусственным интеллектом» выполнять определенные действия. Возможно ли это сделать?
Я не знаю, поможет ли это, но игра под названием «Warcraft 3» использует очень похожую вещь для определения определенных вещей, таких как движение. Если вы знаете об этой игре, разобраться в этом вопросе должно быть намного проще.
Я думаю, это может быть возможно, если я помещу изображение в пользовательский NSView
подкласс, но я еще не научился проверять цвета и там.
Ответ №1:
Лучшим способом сделать это было бы не утруждать себя проверкой цветов фактического изображения (что может быть дорогостоящей операцией, если вы проверяете много отдельных пикселей), а указать в структуре данных вашей карты характеристики, которые вы хотите иметь, а затем извлечь из этого как цвет, так и поведение игрока.
В псевдокоде:
// Draw Map
foreach currSquare in listOfSquares:
if map[currSquare].hasPropertyX():
drawSquare(currSquare, blue)
else if map[currSquare].hasPropertyY():
drawSquare(currSquare, red)
// Move pieces
foreach currPlayer in listOfPlayers:
squareIAmStandingOn = currPlayer.square
if map[squareIAmStandingOn].hasPropertyX():
currPlayer.takeActionX()
else if map[squareIAmStandingOn].hasPropertyY():
currPlayer.takeActionY()
Комментарии:
1. Очевидно, что это не Objective-C, так как же мне добавить этот код в мой проект Xcode?
2. @Justin: как я уже сказал, это псевдокод. Я не знаю, как выглядит структура данных вашей карты, или ваш код рисования, или ваши классы проигрывателя. Я просто хотел сказать, что вам не нужно рисовать изображение карты, а затем извлекать необходимую информацию из изображения. Любая информация, которую вы используете для рисования изображения, также доступна для принятия других решений, и на этом уровне будет намного проще получить к ней доступ.
Ответ №2:
Создайте NSBitmapImageRep из NSImage и используйте colorAtX:y:, чтобы получить цвет.
Проверка:
NSBitmapImageRep Ссылка на класс