1.ロード関数を使って画像をロードするには時間がかかると聞きましたプログラムは上から順に実行されると思うのですがロードしているときに処理が止まってしまうということはないのでしょうか?小さな画像1枚程度なら、0.1秒もかからないと思いますが、体感できるかどうかは別として、基本的にロード中は処理が止まります。この手の処理はタイミングを見極める必要があります。画面が暗転して新しい画面に切り替わる時。正しいやり方というか効率的なというかありますか?関数の引数がやたらと増えてしまう場合は、構造体にまとめてしまうのが、セオリーじゃないでしょうか。呼び出し側の処理が若干煩雑になりがちなので、嫌う人もいるようですが。関数は、ヒープ領域から任意のサイズのメモリを確保するものです。型のサイズ分の領域を確保しているだけです。書いたコードと全く同じ結果が期待出来ます。大きさの領域をヒープに確保しますよって事です。4.画像の大きさが様々な画面でスクロール処理をしたいのですがマップチップのときと同じやり方でできますか?(画像の端の座標を使えばできるかなぁと思っているのですが)画像の端の座標というのが分かりませんが、できますよ。いわゆる多重スクロールって奴と同じ方法ですね。この場合は、大きさの違う画像毎にレイヤー化します。大きさの領域をヒープに確保しますよって事です。いわゆる多重スクロールって奴と同じ方法ですね。この場合は、大きさの違う画像毎にレイヤー化します。ヒープ領域ってプログラムが終わるまで消えない値でしたっけ?staticと何が違うのですか?ちょっと乱暴な言い方になりますが。ヒープ領域というのは、OSが管理している領域です。関数等を呼び出す事で、OSの持つ領域を一時的に借り受けます。OSはアプリケーションが起動されると、アプリケーションに必要なメモリ領域(コードセグメントや、データセグメント等)を確保し、ここへアプリケーションをロードします。これがいわゆるプロセス空間と呼ばれるものです。原則として、アプリケーションはこのプロセス空間で作業する事になりますが、必ずしもアプリケーションが作業するに必要な大きさを持つわけではありません。そこで、アプリケーションからOSに対し、メモリをもちょっと頂戴。とお伺いを立てるわけです。することで、より大きなメモリを扱う事が出来るようになります。これがヒープ領域です。変数は、一般にデータセグメント(プロセス空間)に配置されます。多重スクロールとレイヤー化ってなんでしょうか?調べてみたのですが用語?ばっかりでさっぱりだったので素人にも分かるように教えていただけたら幸いです一般にマップチップは2次元配列で表現されると思いますが、この2次元配列を2個用意して、別に管理する事で重ねて表示しましょう。いうのがレイヤー化です。街の中を考えた場合、地面だけの配列・建物だけの配列を用意して重ねるとすれば、地面レイヤー・建物レイヤーと呼ぶ事が出来ます。1つの2次元配列で地面・建物表現した場合、右に100ピクセルスクロールさせてしまうと、地面と建物が同じようにスクロールしますね。レイヤー化した場合、地面が右に100ピクセルスクロールする間に、建物を50ピクセルだけスクロールさせる。いった事が容易になります。これが多重スクロールです。#あまりいい例が思いつきませんでしたが、地面と建物が別々にスクロールする事が現実にあり得ないという事はスルーしてください。Loading...等)を動作させられますよ。読み込み終了もしくはスレッドの終了を監視する枠組みを自前で構築する必要がありますが、いちど構築すれば応用範囲が広いです。必要なメモリをヒープ領域から確保しているだけです。使い方は、普通の変数と変わりません。確保するメモリ領域にはいくつか不都合があります。自動変数では、一般にスタックへ詰まれるため、変数の値を永続的に保持する事は出来ません。静的変数では、その寿命はプログラムの終了までですが、逆に言えばプログラムの実行中は常に確保されていて、時に無駄とさえ言えます。コンパイル時にそのサイズが決定されていなければなりません。100MBもある動画ファイルを再生するために読み込むとして、静的領域にあらかじめ100MB確保しておく。なんて行為はとても馬鹿らしいですね。ヒープ領域に確保したメモリの寿命は、確保してから解放するまでで、これはプログラマが任意のタイミングで行う事ができ、またそのサイズも動的に決定する事ができます。これにより、大容量のメモリを効率よく捌く事が可能です。関数等を通じて、OSにおねだりする必要があります。確保した領域へのアクセスは、領域へのアドレスを保持するポインタを経由して行います。それ以外は、普通の変数(構造体)となんら変わりませんよ。Loading...等)を動作させられますよ。読み込み終了もしくはスレッドの終了を監視する枠組みを自前で構築する必要がありますが、いちど構築すれば応用範囲が広いです。すんまそんDXライブラリに非同期の読み込み関数は無いので、スレッドを使用して自作する必要があります。今の段階で良く分からないのであれば、無理に非同期の読み込みをする必要はないと思います。静止画のロード画面でも何とかなるかと。この構造体の例の場合、普通に宣言するのと違うことは寿命の点だけってことですかね?staticと違うことはサイズを指定できないってことでしょうか?サイズ指定はできますよ。mallocの引数がサイズです。)のメモリを確保することになります。・エムアロックやstaticを使うと値を保持できる値を保持するのは通常の変数でもできます。違うのはいつまで値を保持するのか(=寿命)です。・エムアロックとstaticの違うところはメモリを指定できるかできないかであるmallocによる動的確保ではメモリを確保・解放するタイミングが指定できます。static変数については必ずプログラム実行・終了時に確保・開放されます。8年前スレッド非同期読み込みは読み込みにトンデモなく時間がかかる(十数秒)のでミニゲームで遊ばせたいとか、ステージ間の読み込みレスに見えるゲームを作りたいなど特別な意図がない限りやらなくて良いと思います。メモリ関係を理解していない人が組むと確実にバグりますので。それも超厄介なバグを産みます。常に描画しながら読み込むと言うのはロードの使い方として大きな間違い(フレームレートが落ちる。メモリリークする)ですので、暗転中やステージ間で読むのが正しい使い方です。それと関係ない指摘で申し訳ないですが「エムアロック」は口頭でやり取りする分には良いのですが文章中にあると違和感があるのでmallocと書いていただけると助かります。英語のカタカナ表記は基本的に口頭で会話する時用と思っていただいた方が良いかもしれません。・動的なサイズを指定できる。メリット・不要になれば好きなタイミングで開放できる。メリット・解放(free)を忘れるとメモリに溜まっていく。デメリット(これをメモリリークと言う)・確保忘れやサイズを間違うといとも簡単にメモリ保護例外が発生する。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。xnum;//横方向の数。ynum;//縦方向の数。ゆう違いでしたかとゆうことはstaticでもメモリが確保できない場合の処理を考えてやる必要があるのでしょうか?staticで確保できない場合は、プロセス自体が起動しません。OSがエラーを出すのでプログラムは何も出来ないって事です。}違った質問になって申し訳ないのですが↑これはどういう意味でしょうか?たくさん記号があって意味が分かりません(defineの置換ぐらいは知っています)もし条件(cond)が偽ならDebugBreak();を実行しますというマクロです。条件(cond)を!(条件演算子)で否定。デバッガで停止する関数。あと、もう一つはソフト屋さんのRPG講座のコードなんですがヘッダーに記述されているものはインクルードされた場所に展開されるのでしたよねでも、その考え方だと構造体の実体の宣言?が構造体の定義よりも前に来ているのですがこれがあるので大丈夫ですよ。*CHAR_OBJECT;これも実体ではなくtypedefの定義に過ぎませんし、ポインタです。構造体の実体が発生するのはmallocの時ですね。それとわざわざポインタを使って間接参照をしないといけない理由ってなんでしょうか?処理のスピードが速くなるとかそういうことですか?渡した関数の先で内容が書き換えられることです。構造体を普通に引数で渡したら内容がコピーされてしまうので、書き換えても呼び出し元には反映されません。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。条件(cond)を!(条件演算子)で否定。デバッガで停止する関数。*CHAR_OBJECT;これも実体ではなくtypedefの定義に過ぎませんし、ポインタです。マクロ」http://www.geocities.jp/ky_webid/c/039.htmlそれとexit関数ではプログラムは完全に停止しますが、DebugBreak();ではデバッガを利用していれば一時停止しますので変数の値などをデバッガで確認できます。typedefの意味を復習してよくわかりましたそれで定義する必要性はありますか?プログラム全体の設計コンセプトの問題です。すれば便利か、書き間違い、バグが減るかって事が重要ですので、こういう手もありますよって事ですね。するかは自分で考えてみてください。自分で考えないと、そもそも意味が無いですから。*charobjこれと同じ意味でしょうか?どちらが効率的かって言われたら知りませんがどっちでもかまいませんが、*を書く手間を減らしただけです。手間を減らすのはバグを減らための基本ですので。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。8年前MACRO_ASSERTは指定された条件が満たされない時にプログラムを停止するマクロです。if文を省いたら無条件で停止してしまうので意味がありません。無条件で停止させたいならブレークポイントを使ってください。それで置換のことなんですけど(cond)って書かなくてはならないのでしょうか?マクロ引数で(cond)と書くのはトラブル防止です。マクロ」http://www.geocities.jp/ky_webid/c/039.htmlでも説明されています。if文とかを省いて直接、DebugBreakに置換することはできないのでしょうか?そうしたら無条件に停止しますけど?[追記]こういうのは頭だけで考えずに実際に動作を試していただくと理解できると思います。テストプログラム書いて見る時間を惜しまないでください。それと、ソフト屋さんのRPGコードでmallocを使っているのは「保持した画像情報を忘れないようにするため」であっていますか?可変個数のデータを扱うからとCHAR_OBJECTであれば自キャラ以外も扱うのでCHAR_OBJECTが最終的に何個になるか分からないからです。ためのmallocです。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。可変個数のデータを扱うからとCHAR_OBJECTであれば自キャラ以外も扱うのでCHAR_OBJECTが最終的に何個になるか分からないからです。都合により今は自宅の外のパソコンから書き込んでいますのでCが手元にないですここのサイトを使えば、どこからでも確認できますよ。cond;などの変数にしないと行けないと思いますがどうするのでしょうか?コンパイルするとこうなります。//Linuxには無いので仮のものとして定義。これじゃあ可変個数とか関係ない気がするのですがどうでしょうか?それと*2と書きましたがその部分を*iにしたりできませんかねreallocの存在は知っていますがわざわざ呼び出すのも面倒くさいのでmallocする時点で個数が決まっていれば良いですが、char_Load()は不定期に複数回呼び出される前提ですので、一度に必要な分を全部確保する事はできません。char_Load()は一度に指定個数を確保するのではなく呼び出される回数で不定個数を確保するのです。個数が決まっているのなら、*iとすることは可能です。ちなみに前提が全く違うので、2つの方法のどちらが良いかは比較する意味はありません。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。mallocする時点で個数が決まっていれば良いですが、char_Load()は不定期に複数回呼び出される前提ですので、一度に必要な分を全部確保する事はできません。char_Load()は一度に指定個数を確保するのではなく呼び出される回数で不定個数を確保するのです。物わかりが悪く申し訳ないですうまく言えませんがメモリを確保する理由が分かりません可変個数って仰っていますがロードされた後、リターンされて違う構造体に代入されていますよねだからメモリに確保しないで普通に返せばいい気がしてなりません何度も書いてますがCHAR_OBJECTは構造体ではありません。ポインタなのでポインタ値はmallocされたヒープメモリを指しています。それに、char.cpp以外のプログラムは構造体の内部構造が分からないのでサイズ不明の構造体は実体宣言できません。宣言できるのは構造体のポインタの実体だけです。これも納得できるまでプログラムで実験してみください。char.cpp外から構造体のメンバにアクセス出来ません。CharObjStruct;としてみてください。エラーになりますから。することで安易にメンバに触れない用にガードしています。Tool」http://ideone.com/N9rs8[追記]自分で一度関数を作ってみるとわかります。・Loadで呼び出すとき引数を変えるだけで違うキャラクタをロードできる。・複数のキャラクタをロードしておける。・別々にキャラクタの描画タイミングが制御できる。・ロードしたキャラクタを個別に開放できる。・ロードした画像イメージの値にchar.cpp以外は直接触ることは出来ない。これを満たす関数を書いてみてください。私外の方法でも幾つか方法はあります。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。普通に構造体ポインタに引数で受けた情報を入れて返したらどうなりますか?エムアロックを呼び出さずに返したら構造体ポインタですので、構造体の実体が何処かに必要です。構造体の実体は何処で実体宣言するのでしょうか?想定していると違うというのであれば、隠蔽さんの考える擬似的なソースコードを書いてみてくださいね。あと前に書きましたがエムアロックは口語用なので書き文字としてはmallocをお使いください。方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。ミクプラは自由にリンクできます。