将 UIButton 的属性赋予 SpriteKit 中的 SKSpriteNode

Posted

技术标签:

【中文标题】将 UIButton 的属性赋予 SpriteKit 中的 SKSpriteNode【英文标题】:Giving properties of a UIButton to a SKSpriteNode in SpriteKit 【发布时间】:2016-02-07 19:57:21 【问题描述】:

我想知道是否有一种方法可以将 UIButton 的属性提供给按下按钮后使按钮变暗,... 给 SKSpiteNode 因为 SKSpiteNode 有更多的自定义,因为我是使用SpriteKit。我见过其他 1 个这样的问题,但没有一个答案有效。这是我必须创建SKSpriteNode 并检测触摸的代码:

import SpriteKit
class StartScene: SKScene     
var startButton = SKSpriteNode()
override func didMoveToView(view: SKView) 
    startButton = SKSpriteNode(imageNamed: "playButton")
    startButton.size = CGSize(width: 100, height: 100)
    startButton.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 - 50)
    self.addChild(startButton)

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) 
    /* Called when a touch begins */

    for touch in touches 
        let location = touch.locationInNode(self)

        if startButton.containsPoint(location)
           // When it has been selected
           
    

//...

请帮忙。在此先感谢...安东

【问题讨论】:

【参考方案1】:

我总是通过在 touches begin 和 touches end 方法中添加代码来实现这一点。在这些方法中,我只是将精灵颜色设置为黑色,然后更改其颜色混合因子。让我知道这是否适合您!

  //This will hold the object that gets darkened
    var target = SKSpriteNode() 
    //This will keep track if an object is darkened
    var have = false

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) 
var first = touches.first as! UITouch
        var location:CGPoint = first.locationInNode(self)
        touchP = location
        mouse.position = touchP
        var node:SKNode = self.nodeAtPoint(location)
       if let button = node as? SKSpriteNode
       
          target = button
           have = true
       
       else
       
         have = false
       

       if (have == true)
       
           target.color = UIColor.blackColor()
           target.colorBlendFactor = 0.2

       


override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) 
            if (havet == true)
            
                target.color = UIColor.blackColor()
                target.colorBlendFactor = 0
                target = SKSpriteNode()
                have = false

            


【讨论】:

感谢您的回答!由于我在我的 gameScene.swift 中,它向我显示了这个错误:方法不会覆盖其超类中的方法。有什么帮助吗? 这很奇怪。我的某些代码可能不是最新的 swift 语法。你为什么不从你的项目中删除我的代码。然后输入“override func touch”,然后让 xcode 输入其余部分。对开始触摸和结束触摸执行此操作,然后编译。如果这会导致问题,那么请回到这里,我们可以解决这个问题。如果不是,那么一切都很好,你可以复制我的代码,除了使用你的代码不是我的功能行(只需粘贴它的主体) 我修复了我刚刚遇到的错误,但我没有测试其余部分。我现在就这样做 我看到添加触摸结束可能会解决我的问题!如果我对此代码有任何问题,我会问你,但现在,很好的答案!

以上是关于将 UIButton 的属性赋予 SpriteKit 中的 SKSpriteNode的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIButton 的高亮属性设置为 NO?

UIButton 的 title 属性正确记录但在将按钮添加为子视图时未显示

从另一个类修改 UIButton 的 alpha 属性

iOS开发 UIButton的基本属性

如何通过赋予属性jQuery的值获取html元素

如何从类属性(特别是 UIButton)访问父类实例?