ランダムの罠?@シューティング

本日のお品書きは以下になります

  • メモリ開放
  • ランダムの挙動
  • ファイル分け
  • キー入力制御
  • メモリ開放

画面遷移を検知した場合、ヒープに確保した領域を開放するようにしました。
・・・・が、うまく開放できていないみたいです。freeやSDL_FreeSurfaceは通っています。
ヒープが壊れていますとかのエラーダイアログも出ないです。
ですが、タスクマネージャーの使用メモリは増える一方・・・ううむ。→考え中

  • ランダムの挙動

ランダム関数の挙動が若干想定してなかった動きだった点です。
現在、敵が破壊されると敵がいた座標からランダムにエフェクトが継続的に流れます。
その際のエフェクト表示座標の決定部分は以下のコードなのですが、

tmp_effect.core.pos.x = efc_array[index].core.pos.x + Random(-50,50);
tmp_effect.core.pos.y = efc_array[index].core.pos.y + Random(-50,50);

最小値と最大値がハードコーティングなのは d(・・;シー で、、、
ここでのRandom関数は第1引数に最小値、第2引数に最大値(この値未満となる)を設定すると
その範囲内のランダムな整数を返す関数です。
これを実行すると、敵周辺のナナメ方向(左上〜右下45度)にしかエフェクトが表示されません。
1行目と2行目ののRandom関数の返り値が同じ値でした。
たぶん、2回連続で引数も同じ値で呼び出しているので、最適化の過程で同じ値を参照するように書き換わっているのではないかと思います。
ちなみに、定数や変数を使っても結果は同じでした。
なので、対処療法的に・・・

tmp_effect.core.pos.x = efc_array[index].core.pos.x + Random(-50,50);
tmp_effect.core.pos.y = efc_array[index].core.pos.y + Random(-49,49);

これでエフェクトが散らばるようになりましたが、何か良い方法はないかなーー

  • ファイル分け

今までTitle.cへGame画面以外の描画関数をまとめていたので、分割しました。
それに伴ってフィルタの階層が一つ深くなって画面ごとに分けました

  • キー入力制御

画面遷移のデバッグをしたい!とのことで、デバッグ入力関数を用意し、SDL_PollEventを呼び出したところ、メイン入力制御ができなくなりました。
SDL_PollEvent関数が入力をキューイング?している為だと思います。
→応急的な対処で、入力を一括して取得し、キーの値によって呼び出す関数を分岐する形にしました。