問題タブ [skview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - ゲームオーバータスクをUIViewControllerに委譲するSKSceneの難しさ
2 つの UIViewController があります。ユーザーはUIViewControllerから始めます。次に、ユーザーはボタンをクリックしてゲームをプレイします。したがって、アプリケーションは、SKViewでゲームプレイを表示する別のビューコントローラーであるPlayViewControllerに順次切り替えます。ActionSceneは、ゲーム プレイを担当する SKScene サブクラスです。ユーザーが失敗すると、アプリケーションはラベル (SKLabelNode) を表示し、ゲームを終了するかどうかを尋ねます。ユーザーがこのラベルをタップすると、ゲーマーは PlayViewController を介してメイン ビュー コントローラー (UIViewController) に戻されます。したがって、ActionScene はこのタスクを PlayViewController に委任する必要があると考えています。以下は ActionScene からのものです。
PlayViewController に関しては、次のように ActionScene を SKView に提示し、ユーザーを UIViewController に送り返す役割も果たします。
そのため、ユーザーが完了ラベルをタップすると、closeScene が作動するように設計されています。しかし、このデリゲート メソッドが呼び出されることはありません。過去 9 か月間、iOS アプリケーションを開発していません。しかし、私は正しい考えを持っていると思います。私は何を間違っていますか?これまでのところ、このトピック、このトピック、その他を読みました。
ご協力ありがとうございました。
// 追加説明 //
- ユーザーが doneLabel をタップする前に、すべてのアクションが削除されます。
- ゲームアプリがtouchBeganに入ります。ただし、[spriteView presentScene:scene] 行はスキップします。
ios - SKView backgroundColor を設定できません
シーンが表示される前に、SKView の背景色 (灰色) が一時的に表示されるという問題があります。
ストーリーボード エディターとコントローラー ( self.skView.backgroundColor = [SKColor blueColor]
) の両方で手動で設定しようとしましたが、グレーのままです。これはオーバーライドできる属性ではありませんか?
更新 #1
何が起こっているかについての簡単な説明は次のとおりです。
viewDidLoad
が呼び出されskView
、灰色の背景で画面に表示されます (skView.scene
はまだ設定されていません)。- ゲームのすべてのアセットを読み込みます (約 1 秒かかります)。この時点で、灰色の背景が表示されます。
- アセットがロードされたら、シーンをロードして表示します (灰色の画面がシーンのコンテンツに置き換えられます)。
ViewController
ios - SpriteKit - アプリを正しく一時停止および再開する方法
Games by Tutorials ブックの助けを借りて作成した iPhone 用の最新ゲームに大きな問題があります。
注:SpriteKitのメソッド-マルチタスクの正しい方法は機能しません。
したがって、ViewController.m ファイルでは、プライベート変数 SKView *_skView を定義しています。
次に、私はこのようなことをします:
そして、_skView を定義しましたが、すべて正常に動作します。
しかし、ゲームを中断すると、状態が初期状態にリセットされるため、たとえば、現在プレイしているときに誰かが私に電話をかけた場合、ゲームはメイン メニューに戻ります。こんなはずない。
上記のサイトに基づいて、これを作成しました。
しかし、2 番目のメソッドが呼び出され、SKView* ビューが nil であるため、ゲームは起動するとすぐにクラッシュします。self.window.rootViewController.view から取得しても機能しません。
self.window.rootViewController.view.subviews からも取得しようとしましたが、どちらも機能しません。
次のように SKView (ViewController.m) を定義できません。
GameCenterController でエラーが発生するためです。
誰かが実際のskViewを正しく取得して適切に一時停止する方法を教えてもらえますか??
ios7 - オーディオ SKAction を停止するには?
目標: 新しいシーンを提示したい:
新しいバックグラウンド ミュージック (レベル 2 からの新しいバックグラウンド ミュージック) を開始するために、現在のバックグラウンド ミュージックを終了します。
問題: ゲーム全体がいくつかのミニゲームで構成されているため、新しいシーンを提示すると、シーン (レベル 1) のバックグラウンド ミュージックが再生され続け、ミニゲームを終了しても停止しません。
再生される音楽は SKAction です。
次のレベルへの移行は次のようになります。
コメント コード行では、私が既に試したものと機能しなかったものを確認できます。:
絶対に何もしなかった。:
ラインはトランジションのみを停止しますが、音楽はまだ続きます。
私は次のことを試しました: - で弱いまたは強いプロパティを使用しました:
「initWithSize」でSKActionを初期化したので、「withKey」プロパティを使用してアクセスできるように、SKActionへのポインターを保護します。誰かが SKAction はファイア アンド フォーゲット オブジェクトであると書きましたが、それへのポインターを保存しないと後で (直接) アクセスすることはできないと私は理解しました。しかし、それはうまくいきませんでした/私を助けてくれました。
私は他の多くのスタックオーバーフローの投稿を調べましたが、誰も助けてくれなかったり、少なくともこれが起こる理由を教えてくれませんでした:
SKAction playSoundFileNamed はバックグラウンド ミュージックを停止します
永遠に繰り返す SKAction を停止する - スプライト キット
アクションの途中で SKAction を終了することは可能ですか?
・・・感想: SKSceneオブジェクトの作成でアクションが作成されているようです。それに「フック」され、オーディオの長さの後に終了します。repeatForever を使用している間は、停止しませんでした。ただし、一時停止または停止する方法はありません。また、SKAction を SKSpriteNode にフックしてみました。SKScene が読み込まれると、動物が読み込まれます。そのため、SKSpriteNode で SKAction をフックして、SKSpriteNode から removeAllActions などを使用しようとしましたが、うまくいきませんでした。
SKAction、SKView、SKScene、SKSpriteNode のドキュメントを確認しましたが、最終的にはあまり役に立ちませんでした。
アクションを実行しているオブジェクトがどこかに存在するようです。
エラーの内容:
これはシミュレーターまたはデバイス関連のエラーではありません。シミュレーターとデバイスの両方でテストしましたが、同じ結果 (エラー) でした。
これはプロジェクト関連のエラーではありません - 別のプロジェクトでテストしましたが、はるかに小さく、同じ結果 (エラー) でした。
一時的な解決策: AVFoundation フレームワークの AVAudioPlayer クラスを使用しています。私が作成した:
level2 がロードされたときに theBackgroundSong を変更したかったので、これはあまり役に立ちませんでした。ネストされた SKScene 構造からプロパティにアクセスする際に大きな問題がありました。
アドバイス、手がかり、ヒント、またはアイデアは非常に役立ちます。
ios - SpriteKit シーンを完全にアンロードする方法
ゲームで再試行ボタンを押したときに、MainScene をリロードするようにします。私はこれをやっています:
ただし、これにより、再試行するたびにメモリ/CPU 使用率が (大幅に) 増加します。約 10 ~ 20 回の再試行の後、顕著な遅延が発生します。
すべての SKEmitterNode と SKSpriteNode を静的にして、メモリの問題を修正したので、スプライト、エミッタなどがメモリから解放されず、再試行するたびに再ロードされて、2 倍になっていると思われます。
次のようにスプライト/エミッターをロードしています。
スプライトのロードまたは再試行が間違っていますか?
ios - SKScene を閉じた後もメモリが高いままです
dispatch_once NSObjectを使用してデータ ポインターを作成します。そのため、すべてのゲーム アセット ポインターは、メイン ビューコントローラーが表示されるときに作成されます。ゲームをプレイするために、ユーザーはUIViewControllerの特定のレベルに対応するUIButtonをタップします。これを LevelSelectionController と呼びましょう。ゲームが終了すると、ユーザーはラベル ( SKLabel ) をタップします。すべてのアクションとノードが削除されます。
さらに、特定のレベルのSKSceneサブクラスは、次のように、ユーザーを LevelSelectionController に戻すタスクを、ゲームSKViewを提示するビュー コントローラーに委任します。
私が持っている唯一の問題は、ユーザーがゲーム シーン (SKScene) を離れてもメモリが高いままであることです。ゲームには多くのアセットが必要です。そのため、ゲームを開始すると、メモリ使用量が 200 MB に跳ね上がります。ユーザーが元のレベル選択ビュー コントローラーに戻ったとき、アクティビティ モニターによると、ゲーム シミュレーターはまだ 200 MB を消費しています。ユーザーが別のレベルに入ると、メモリ使用量がさらに 10 MB 跳ね上がります。では、ユーザーが SKScene を離れたら、最後のゲームのメモリを解放するにはどうすればよいでしょうか?
ARCを使用しています。Xcode のバージョンは 5.1 です。開発対象はiOS 7.1です。
ご協力ありがとうございました。
-- 編集 1 --
私はばかだ。私は問題が何であるかを知っています。シーンを閉じると、新しい SKView が作成され、それを nil に設定して現在のシーンから抜け出します。できます。しかし、それはそれを行う方法であってはなりません。代わりに、現在の SKView を表示する前に変数に設定する必要があります。シーンを閉じるときに、その変数を nil に設定する必要があります。うーん...私は考えていませんでした。
-- 編集 2 -- 現在のシーンが nil で表示されている場合、ほとんど変化はありません。removeFromSuperview から削除しても、あまり効果はありません。