問題タブ [adobe-scout]
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.
actionscript-3 - AS3 TextField と TextFormat のメモリ リーク「その他のビットマップ メモリ」
AS3 のプログラミング中にメモリ リークの問題が発生しました。
テキストを as3 でフォーマットしてステージに追加しようとすると、おかしなことが起こります。
これは私のコードの一部です:
このテキストフィールドを自分のステージに追加し、adobe scout CC でメモリ使用量を確認すると、「他のビットマップ メモリ」は何も異常を示さず、正常に動作します。
しかし...
このコードを実行して大文字の W をテキストに追加すると、「他のビットマップ メモリ」が狂ってしまいます。
クレイジーなことは、文字 I をテキストに追加すると、正常に実行されることです。
フォントの幅やサイズに関係があると思います。フォント サイズを大きくすると、同じ問題が発生します。
この問題を防ぐ方法はありますか???
Adobe Flash Builder 4.7 と Adobe Scout cc を使用しています。
actionscript-3 - AIR、Flash アプリでの画像解凍による遅延やパフォーマンスの問題を軽減するにはどうすればよいですか?
Adobe の Scout の多くのユーザーが気付いているように、画像の解凍は、ゲームなどのフレーム レートに敏感なアプリケーションでおそらく最大のパフォーマンス ヒットです。
ゲーム (2D サイド スクローラー) でこれを使用すると問題が発生します。scout が画像圧縮解除イベントを表示する場合を除いて、フレームレートは非常にスムーズ (50+) で、その後 2 ~ 15 fps に低下します。それはひどいです。追加する画像 (画面上のタイル) が多いほど、これが発生します。
これに慣れていない場合は、Flash Player が「不要」で画面に表示されていない画像をメモリから削除し、再度画面に移動すると再圧縮されることに注意してください。これは、約 10 秒ごとに発生すると報告されています。
現時点での状況は満足とはほど遠いと思うので、私の解決策を共有し、あなた自身の解決策をいくつか尋ねたいと思います.
明白で私のコメントから始めましょう:
- Flash Pro では、インポートされた (埋め込まれた) 画像はすべて、プロパティ パネルで、圧縮解除なし / 無損失 PNG/GIF に設定する必要があります。
コメント: これは役に立ちますが、それでも減圧が発生し、通常の遅延の問題が発生します。
- 複数のタイルや画像を使用する代わりに、それらをより大きなタイルに統合するか、ゲームまたはアプリの「レベル」ごとに 1 つの画像に統合します。
コメント: 明らかな理由から、これも非常に役立ちます。画像が大きいため、画面全体に表示されるか、常により多くの画像が表示されるため、Flash はそれを取り除くことができません。明らかな理由から、これは本当に醜い解決策です。大きな画像をインポートすると Flash がクラッシュし、サイズの制限があり、タイルではなくレベルやグラフィック アプリを設計するときに大きな画像を扱うのは一般的に非常に困難です。ただし、これが機能する場合もあります。
- 複数の画像またはタイルがありますが、Flash がそれらを強制的にメモリに保持する場所にそれらを画面に追加します (.visible = true が必要です)。
コメント: これも機能しますが、上記のソリューションよりもさらに醜いです (それを呼び出すことができる場合)。これは、大きな画像をインポートしたり、最大サイズに達した場合に Flash がクラッシュしないようにするための単なる回避策です。しかし、それはトリックを行います。下のビットマップを形状オブジェクトのフィラーとしてのみ使用する場合、これらのイメージを他のフラッシュ レイヤーまたはイメージの下に非表示にすることができます。
- ImageDecodingPolicy.ON_LOAD を使用します。
コメント: 私のゲームでは、これだけではほとんど違いがありませんでしたが、ソリューション 1 と混ぜてみると、わずかに効果があるように見えました。コードは次のとおりです。
これは通常、ビットマップのロードに使用されることは知っていますが、swf ではわずかにしか機能しませんでした。
- オブジェクトをメモリ上に保持するには、bitmapData オブジェクトで getPixel() を使用します。
コメント: これは何人かの人には効果があると読みましたが、私にはまったく効果がありませんでした. 非埋め込みアセットのコードの最も重要な部分 ( Keeping Bitmaps Decompressed ) は次のとおりです。
あなたが私のようで、埋め込み画像を使用している場合は、次のようなコードでコードを適応させることができます:
次に、10 秒ごとに getPixel() 関数を呼び出して、画像をメモリに再利用します。
残念ながら、私には関係ありません!!
- ビットマップが既にビットマップであっても、ビットマップをビットマップとしてキャッシュして、Flash Player アルゴリズムがそれをメモリに保持するように強制します。
コメント: これは非常にうまく機能し、「疑似ソリューション」2-3 とほとんど同じです。フレームレートはそれほど良くありませんが、解凍によるしゃっくりが非常にスムーズに解消されます。これはもちろん、instance.cacheAsBitmap = true; のようなコードで実行できます。または、単純に Flash Pro から直接レンダリング オプションを選択します。
- bitmapData を新しい BitmapData インスタンスにコピーし、元のアセットをガベージ コレクターに残します。データのコピーによる 1 回限りの CPU ヒットは比較的小さく、圧縮解除されたビットマップの 2 つのコピーを保持するために一時的に余分なメモリを使用することになります。ただし、完了したら、圧縮されたデータを解放することもできます。
コメント: 私も何もしませんでした。また、なぜそれが必要なのかわかりません:
私が試したのはこれだけですが、ご想像のとおり、私はこれらのダクトテープのハックに満足しているとは言えません。おそらく解決策 4 と 5 を除いて、これらはすべて平凡なパッチのように思えますが、実際には何もしません。
だから、ここに私の質問があります:
解決策 5 と 7 がうまくいかない理由について、答えを探すのを手伝ってくれませんか? コードで埋め込み画像オプションを使用しており、タイマーを使用する代わりに、enterFrame 呼び出しで counter++ 変数の 50 ティック後に呼び出しています。
別の回避策を提供できますか?
actionscript-3 - Adobe Scout が起動しない
Flash Player 14.0 用の Flex 4.6.0 を使用して Flashedevelop でコンパイルしています。Scout の準備ができており、他の swfs も検出しています。しかし、swf を開始すると、まったく何も起こりません。私は Advanced Telemetry について話しているのではありません。Scout は swf をまったく検出しません。何が間違っている可能性がありますか?
actionscript-3 - Adobe Scout は 32 ビット PC ではダウンロードできなくなりました
Adobe Scoutは、Flash コンテンツ用の画期的なプロファイラーであり、アドビから無料で提供されます。しかし、数か月前からこのアプリをダウンロードできなくなりました。Creative Cloud メニューからも消えました。Adobe Gaming SDK にはパッケージ化されなくなりました。公式ページで[ダウンロード] をクリックすると、Creative Cloud アプリがフォーカスされるだけですが、何も起こりません。もうこのアプリを入手する方法はないようです。既存のインストール (古いバージョン) では、「このアプリは期限切れです」というエラーが表示されます。Scout CC for Windows をダウンロードする方法はありますか? 最近、誰かがそれを機能させましたか?どのように?
actionscript-3 - Adobe Scout: gotoAndPlay() 関数は思ったより重い?
新しいゲームの開発のある時点で、Adobe Scout の発見につながる問題に出くわしました。この問題は、しばらくゲームをプレイした後に発生し、アプリケーション全体がクラッシュするまでゲームの遅延がますます大きくなりました。Scout でいくつかのプロファイリングを行ったところ、次のような結果が得られました。ほとんどのメモリ負荷は、gotoAndPlay() 関数が原因であるとは限りません (プロファイラーによって提示されたデータを正しく理解している場合)。この関数は、Flash では常に簡単なタスクのように見えましたが、実際にはそうではありませんでした。それとも、フレーム番号の代わりにテキスト ラベルを使用していることが原因ですか? 私は現在、この方法の使用を減らすための可能な回避策を探していますが、そうしている間、この問題を認識している人々から考えや可能なオプションを聞くことは無限に役立ちます.
actionscript-3 - AS3 のクリーンアップ後に非常に小さなリークが発生する原因は何ですか? スカウトファイル付属
私が取り組んでいるこの FlashPro/AS3 プロジェクトがあり、@vesper などの助けのおかげで、かなりの前進を遂げることができました。
ただし、現時点では、メモリにわずかなリークがあるようです。せいぜい非常に小さいもの。このようなトレースをいくつかの場所に設定しました。
痕跡:
trace("On Load" + System.totalMemory / 1024);
場所:
On Load
doCleanUp
launchVideo
リークはかなり小さく、Scout によると、Uncategorized メモリ内の何かに関連している可能性が最も高いと思います。
ここにスカウトファイルがあります -スカウトファイル
ここに完全なコードがあります
出力に別の目を向けることができれば最高です。
テスト結果は次のように表示されます... 1) 1 つのビデオがクリックされ、そのまま再生されます 2) 2 つのビデオが再生され、停止/破棄されます
actionscript-3 - 画像の読み込み後にインライン関数を作成すると、メモリ リークが発生する
ゲーム プロジェクトで発生した予期しないメモリ リークを分析していたところ、奇妙な結果が見つかりました。私は Adobe Scout を使用してプロファイリングを行っており、ムクドリ、テクスチャ、読み込みライブラリなどの他のすべての要因を排除しました。コードを縮小して、単純に png をロードし、完了イベントで空のインライン関数をすぐに割り当てました。
png を読み込むと、デフォルトで画像が割り当てられます。gc を読み込んだ後に何もしないと、その画像がクリアされます。しかし、インライン関数を作成すると、その画像が何らかの形でガベージコレクションされるのを防ぐようです。私のテストコードは;
インライン関数を作成するコードを削除すると、
gc が機能し、メモリからイメージをクリアします。
これについて論理的な説明がないため、flash / as3 のバグが疑われます。私のコードをテストして同じ結果を得たコメントをお待ちしております。
注: テストするには、空の as3 プロジェクトのメイン クラスをコードとインポート パッケージに置き換えます。任意の png を読み込むことができます。flashdevelop、flex-sdk 4.6.0、および flash player 14 を使用しています。