【问题标题】:How to check the color of a certain part of an image?如何检查图像某个部分的颜色?
【发布时间】:2011-08-10 02:22:22
【问题描述】:

我正在制作一个使用“AI 玩家”(他们不是真正 AI 玩家)的简单游戏。我需要找出我正在使用的“地图”的某个部分是否具有某些颜色,这样我才能让“AI 玩家”做某些事情。可以这样做吗?

我不知道这是否会有所帮助,但一款名为《魔兽争霸 3》的游戏使用非常相似的东西来确定某些东西,例如移动。如果你知道这个游戏,应该会容易理解这个问题。

我认为如果我将图像放入自定义 NSView 子类中,这可能是可能的,但我还没有学会如何在那里检查颜色。

【问题讨论】:

    标签: objective-c cocoa nsimage


    【解决方案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()
    

    【讨论】:

    • 那显然不是Objective-C,那我该如何将那段代码添加到我的Xcode项目中呢?
    • @Justin:正如我所说,那是伪代码。我不知道您的地图数据结构或绘图代码或播放器类是什么样的。我的观点很简单,您不必先绘制地图图片,然后从图片中提取您需要的信息。您用来绘制图片的任何信息也可用于其他决策,并且在该级别访问它会容易得多。
    【解决方案2】:

    从 NSImage 创建一个 NSBitmapImageRep 并使用 colorAtX:y: 来获取颜色。

    查看:
    NSBitmapImageRep Class Reference

    【讨论】:

      猜你喜欢
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      相关资源
      最近更新 更多