【问题标题】:Make sprites unmovable使精灵不可移动
【发布时间】:2013-10-07 04:00:05
【问题描述】:

我创建了一个用于形状识别的 SpriteKit 游戏,其中有两个相同的形状,一个位于场景的下部,而另一个要匹配的形状位于场景的上部。我通过调用其他包含创建形状代码的类的方法来创建这些形状。

我能够以正确的方式做所有事情并且工作正常。但我无法找到如何使上侧形状静止。意味着用户必须能够仅将下侧形状拖动到上侧形状以进行匹配,但不应该能够拖动上侧形状以匹配下侧形状。到目前为止,我已经在 Apple 的 SpriteKit 编程指南中进行了搜索,但没有这样的线索可以帮助我执行上述任务。

如果有人可以,请帮助我。

【问题讨论】:

    标签: ios7 sprite-kit


    【解决方案1】:

    简单的方法是在创建它们时设置它们的名称。使用常量是任何简单的方法,因此您可以确保添加/检查正确的名称。

    static NSString * const kCanMoveMe = @"movable";
    static NSString * const kCanNotMoveMe = @"not-movable";
    
    // for example
    SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:imageName];
    sprite.name = kCanMoveMe
    
    SKSpriteNode *sprite2 = [SKSpriteNode spriteNodeWithImageNamed:imageName];
    sprite.name = kCanNotMoveMe
    

    然后当您触摸时检查名称,然后您就知道是否可以移动它。

    【讨论】:

    • 虽然这可行,但继承 SKSpriteNode 并添加isMoveable BOOL 属性可能是更好的方法。使用 name 属性有点老套,因为现在该属性的名称不再反映它的真正功能。
    • @prototypical 我同意,但程序员想要一个简单的解决方案。使用用户数据而不是名称是另一个更好的选择。
    【解决方案2】:

    您还可以利用 SKNode .userData 属性来存储实际精灵的自定义节点数据,在您的情况下,它是否可移动或任何其他游戏特定数据。

    更多信息在这里:Apple documentation about the userData property

    【讨论】:

      【解决方案3】:

      我建议继承 SKSpriteNode 并添加一个isMoveable BOOL 属性来指定它是否可以移动。

      其他答案肯定会起作用,但两者都缺乏通过 Xcode 代码完成功能正确命名和访问您的属性的优势。

      例如,在 Xcode 中,您可以键入 mySprite.i,然后可以选择 isMoveable BOOL 属性来完成代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 2017-05-19
        • 2017-05-27
        相关资源
        最近更新 更多