ホーム › フォーラム › CF2.5使用法全般 › アクティブオブジェクトの画像について
-
投稿者投稿
-
2016-09-13 10:13 pm #12817ラクレス参加者
同フレーム内で大量の背景画像を使用する為
アクティブオブジェクトとしてアニメーションに背景を登録し
背景の切替をフレーム操作で行おうとしています
画像ファイル(jpg)は1枚当たり50kb程のものが100枚ほど
合計で5MB程のサイズなのですがCF2.5上では200MB以上のメモリを消費しています
読み込んだ画像の編集が可能なので元ファイルの圧縮率などは関係無くなるのだと思いますが
元の軽い画像データのまま扱う方法はありませんでしょうか他の使用枚数が多いものも同じ様に変数で呼び出したいので同じ方法を取っていますが
消費総メモリは500MBを越えファイルの保存やアプリの起動も重く作業がし辛くなってしまっています呼び出す画像を変数で指定する事が出来て 且つ
軽い画像は軽いまま扱える方法などございましたらお教え頂きたいです
どうぞ宜しくお願い致します2016-09-13 11:56 pm #12821ASDキーマスター>>ラクレスさん
『ピクチャ』及び『アクティブピクチャ』を使用すると、画像ファイルをアプリケーション(mfa,exe)に含めず、外部に置いたままそれを参照して表示することができます。これにより、画像フォーマットの圧縮効果がそのまま維持されるのでファイルサイズを減らすことができます。また、メモリ使用量についてもアクティブオブジェクトに登録するより幾らかは少なくなるようです。
デメリットとしては、使用時に読み込み処理が行われるため、フレーム開始時に全ての画像がメモリへ読み込まれるアクティブオブジェクトに比べると、画像の切り替えに時間が掛かる場合があることです。初めに「画像ファイルをアプリケーション(mfa,exe)に含めず」と書きましたが、『データエレメンツ』の『バイナリデータ』に登録することで、ビルド時に画像ファイルをexeに含めて、外部に露出しないようにすることもできます(下記のサンプルではこの処理を行っています。フォルダ内の画像ファイルを削除した後にexeを起動しても画像が表示されます)。
画像ファイルの名前を連番にしておき、イベントでファイルを指定する際に、数式を使用して、数字部分を変数で指定すればお望みの動作が実現できるかと考えます。
– サンプルプログラム
https://blog.clickteam.jp/wp-content/uploads/2016/09/cf25_blog_2016-09-13_picture_example.zip2016-09-14 6:49 pm #12828ラクレス参加者ご回答ありがとうございます!
ファイル選択画面にある [数式を使う] の存在に気付きませんでした
背景画像はこの手法でいこうと思います表示中の画像が何なのかを条件とするイベントが多いオブジェクトでは
現在の表示フレームを参照させるやり方が非常に便利なので
このままアクティブオブジェクトで行く事にしましたそれでもう一つお聞きしたい事があります
アクティブオブジェクトのアニメーション速度が最初から0であっても
全アニメーションの画像が読み込まれる為
フレーム開始時にかくつきが起こりテスト中の表示メモリも大きいです
この場合 画面に表示させるのが静止した一枚ずつであっても
読み込まれているデータ(表示メモリ)が多いだけで
処理落ちやスマホの電力消費などに影響してきますか?
現段階では読み込み時以外は軽快なので
それならばグローバルにして初期フレームで読み込ませ
全てのフレームに忍ばせてしまえば等と思ったのですが軽率でしょうか最後にもう一つ・・ テスト時に表示されるメモリ数は
PCゲーム等の動作環境に表記されているメモリや
スマホのRAM使用量などと同義でしょうかどうぞ宜しくお願い足します
2016-09-14 7:35 pm #12829ラクレス参加者すみません追記です
バイナリデータに登録すればexeに含める事が出来るという点ですが
作成段階では Apppath$ + 連番 などで呼び出しを行っていても
ビルド時に呼び出し元のデータがアプリ内に格納され
パス が自動でアプリ内になるという事なのでしょうか
ビルド時に数式がそのままで問題無いのか気になりましたおぼろげですが Val を用いればアクティブオブジェクトの
現在の表示フレームを 参照すると同じ事を出来そうだとイメージが出来たので
やはり軽量化の為に枚数の多い画像は全てお教え頂いたやり方で行こうと思いますいつもご教示頂きありがとうございます
2016-09-18 11:41 am #12834ASDキーマスター>>ラクレスさん
『ピクチャ』『アクティブピクチャ』など一部のオブジェクトはバイナリデータからの自動取得に対応しています。パスは『Apppath$ + ファイル名』のままで問題ありません。
自動取得に対応していないオブジェクトの場合は、イベントの『特別』にある『バイナリファイルを抽出(抽出したファイルを削除する場合は解放)』を実行してファイルを出し、それを指定する必要があります。抽出されたバイナリファイルはファイル名こそ違いますが、元データそのままなのでご注意下さい。『ピクチャ』『アクティブピクチャ』がバイナリデータの画像を表示する際には、全てメモリ上で行われるため、ファイルは外部には露出しませんが、自動取得に対応しているオブジェクトでも、動画ファイルを再生する『Direct Show』オブジェクトなど、巨大なファイルを扱うオブジェクトでは、一旦抽出処理が行われるものがあります。
『Val()』ではなく『Str$()』でしょうか?Str$関数は数値を文字列へ変換する関数です。ファイルパスの指定は文字列でなければいけないので、数値型である変数の内容を持ってくる場合はStr$を使って文字列にする必要があります。逆にVal関数は『文字列型を数値型へ変換』する関数です。
2016-10-02 7:29 pm #12900ラクレス参加者ご回答ありがとうございます!
アクティブピクチャを設置する際に直接ファイルを指定した物は
数式指定の物と違ってフレームエディタ上で選択した画像が表示された状態になりますが
ビルド時の扱いは数式指定している物と同様にバイナリエディタに登録もしくは
実行ファイルと同じ場所にファイルを置く必要がありますでしょうか↑で val を・・・と書かせて頂いたのは
表示中の画像を識別する為にピクチャ名を取得し数値以外の文字列を取り除き
val を用いて変数と比較出来る状態にすれば
アクティブオブジェクトのアニメーションにズラっと背景を登録して
表示中のフレームを取得していたのと同じ事が出来そうと考えたものでした2016-10-02 10:13 pm #12903ASDキーマスター>>ラクレスさん
>ビルド時の扱いは数式指定している物と同様にバイナリエディタに登録もしくは
>実行ファイルと同じ場所にファイルを置く必要がありますでしょうか同じです。ファイルが存在しない状態でビルドした場合はエラーが表示されます。
2016-10-03 12:04 pm #12908ラクレス参加者ご回答ありがとうございます!
ファイルの扱いがだいぶ分かってきました
感謝致します -
投稿者投稿
- このトピックに返信するにはログインが必要です。