せんちゃの修行日記外伝~おちこんだりもしたけれど、私はげんきです。~

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

せんちゃの修行日記外伝~おちこんだりもしたけれど、私はげんきです。~

投稿記事 by せんちゃ » 12年前

出向3週間目です。
鼻風邪がひどくて集中できない最近です^^;


そろそろコンシューマー開発の環境なども馴染めてきた頃合、
さっそく会社で私の上司に当たる方が作ってたフレームワークをDXライブラリで実現してみました。
まぁ、DXライブラリじゃなくてもDirectXでもUnityでもOpenGLでもなんでも使える知識なんですけどね、
一応Windowsゲームを開発する際は開発速度最優先なのでDXライブラリです。


まず、今回の独習による開発のテーマは
1・シーンが変わるたびにリソースもメモリーもすべて勝手に片付けれるようにする
(メモリーリークとかフラグメンテーションの発生をできる限り起きないように設計する)
2・機械的に作れる部分は限りなく楽をして自動生成ツールを作る。
エクセルでまとめたデータリストからCSVファイルを作成⇒csvを解析して
・構造体
・データID
・データリスト
を自動出力するようにする。
3・ヘッダーファイルには公開するメソッドとクラスしか記述しない。
できる限り外部に情報を公開しすぎないように最低限にすることでより読みやすくなる!とかそんな感じです。


コンセプトは早く作業が進み、修正も楽に。
簡単に組めるようにしていきます。


メモリ管理は
連結リストを作成、そこから継承してバイトデータだけを持ったメモリ箱を作ります。
メモリ箱に何バイト持つかは各自で定義、
STGでエネミーが一体につき50バイトのメモリを持って最大50体まで生成できるとしたら
50バイトのベイトデータを持ったクラスを50個作ります。


それを連結リストで連結させます。
エネミーを生成したければそのオブジェクトをリストから取り出してそこのバイトメモリから生成します。
死んだら再び、そのエネミーの持つバイトメモリを取得してリストに戻す。


このデータを持つリストはプレイヤーやエネミーに応じて個別に用意
衝突判定などはハンドラーなどを使って処理を行います。
タイトルやメニュー画面のUI周りもリストから作成していく感じで作ります。


こういうシステムを作るときにnewとかdelete演算子は非常に便利ですね。


ではでは

ISLe
記事: 2650
登録日時: 15年前

RE: せんちゃの修行日記外伝~おちこんだりもしたけれど、私はげんきです。~

投稿記事 by ISLe » 12年前

せんちゃ さんが書きました:このデータを持つリストはプレイヤーやエネミーに応じて個別に用意
(略)

こういうシステムを作るときにnewとかdelete演算子は非常に便利ですね。
ご存知かもしれませんが、配置new(placement new)を使うと50バイト確保したメモリ領域に、『最大』50バイトまでのオブジェクトを生成できるので、メモリプールの共有ができますよ。

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

Re: せんちゃの修行日記外伝~おちこんだりもしたけれど、私はげんきです。~

投稿記事 by せんちゃ » 12年前

ISLe さん

placement newの存在は知りませんでした。
調べてみましたが、便利な機能ですね、こんな機能がC++に備わっていたとは…

ずっと自分でバイト配列を持ったコンテナオブジェクトを作成してフリータスクを登録するプールを作ってそこにリストで必要な分コンテナを確保、
new演算子とdelete演算子からプールに戻したり確保したり、みたいなことをやっておりました。


placement new、またひとつ勉強になりました。