ゲームプログラミング相談室
■ このスレッドは過去ログ倉庫に格納されています
0001プチ9627m
01/11/06 18:47ID:G6Fk/ND/駄スレ立てる前にココで聞きましょう。
■旧スレ(プログラミング技術板より)
○パート1
http://piza.2ch.net/tech/kako/969/969984472.html
○パート2
http://pc.2ch.net/test/read.cgi/tech/985540361
○パート3
http://pc.2ch.net/test/read.cgi/tech/1002894129/
0346≠342
02/02/02 16:53ID:???>Flipのタイミングが合わなくて残像が残る
よくわからん。 描画と敵の動きが別のスレッドなの?
適当にリンク
www.hh.iij4u.or.jp/~peto/Games/games_top.html
見当違いだったらすまん。
0347名前は開発中のものです。
02/02/02 17:14ID:???>>345
Zに移動だったら、まず変数を1個増やす(例:Stat)
右に移動(Stat==0)→適当なところでStat++
→左下に移動(Stat==1)→適当なところでStat++
→右に移動(Stat==2)→適当なところで殺す
以上、バータリー的に行け
0349名前は開発中のものです。
02/02/03 02:06ID:???0350名前は開発中のものです。
02/02/03 03:45ID:WfOFv5LQ英語サイトのどっかでゲーム用デザインパターンをまとめてあった
サイトがあったと思うのですがどこかわかる方いませんでしょうか?
ブックマークがなくなったので…。
0351名前は開発中のものです。
02/02/03 06:22ID:???0352名前は開発中のものです。
02/02/03 09:52ID:???0353名前は開発中のものです。
02/02/03 11:14ID:???ここ?
0354妄想野郎
02/02/03 21:48ID:???0355209 ◆jUZhK5lw
02/02/05 14:01ID:???敵を動かすのはどうしたらよいのでしょうか?
簡単な2DSTGでお願い致します。
0356名前は開発中のものです。
02/02/05 14:19ID:???>>256 のリンク先のソースは読んだか?
0357209 ◆jUZhK5lw
02/02/05 15:02ID:???タスクとかスプライトとか。
0358名前は開発中のものです。
02/02/05 15:49ID:???スプライト云々は DirectX Graphics のヘルプ読め、タスクなんかは tsk.cpp, h/tsk.h
に実装があるだろ。
0359名前は開発中のものです。
02/02/05 19:25ID:???つーかマルチポストしてんじゃねぇよカスが
0360209 ◆2sDz/Rq6
02/02/06 00:46ID:???0361名前は開発中のものです。
02/02/07 15:26ID:???を参考にしてC++でタスクを使っています。新しいタスクを作るときに
Cならば
TCB* t = task_make(pri,func)のようにすれば、
task_makeの実装によってあらかじめmallocしておいたヒープを渡せますが、
C++では
TCB_HOGE* t = new TCB_HOGE(パラメータ);
task->add(t)//TCB_HOGEは基本クラスTCB_BASEを継承しているので代入できる
のようになって毎回new を呼ぶことになってしまいます。
これを解決するにはどうすればいいでしょうか?
それとも気にするほどのことではないのでしょうか
0362名前は開発中のものです。
02/02/07 19:39ID:???あなたに指図される筋合いはありません。
何の権限があってそのような事を言うのですか?
0363名前は開発中のものです。
02/02/07 20:36ID:???1. placement new を使う
2. operator new を定義して、自前でメモリ管理をする
あと STL 使っている場合テンプレートパラメタで渡す allocator にも手を入れないと、
完全にはメモリを管理下にはおけない。ただ、そこまでやる意味があるかというと、
俺は無いと思う。
(仕事でメモリの制限が厳しいハードを対象にプログラミングしてる場合を除く)
0364名前は開発中のものです。
02/02/07 22:46ID:???そもそも C++ なら、タスク用の構造体を用意せずに
struct Task {
virtual void Update(unsgned tick) = 0;
};
とでもインターフェースを用意してやって、Task を継承したクラスを、自機/弾/敵機
など必要なだけ用意。あとはメインループの中で
using namespace boost;
using namespace std;
list<shared_ptr<Task> > taskList;
for_each(taskList.begin(), taskList.end(), bind(&Task::Update, _1, tick);
とループをまわせば終わりって気がする。
実際には
taskList への新規タスクの登録/削除のタイミングに関しては気をつける必要が
あるけど(特に for_each 使う場合には、ループの最中に削除すると iterator が不
正な値を指すことになる)
taskList への挿入削除時に動的なメモリ確保/開放処理が発生するので、メモ
リ不足が発生しては困る環境では allocator を自作するか、list の変わりになる
コンテナを自前で実装する。
タスクの新規作成/削除時に動的なメモリ確保/開放処理が入るので、ヒープの
断片化が気になる場合には Task::new, Task::delete を自前で用意する。
とか細かい注意点があるけど、そんなものでしょ。
0365名前は開発中のものです。
02/02/08 10:27ID:???0366361
02/02/08 13:50ID:???>>363
operator new はクラスごとに書かなくちゃいけないのかな?
とりあえず何回もnewされるクラスに使ってみて、パフォーマンス
を比べてから、効果が大きいようであれば他のクラスにも使ってみます。
>>364
うう、関数オブジェクトだとかそこら辺は勉強してないのであまりわからないです
もうしわけない。想像していた以上にSTL周りのことは重要になってきそうですね。
Effective STLでも読んでみることにします。
0367209 ◆jUZhK5lw
02/02/08 15:11ID:???0368名前は開発中のものです。
02/02/10 11:26ID:tpvVEAK8みんなアルゴリズムってどうやって勉強してるんでしょうか?
0369名前は開発中のものです。
02/02/10 12:05ID:???何か理由があるのでしょうか?
0370名前は開発中のものです。
02/02/10 13:39ID:???マルチタスクOSでの行儀がなってないとだめということだよね。
無限ループみたいな組み方すると
バックグラウンドのプロセスになかなか処理がいかなくなる。
そうするといろんな弊害が起きることが考えられる。
0371名前は開発中のものです。
02/02/10 14:24ID:???最初から他のアプリケーションと並行して動かすことを前提としないゲームなら、
それでも構わないと思うけどね。フルスクリーン表示なら全然問題ないでしょ。
ただ、ゲームをウィンドウモードで表示しながら Web で検索しようとか思うと、ちょっ
と嫌かも。
0372369
02/02/10 20:12ID:???ありがとうございます。
0373名前は開発中のものです。
02/02/10 23:16ID:???ソフトバンクの「遊びのレシピ」って本は
各種ゲームのアルゴリズムとデータ構造を解説してる。
基礎的で単純なものばかりだけど,行き詰まってる人にはいいかも。
勉強法だけど,私は他のゲームを見てアルゴリズムを想像してるだけ。
0374名前は開発中のものです。
02/02/11 10:28ID:???これがくせになってもう病気。。
GT3見ても何見てもだんだんフローチャートに頭の中になっていく…
0375名前は開発中のものです。
02/02/16 14:06ID:???ワシも同じページ見ながらC++でタスク作ったことがある。
そんときは363と全く同じやり方に行き着いたよ。
メモリ管理は手を抜いて固定サイズメモリ領域の配列に
したけど。
いちいち各クラスのoperatow newを用意する必要はなくて、
タスク基底クラスのoperator newだけ自前で用意して、継承
させてやればOKOK。
関数ポインタの扱いがC++だと厄介なので、TCBの内部では
statusだけ保持して、別途用意した関数ポインタテーブルを
引くようにした方が楽だと思う。
ttp://www.emit.jp/prog/prog_cpp0.html
この辺参照。
0376名前は開発中のものです。
02/02/17 10:19ID:???0377名前は開発中のものです。
02/02/17 20:54ID:???> 関数ポインタの扱いがC++だと厄介
直接メンバ関数へのポインタを使わずに、多態を使えば良い。細かいことは
コンパイラが面倒見てくれるぞ。
0378名前は開発中のものです。
02/02/18 02:33ID:???固定から切り出しのソースコードが乗っているホームページ有りましたらキボンヌ。
0379名前は開発中のものです。
02/02/18 03:50ID:???operator new() の使い方が分からんの、それとも static なブロックからデータを
切り出す方法がわからない?
C++ chunk operator new あたりで検索かけて見つけたページ
http://www.relisoft.com/book/tech/9new.html
0380名前は開発中のものです。
02/02/18 10:32ID:???0381名前は開発中のものです。
02/02/19 01:23ID:???placement new (operator new())に関しては、
More Effective C++ を読むのが良いかと。
固定から切り出しについては、確保した固定メモリ領域内の
アドレスを引っ張ってきてキャストするだけでいいんだが・・・
(もちろん管理は自前でやる必要があるけど)
で、任意サイズのメモリを切り出せるようにするとフラグメン
テーションやらガベコレやらめんどくさくなるんで、手を抜くな
ら切り出すメモリのサイズを固定にしちゃう、と。
その場合、オブジェクトのサイズが切り出し単位のサイズを
超えないようにすることだけ注意するべし。
0382名前は開発中のものです。
02/02/19 01:44ID:???基底クラスのexec()は仮想関数にしといて、各クラスの関数
ポインタはstaticに定義したメンバ関数ポインタテーブルから
引く、と。
0383名前は開発中のものです。
02/02/19 03:22ID:???イメージがつかめんので、も少し詳しい解説を希望。
俺は
struct Task {
// 引数はともかく
virtual void exec() = 0;
// 固定長ブロックから切り出す
static void* operator new(size_t);
static void operator delete(void *);
};
を基底クラスに持ってきて、派生クラスを
class TaskBackground : public Task
{
// メンバ変数いろいろ
public:
virtual void exec();
};
みたいに書くのが良いかと思ってたんだが、382 のアイデアは違ってるよね。
タスク連結用のデータは Task に突っ込んでも良いし、別にタスク管理クラスを
class TaskManager {
typedef std::list<boost::shared_ptr<ITask*> > TTasks;
typedef std::vector<TTaskList> TTasksList;
TTasksList m_TasksList;
public:
TaskHandle add(boost::shared_ptr<ITask*> spTask, unsigned uPrio);
void remove(const TaskHandle& hTask);
void exec() {
for (TTasksList::iterator i = m_TasksList.begin(); i != m_TaskList.end(); ++i)
for (TTasks::iterator j = i->begin(); j != i->end(); ++j)
j->exec();
}
};
って感じで作るのも良いかと考えてた。
0384382
02/02/19 23:29ID:???class Task {
public:
Task();
~Task();
virtual void exec() = 0;
static void* operator new(size_t);
static void operator delete(void *);
private:
int m_Status;
};
とやって、
class TaskBackground : public Task
{
public:
enum {
STAT_INIT,
STAT_APPEAR,
STAT_STAY,
STAT_DISAPPEAR,
};
virtual void exec(void) { (this->*apfnTable[m_Status])(void); }
private:
static void (TaskBackground::*apfnTable[])(void);
};
と言う感じ。STLの無い環境だったのでSTLは使ってませんでしたが、基本的には
同じ方式です(よね?)
0385384
02/02/19 23:33ID:???鬱。
すまそ。
0386名前は開発中のものです。
02/02/19 23:51ID:???なるほど。各タスクの「中」で状態遷移させるのに、メンバ関数ポインタを使おうと
いう話ですね。理解しました。
0387名前は開発中のものです。
02/02/20 11:45ID:???0388名前は開発中のものです。
02/02/20 18:02ID:???1. 本を読む
2. コードを読む
3. プログラミングする
いじょ。
0389名前は開発中のものです。
02/02/20 18:50ID:???作りたいものを作る
いじょ
0391名前は開発中のものです。
02/02/20 21:03ID:???じゃ、知らないことを書いてみれば?
0392名前は開発中のものです。
02/02/20 21:57ID:???プログラミングに王道はないんだよ…
0393名前は開発中のものです。
02/02/20 22:06ID:???この言葉かっこいいな・・・
0394名前は開発中のものです。
02/02/20 22:14ID:???プログラミングを「覚えよう」という発想が間違い。
プログラミングは「理解」するもんだよ。
まぁ、日本の学校教育が「覚える」主体で「理解」を
求めてないから、どうしようもないんだけどねぇ。
0395名前は開発中のものです。
02/02/21 01:07ID:???0396名前は開発中のものです。
02/02/21 02:02ID:???まずはプログラムを書く。作りたいものならなお良し。作らなければならないもの
なら更に良し。
んで、わからないことにぶち当たったら、自分で悩んで調べて何とかする。
それでもどうにもならなかったら、予め質問内容をきちんと調べて、自分がどこまで
わかっていてどこがわかっていないかを明確にした上で先達に聞く。
そして、書きながら、もしくは書いた後で、より良いコードにするためにはどうすれ
ばいいのかを悩んで調べて改善していく。その積み重ねしかないよ。
「どうすればいいですか?」という、聞かれた方がYesかNoで答えられないような
質問をした時点で負け。
0397名前は開発中のものです。
02/03/05 04:05ID:???0398名前は開発中のものです。
02/03/05 10:37ID:???4.自分のコードを直す
つーか、糞コードを糞なままにしてると、上達せん。
0399名前は開発中のものです。
02/03/05 20:05ID:???でも、ゲームをつくることを最優先にしないと、
コードばっかいじって永遠に完成しなかったりする罠。
つくっては壊し、つくっては壊し...
0400名前は開発中のものです。
02/03/06 01:47ID:???で、そのうちに
1 行き当たりばったりで作るのではなく、事前に設計する
ことを覚える、と。ちなみに、その先は
2 設計ができるようになると、楽しくてはまり、過剰設計の罠に陥る。
3 リファクタリングを身に付ける。
と続く。
0401名前は開発中のものです。
02/03/06 17:03ID:???ちなみに俺は無期限だと完成できないタイプ。
0402名前は開発中のものです。
02/03/07 09:55ID:???この段階に入ってからが本番。学ぶべき事が格段に増える。
・モジュールやデータ構造といった、設計関連の知識
・ソートやサーチなどの、アルゴリズムに関する知識
・パーティクルや画像合成など、エフェクトに関わる知識
・UIやツール作りなどの、人間工学に関わる知識
0403名前は開発中のものです。
02/03/10 15:29ID:???プログラムに限らず数学とか頑張って手順を説明してるのに
「とりあえず答えは何?」と聞かれるとすげー腹立つ…。
(しかもそういう説明する奴は嫌われる、と(ワラ))
>>402
俺は特にプログラム初心者のゲームに欠けてるのはモジュールだと思うんだよね。
アルゴリズムとかエフェクトに関する知識がいくらあっても、
ソースが膨大化して何がなんだかわからなくなってはいお疲れみたいな。
0404名前は開発中のものです。
02/03/10 17:25ID:???0405con tofu ◆iOTveYXw
02/03/10 21:40ID:???この辺り、すごく参考になりました。特に >>402 辺り。
皆さん、ありがd
ほかには
・プロセス/スレッドやメモリ等、OS寄りのことについて
もやっておくと、頭スッキリして楽になるように感じます。
0406名前は開発中のものです。
02/03/12 11:15ID:3GjIfP2m0407名前は開発中のものです。
02/03/12 11:20ID:???2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数:95432人 発行日:2002/02/12
どもども、ひろゆきですー。
こないだお伝えしました「佐々木さん」の件ですが、実を言いますと佐々木さんだけが悪いってわけじゃないんですー。佐々木さんはなにもいきなりドアを蹴って騒いだりしたわけじゃないんですー。
佐々木さんは最初は極めて紳士的に接してきたんですけど、おいらがドア越しに生意気な態度をしちゃったもんだから佐々木さんはキレちゃったんですー。。。
ご承知のとおり、おいらってばメルマガでは自分の都合のいいことを、都合のいいようにしか報告しませんが、本当はおいらにもたくさん非があるんですよー、、、えぇえぇ。。。
INSIや谷澤動物病院が裁判に持ち込んだのも、実はおいらの態度に問題があったんですよねー。。
おいらはこれまで2Ch被害者の襲撃から逃れるために、キックボクシングをやっていたなんて嘘を吐いてきましたが、本当はキックボクシングどころか卓球すらやったことないんですー。
おまけに両親とお姉ちゃんにはさんざん甘やかされて育ってきたので、いまいち礼儀というものを学べなかったようなんですー。うぅ、、、
もしなにかスポーツにでも打ち込んで、ちゃんとした両親に育てられてれば、こんな陰湿な人間にはならなかったと思うし、こんなに歯糞もたまらなかっただろうと思う今日この頃ですー。。。
ところでおいらって平安貴族みたいな顔してますかねー?
こないだ埼京線で女子高生の集団に「麻呂だー」「超キモイー」って言われちゃったんですけど。。。
んじゃ!
0408名前は開発中のものです。
02/03/14 19:41ID:???0409名前は開発中のものです。
02/03/29 13:45ID:???0410名前は開発中のものです。
02/04/13 11:43ID:???0411名前は開発中のものです。
02/04/13 11:56ID:???なんか、俺がいまそんな感じだ。。
興味が多方面に分散して、自分が手に負えなくなってきたよ。
これはこれで楽しいんだが(w
ミンナ、ソウナンダネ…
0412名前は開発中のものです。
02/05/07 23:19ID:R1rOQJWc0413名前は開発中のものです。
02/05/08 14:35ID:???どっちを先にインストールした方が良いとかってありますか?
OS は Win2K です。
0414名前は開発中のものです。
02/05/08 15:38ID:???DXは入れる必要ない
0416RE:
02/05/08 23:58ID:y5yWHAGQ良く似た
DanceDancerevolutionもどき
作りたいんですが
作る前に
どんな知識と技術が必要ですか?
0417名前は開発中のものです。
02/05/09 00:07ID:???法律の知識と裁判で戦う技術。
0419名前は開発中のものです。
02/05/09 00:55ID:???まず作り始めろ。
そのうちにどんなことが必要かわかってくるはずだ。
0421名前は開発中のものです。
02/05/09 07:50ID:???ちょっと笑った。
0422ゲー作初挑戦@ ◆ByBD3yHE
02/05/09 21:49ID:9rTAdl0c同人ゲーですが。
かと言って絵描きの自分では、プログラマーを集うしかなく、
絵描きのページで募集したところで集まらず。
落ち物ゲーム+(間のストーリー流れを)ADVで作りたいのですが、
何か良いスクリプトないでしょうか?
ある程度までは勉強する覚悟はもちろん有りです。(C言語など一切触ったことありませんが)
また、技術者を募る良い場所があれば指南していただきたいのですが…。
もちろん報酬はお礼程度ですが有りです。
0423名前は開発中のものです。
02/05/09 21:53ID:???メンボスレ
0424ゲー作初挑戦@ ◆ByBD3yHE
02/05/09 22:15ID:PutN4UaM0425名前は開発中のものです。
02/05/09 22:36ID:???おそらくこれだろ
☆メンボスレ☆(メンバーボシュースレッド)
http://game.2ch.net/test/read.cgi/gamedev/1005323011/
良いひとそうだし(スレ違いの質問してるが)、暇なら手伝いたいがのぉ。
とにかく同人作りは、相方選びが一番重要なりよ。…いやマジで(´・ω・`)
0426ゲー作初挑戦@ ◆ByBD3yHE
02/05/09 22:42ID:???思いっきりスレ違いですたな。
頑張ってオモロイ技術者をゲットして楽しく作ってきまつ。
0427名前は開発中のものです。
02/05/10 22:12ID:lw3De0y20428名前は開発中のものです。
02/05/11 01:00ID:???http://natto.2ch.net/test/read.cgi/2chbook/1020693668/
0429名前は開発中のものです。
02/05/11 13:22ID:???VBから使ってるんですが、
プライマリサーフェイスとバックサーフェイスの
フリップが上手くいきません。
っていうか、概念がいまいち分かりません。
バックサーフェイスに画像転送
↓
フリップ
↓
ループ
させているんですが、バックサーフェイスに画像を書き込めていない見たいなんです。
どなたか分かる方いませんか?
0430名前は開発中のものです。
02/05/11 17:31ID:npO7xgR2Windowモードでフリップしてないよね?
0431名前は開発中のものです。
02/05/11 20:40ID:???>バックサーフェイスに画像を書き込めていない
ならFlipとは別問題じゃない?
0432名前は開発中のものです。
02/05/11 21:24ID:???>>431さんの言うとおり、フリップとは一応関係ありませんでした。
クリッパーの設定がおかしかったみたいです。
クリッパーを外したらちゃんと書き込めました。
で、結局クリッパーの使い方は分からず終いでした。
ついでに、320,240のフルスクリーンです。
っていうか、クリッパーの使い方教えてください(;´Д`)人
検索してみましたが、ページが一箇所しか見つからず、
しかも、そこに書いてある通りにやっても上手くいきませんでした。
0433名前は開発中のものです。
02/05/11 22:04ID:???0434名前は開発中のものです。
02/05/11 22:06ID:???って?
DirectXの?
あるの?
0435名前は開発中のものです。
02/05/11 23:14ID:???0436名前は開発中のものです。
02/05/11 23:34ID:???探さないでください。
0437名前は開発中のものです。
02/05/12 00:21ID:???安心してください。
0439名前は開発中のものです。
02/05/12 01:13ID:???コンパイラ :Borland C++
SDK :DirextX 7,DirectX7a
症状 :プログラムを起動したら「このプログラムは不正な・・・」
MAINのエラーです。DDRAW.DLLなどのメッセージ。
プログラム :DirectDrawのオブジェクトを作る簡単なもの、
DirectDrawCreate,DirectDrawCreateEx共にエラー、戻り値も帰ってきてない模様
コンパイラに付いてきたライブラリ(DirctX3)なら動きました。
SDKのサンプルは動きました。
DirextX :DirextX8.0
0440名前は開発中のものです。
02/05/12 01:38ID:4YN9DEeoDirectXができません、って・・・(sigh
COFFとかOMFとかでgoogle検索しる!
0441439
02/05/12 01:41ID:???0442439
02/05/12 01:51ID:???0443439
02/05/12 01:59ID:???0444名前は開発中のものです。
02/05/12 04:15ID:???implib.exeでddraw.libを作り直してください。
0445名前は開発中のものです。
02/05/12 05:27ID:rvy9Ukfgそれは貴女の心です。
■ このスレッドは過去ログ倉庫に格納されています