Как проверить цвет определенной части изображения?

#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 Ссылка на класс