需要帮助在按下精灵节点按钮时为其提供动画

Posted

技术标签:

【中文标题】需要帮助在按下精灵节点按钮时为其提供动画【英文标题】:Need Help giving sprite node button an animation while it is being pressed 【发布时间】:2017-02-06 04:58:57 【问题描述】:

我确定我听起来像是一个完整的菜鸟,但我正在开发我的第一款 ios 游戏,它包括一个射击按钮,这是一个街机风格的按钮,我想通过切换到“shootPressed”图像来制作动画,同时用户按住它,然后在释放时交换回来。 在这里,我的触摸开始、移动和结束。请记住,我遗漏了任何不冲突的代码。过去两天我一直被这个问题困扰。

更新:我已经包含了用于创建按钮节点的函数

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
    for touch: AnyObject in touches 
        let location = touch.location(in:self)
        let node = self.atPoint(location)

        if(node.name == "Shoot") 
            shootButton.texture = SKTexture(imageNamed: "shootPushed")
        
    


override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) 
    for touch: AnyObject in touches 
        let location = touch.location(in:self)
        let node = self.atPoint(location)
        if (node.name == "Shoot") 
            shootBeams()
            shootButton.texture = SKTexture(imageNamed: "shootUnpushed" )
        
    


override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) 
    for touch: AnyObject in touches 
        let location = touch.location(in:self)
        let node = self.atPoint(location)
        if node.name == ("shoot") 
            shootButton.texture = SKTexture(imageNamed: "shootPushed")
        
    
    

func addButtons() 
        var buttonT1 = SKTexture(imageNamed: "shootUnpushed")
        var buttonT2 = SKTexture(imageNamed: "shootPushed")

        var shootButton = SKSpriteNode(texture: buttonT1)                        
        shootButton.name = "Shoot"
        shootButton.position = CGPoint(x: self.frame.maxX - 130, y: leftButton.position.y)
        shootButton.zPosition = 7
        shootButton.size = CGSize(width: shootButton.size.width*0.2, height: shootButton.size.height*0.2)
        self.addChild(shootButton)
 

【问题讨论】:

你能显示buttonNode的设置代码吗? 谢谢 【参考方案1】:

您在addButtons 中创建的shootButton 是一个局部变量。

所以,当您在 touchesMoved 中执行 shootButton.texture = SKTexture(imageNamed: "shootPushed") 时,这肯定不是指同一个节点。

由于这显然可以编译,这意味着您在类中已经有一个属性 shootButton。如果您更改 addButtons 函数中的 var shootButton = SKSpriteNode(texture: buttonT1),该问题很可能会得到解决。

它应该简单地初始化shootButton-property,而不是创建一个新的local变量:

func addButtons() 
        shootButton = SKSpriteNode(texture: buttonT1)    
        shootButton.name = "Shoot"
        shootButton.position = CGPoint(x: self.frame.maxX - 130, y: leftButton.position.y)
        shootButton.zPosition = 7
        shootButton.size = CGSize(width: shootButton.size.width*0.2, height: shootButton.size.height*0.2)
        self.addChild(shootButton) 

【讨论】:

我更改了代码以正确初始化拍摄按钮,但按下时它仍保留在我的“shootUnpressed”图像上,这可能是我在 touchesBegan、touchesEnded 或 touchesMoved 中更改纹理的方式吗? 好吧,你的 touchesMoved 可能根本不会改变纹理,因为你检查名称匹配是“shoot”而不是“Shoot”,但touchesBegantouchesEnded 似乎是正确的,只要资产实际上看起来正确。 会不会是你把“射击”和“射击”更多的地方混在一起了?字符串比较与任何事情一样容易出错...... 就是这样!非常感谢你,我不敢相信我从来没有接受过!

以上是关于需要帮助在按下精灵节点按钮时为其提供动画的主要内容,如果未能解决你的问题,请参考以下文章

需要 Tkinter 帮助:尝试在按下按钮时将文本输入到条目中以在控制台中打印。我无法打印[重复]

VS C#编程 是WPF程序 如何改变ellipse控件的填充颜色 要在按下按钮1时为红色,按下按钮2变为绿色 求助?

在目标 c 中移动 UIView 时为其设置动画

按下按钮后如何动画显示 UIPickerView?

如何在移动屏幕上按下按钮时发生动画?

需要在按下按钮时“刷新”应用程序的屏幕