再次播放按钮工作错误

Posted

技术标签:

【中文标题】再次播放按钮工作错误【英文标题】:Play Again button works wrongly 【发布时间】:2016-02-26 16:49:16 【问题描述】:

我在我的游戏中制作了一个重玩按钮,并使用 SKTransition 重新开始游戏。当我触摸再次播放按钮时,新场景出现了。但是这个场景的对象比上一个场景的要大。场景被冻结。当我触摸再次播放按钮时,我无法玩游戏。我该怎么办?这是我关于按钮和重启场景的所有代码:

let playAgain: UIButton = UIButton(frame: CGRectMake(10, 0, 450, 1000))

class GameScene: SKScene 
func buttonPressed(sender: UIButton) 
    let pransition = SKTransition.fadeWithDuration(1.0) //create a transition
    let gamePlayScene = GameScene(fileNamed: "GameScene") // create a new scene from your file (let variableName = NameOfGameFile(fileNamed: "NameOfGameFile")
    self.view?.presentScene(gamePlayScene!, transition: pransition) // present the scene with the transition




override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) 
    for touch:AnyObject in touches...



    if(..)...
    else
            playAgain.setTitle("Play Again", forState: UIControlState.Normal)
            playAgain.titleLabel!.font = UIFont(name: "Helvetica", size: 50)

            playAgain.addTarget(self, action: "buttonPressed:", forControlEvents: .TouchUpInside)
            playAgain.tag = 1
            self.view!.addSubview(playAgain)

【问题讨论】:

我认为您没有显示问题。我觉得这与您如何处理场景缩放模式有关。在这里,您将其设置为默认值,即 .Fill。你在你呈现的第一个场景中使用了什么 这是我的第一个场景。此外,我只有一个场景。当我触摸再次播放按钮时,我想不断重播相同的场景。我是新来的。所有的代码都是关于再次播放按钮的,我没有更多关于改变场景或再次播放按钮的代码。 您每次都在添加一个新场景......但是您必须在其他地方呈现第一个场景,因为如果没有场景存在,buttonpress 就无法工作 正是这样的原因,在旧场景中呈现新场景是一种不好的方法,我希望苹果没有采用这种方法,您可能遇到的另一个问题是您保留了旧场景转换时的新场景,旧场景没有正确删除 我可以肯定地告诉你你的旧场景没有被删除,因为你的按钮代码在场景中,但是你的 playagain 按钮是全局的(非常坏的习惯,我建议立即停止),通过附加按钮这样按到按钮上,它永远不会死,你会很快耗尽内存 【参考方案1】:

您的问题是当您通过播放按钮创建到游戏场景的过渡时,您没有设置场景大小。我只是插入了你的代码,它会按照你说的做。在 swift 中,在创建过渡时设置场景的大小和纵横比是一个很好的做法,比如说回到游戏或从游戏到结束场景,例如胜利场景或松散场景等。简单的方法是就是在声明游戏场景常量后添加场景纵横比,如下代码块:

let pransition = SKTransition.fadeWithDuration(1.0)
    let gamePlayScene = GameScene(fileNamed: "GameScene")
    gamePlayScene!.scaleMode = SKSceneScaleMode.AspectFill
    self.view?.presentScene(gamePlayScene!, transition: transition)
    self.playAgain.removeFromSuperview()

我通常喜欢为游戏的戏剧性方面创建一两秒钟的等待时间,所以我使用以下内容,这与您所做的非常相似,但在场景被触发之前会产生一些延迟,以下是我用过,如果你愿意,可以随意更改。

let wait = SKAction.waitForDuration(1.5)
    let theGameScene = GameScene(size: self.size)
    theGameScene.scaleMode = SKSceneScaleMode.AspectFill
    let theTransition = SKTransition.fadeWithDuration(1.0)
    let changeScene = SKAction.runBlock
        self.scene?.view?.presentScene(theGameScene, transition: theTransition)
    

    let sequence = SKAction.sequence([wait, changeScene])
    self.runAction(SKAction.repeatAction(sequence, count: 1))

祝你好运,继续编码和提问。

【讨论】:

感谢您的回答,我的朋友。我在 SKScene 类中有 override func touchesBegan()。我还是有问题。当我再次触摸播放按钮时,游戏开始。但是 override func touchesBegan() 不起作用。 我添加了 self.playAgain.removeFromSuperview()。然后一切都好。 再次对那场比赛感到抱歉。我实际上复制并粘贴了我正在使用的代码。很高兴我能帮上忙。?

以上是关于再次播放按钮工作错误的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D 门打开/关闭错误

无法让我的自定义播放按钮在我的视频播放器上工作

Django 项目中的 HTML 音频标签播放按钮显示为灰色

MP3 播放器,播放按钮没有声音

再次播放按钮不起作用

Swift 2 + Xcode 7:按下错误按钮时播放声音