0

xCode ベータ 6 に更新したところです。ベータ 5 ではすべてが機能しますが、ベータ 6 では何かを変更する必要があります。「!」をたくさんつけます。私のコードで。とにかく、私のプロジェクトは小さなゲームです。そして、レベル(勝ったか負けたか)を完了した後、sksceneを呼び出したいです。

コードはmainviewControllerのどこにあります:

if(flag==true){//  IF we WON
            /* That below lines should call "Won.swift" file But it doesn't */
            var scene = Won(fileNamed: "GameScene")
            let skView = self.view as SKView
            skView.showsFPS = true
            skView.showsNodeCount = true
            skView.ignoresSiblingOrder = true
            scene.scaleMode = SKSceneScaleMode.AspectFill
            scene.position = CGPointMake(0, 568)
            skView.presentScene(scene)
        }

Won.swift ファイルは次のとおりです。

class Won: SKScene {

    var audioPlayer = AVAudioPlayer()

    override func didMoveToView(view: SKView) {
        /* Setup your scene here */
        var alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Fireworks", ofType: "mp3")!)

        // Removed deprecated use of AVAudioSessionDelegate protocol
        AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
        AVAudioSession.sharedInstance().setActive(true, error: nil)

        var error:NSError?
        audioPlayer = AVAudioPlayer(contentsOfURL: alertSound2, error: &error)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
        let myLabel = SKLabelNode(fontNamed:"Chalkduster")
        myLabel.text = "You Win";
        myLabel.fontSize = 65;
        myLabel.fontColor = UIColor.redColor()
        myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
        self.addChild(myLabel)
    }

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        /* Called when a touch begins */
    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }

}

このコードはベータ 5 では機能しますが、ベータ 6 では機能しません。さらに、uikit、avfoundation、spritekit ファンデーションをプロジェクトに再追加します。また、メディア ファイル「mp3」または画像がバンドル リソースに存在することも確認します。プロジェクトはエラーや警告なしで完全に実行されます。ただし、Skscene セクションは機能しません。また、ブレークポイントを配置して、それがどのように行われるかを追跡しようとしました。プロセスはこれらの行で実行されますが、「Won.swift」ファイルには実行されません。

なにか提案を?ありがとうございました。

4

1 に答える 1

0

変数「フラグ」が正しく true に設定されていないようです。そのコードに println() をいくつか入れて、そのコードが実際に呼び出されているかどうかを確認しましたか?

また、なぜそれを mainViewController に入れるのですか? 別のシーンに移動したときにシーンが制御されるように、プレイ シーンに配置します。メイン ビュー コントローラーは (おそらく) 最初のシーンのみを起動し、シーン ロジックが他のシーンへの移行を処理できるようにする必要があります。

実際、それが問題になる可能性があります。その「フラグ」が true に設定されていて、その関数がフレームごとに繰り返し呼び出されると、そのファイルが繰り返し呼び出されます。または、そこでフラグを false に戻し、そのコードが別の場所で実行された場合、別のシーン ファイルを呼び出し、すぐに元のシーン ファイルに切り替えて、「勝った」シーンが表示されないようにしている可能性があります。

いろいろあるかもしれません。いくつかの println() をまき散らし始め、ブレークポイントを設定して、正確に何が起こっているかを把握します。

于 2014-08-22T16:32:16.897 に答える