トップページgamedev
1001コメント384KB

シューティングゲーム製作技術総合 2機目

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。04/01/10 21:07ID:hzI9eQA5
ゲームプログラマなら誰もが通る、もしくは、通った道。青春の香り?
それは「シューティングゲーム製作」・・・。

このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談
失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。
もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを
晒してみたり、プロジェクトをはじめてみるなどもOK!

ただし、シューティングの未来とか既存のゲームの話題などは、関連する他の
スレでやってくれ。

■ 前スレ

シューティングゲーム製作技術総合
http://bbs.gamdev.org/test/read.cgi/gamedev/1056635103/
0359名前は開発中のものです。04/02/09 01:03ID:OX8rMmrZ
1日でスレすすんでてびびった

うちのは >>340風。
case文だらけが嫌になって、stateパターンを導入するも、
溢れ返った状態を記述しきれず泥沼化。
リファクタリングしようと、共通部分を is-a、 has-aでくくりだして、
フラットな状態遷移マシーンから、複雑な階層化状態マシーンに。
把握しきれずに、頭おかしくなりそうになった。

古典的タスクも考慮して組んで見たい今日この頃です。

>>354
Delphi使いはC++も読めると、世界が広がりますよ
考えようによっては、(C++ + Delphi)分の情報が得られるわけで
0360名前は開発中のものです。04/02/09 01:11ID:OX8rMmrZ
>>358
すれ違いになっちゃうけど

Delphiだとこうかな?
type
 TWorkerMethod = procedure of object; // クラスの procedure Method(); の形のメソッドポインタ型

 TTask = class
  FWorker: TWorker;
  FWork: TWorkerMethod;
  :

クラスのメソッドへのポインタは、"of object"をつけてね
0361delphian04/02/09 07:26ID:tFE9u6fe
>>360

ありがとうございます!
これで、できそうです!

>>350

追加で質問です。お願いします。
ちなみに、>>341の方法で実装したとして、
各クラスごとにタスクにあたる各メソッドを書くので、
リストへの登録・チェンジができるのは、登録したm_workerとそのクラス内のメソッドのみになるってことですよね?

あ、m_workerの登録を変えれば、他のクラスのメソッドにもチェンジできるのかな??
でも、それだと、変数が保持されないか…。

各クラスで共通で使うタスク(メソッド)があるときは、各クラスごとにメソッドをかかないといけないわけですよね?
0362名前は開発中のものです。04/02/09 12:06ID:9b1YXsM8
登録クラスとは別クラスのメソッドを呼ぶ必要はありません。
クラスのメソッドは所属するクラスに密接に関わる関数だから。
もし別クラスのメソッドを呼ぶような必要がでてきたのならば、
それはそのクラスにあるべきメソッドではないということです。

それから各クラスで共通に使うメソッドがあるならば、それは基底クラスで定義します。
タスクにメソッドを登録するときは基底クラスのメソッドを登録すれば問題ありません。

余談ですが341の方法は基底クラスの仮想関数を登録すると派生クラスの仮想関数が呼ばれます。
ややこしいので↓を見て実行すると分かりやすいかも。こちらもソースコードがややこしいことになってます…
http://www.emit.jp/prog/prog_cpp0.html
0363Delphian04/02/09 12:48ID:ayzrG5Mj
ということは、>>341の方法では、共通のタスクは使えないということですか?

共通の関数を仮想関数として基底クラスに書いたとして、タスクリストに登録ししても、
実際、呼ばれるのは派生クラスの仮想関数ということですか?

つまり、派生クラスの仮想関数を登録するのとかわらない、ってことですか?

共通のタスクを使うにはどうすればいいんでしょうか?

質問だらけですみません(>_<)
0364名前は開発中のものです。04/02/09 12:52ID:9b1YXsM8
基本中の基本だけど、基底クラスで仮想関数を定義しても
派生クラスでオーバーライドしなければ基底クラスの関数が呼ばれるよ。
というか初めから基底クラスで仮想関数として定義しなければ
派生クラスでオーバーロードしても派生クラスの関数は呼ばれないよ。
0365Delphian04/02/09 13:57ID:ayzrG5Mj
ぁ、そうですよね。

オブジェクト指向を勉強しはじめて、一ヵ月ならないもので(>_<)

ちょっと混乱してしまいました。
仮想関数をオーバーロードすると派生クラスの関数が呼ばれて、
仮想関数として定義しないと、基底クラスの関数が呼ばれるんでしたよね。
0366名前は開発中のものです。04/02/09 14:50ID:CGO83cRk
どうでもいいけどオーバーロードとオーバーライドは別物だよ
googleで双方の単語入れて検索してみればすぐわかる
0367Delphian04/02/09 15:48ID:ayzrG5Mj
ぁ、すみません、間違えました。

全然違いますね。

とりあえず、帰ったら今日まで覚えた知識でクラス版タスクシステムをつくってみようと思います。
0368名前は開発中のものです。04/02/09 18:17ID:3mvRD+VM
どうでもいいんだけどさ、ドット絵で透明感(背景が透けて見える等)を出すことは出来るの?
0369名前は開発中のものです。04/02/09 18:25ID:OX8rMmrZ
>>365
Delphiなら virtualなメソッドを、派生クラスでoverrideつけないで再定義すると、
警告出るからすぐにわかるよ

>>368
半透明つかえないのが前提だよね?
VSYNC同期前提でよければ、抜き色で市松模様にして交互に表示する
もしくは、単純に表示/非表示を繰り返す
同期取らなくてもそれっぽく見えるけど、ちらついてしょうがない
0370名前は開発中のものです。04/02/09 19:15ID:gpj6YV2G
表示/非表示は楽な割に高い効果があるね

場合によっては、赤 青 非表示 のように
補色と非表示を組み合わせて
輝きのある半透明感を出すのもいい。やりすぎるとドギツイだけになるので注意

市松模様もそのうちやってみてえなあ
0371名前は開発中のものです。04/02/09 19:27ID:G+LxwaHn
点滅は処理落ちに弱い。
素直にアルファ使おうよ
0372Delphian04/02/09 19:31ID:8wpz1hab
type
TWorker = class
end;

type TWork = procedure of object;

//タスククラス
type
TTask = class
protected
FStat: TStat; //タスクステータス
FPrio: Word; //処理優先度
FDelay: Cardinal; //待機フレーム数
FPrev: TTask; //前タスクへのポインタ
FNext: TTask; //次タスクへのポインタ

FKill: Boolean; //キルタスクフラグ
FChng: Boolean; //チェンジコールフラグ

FWorker: TWorker;
FWork: TWork;
FAttr: Word; //タスク属性(ユーザーが自由に使用できる)

public
constructor Create(Worker: TWorker; Work: TWork);
destructor Destroy; override;
procedure Execute;
end;
0373Delphian04/02/09 19:34ID:8wpz1hab
>>341 >>372

こんな感じになったんですがどうでしょうか?
タスククラスにワーカークラスを登録する場合、
あらかじめ生成したワーカークラスを引数として渡して登録したほうがいいのか、
それとも引数にクラス型を渡して、タスククラス生成の中でワーカークラスを生成したほうがいいのか、
どうしたらよいでしょうか?

次から次にわからないことが…
0374Delphian04/02/09 19:53ID:8wpz1hab
class Task {
 Worker* m_worker;
 Work m_work;
public:
 void execute() { m_worker->(*m_work)(); }
};

の部分は

class Task {
 Worker* m_worker;
 Work m_work;
public:
 void execute() { m_worker->(*m_work)(Task); }
};

にした方がいいですかね?
じゃないと、処理メソッドの中で自殺等できませんよね?
でも、処理メソッドの中でdelete Taskとかされたらこまりますよね…
0375名前は開発中のものです。04/02/09 20:45ID:9b1YXsM8
>>374
その必要はないよ。
ちなみに俺も数年前はソレと同じやり方でやってたんだけどね

タスクを登録するときタスクリストでTaskのインスタンスを作るんだけど
そのインスタンスのポインタを登録関数の戻り値としてやって、
それを各ワーカーが保持しておけば何時でも参照できるよ
0376Delphian04/02/09 20:52ID:8wpz1hab
>>375

実装の段階になると、壁にぶちあたりまくって、
タスクはやめようかと思ってきました(>_<)

登録関数がインスタンスのポインタを返すとしても、
登録したタスク(クラス)の外部では保持できても、タスクの内部では保持できませんよね?
0377名前は開発中のものです。04/02/09 21:00ID:9b1YXsM8
各ワーカーの初期化関数中からタスクリストに登録すれば問題ありませんよ。
0378Delphian04/02/09 21:12ID:8wpz1hab
>>377

つまり、ワーカークラス(を継承した各クラス)のコンストラクタでタスクリストに登録するということですか?
で、ワーカークラスを生成すると、自動的に自らをタスクリストに登録するような構造にするということですか?

なんか、そういう手間を考えると、やはりクラスとリストを使ったほうがいいのかなぁ…
汎用性はなくなりますけどね…

クラスを使ったタスクシステムや、>>329 >>341のような方法の載った
サイトや本がありましたら、教えてください。
C++でもかまいませんので…
0379名前は開発中のものです。04/02/09 21:33ID:9b1YXsM8
大体そういうことです。回りくどいですがこれには色々と理由があるんで…。
タスクシステムを辞めた理由の中にはそういうのもあります。

具体的に実装方法が載っている本のことは知らないけど、
私はABA Gamesさんとこのゲームのソースコードがいいかなと思います。
shot.cなんか読んだら、なんだ、こんな簡単なことなのか、と思うんじゃないかな。
ゲーム自体も名作なので一押し。
0380名前は開発中のものです。04/02/09 21:34ID:9b1YXsM8
ごめん、プログラムの名前書くの忘れてた。noiz2saです。
http://www.asahi-net.or.jp/~cs8k-cyu/windows/noiz2sa.html
0381名前は開発中のものです。04/02/09 21:40ID:r7Ky+9tE
ってCじゃん
>181がC++でやってたみたいだが、消えてるし
0382名前は開発中のものです。04/02/10 00:11ID:Qv9eDjn5
俺の実装方法は、タスクを処理の基本パターンとして、
親タスクから小タスクへどんどんタスクを生成して、階層上に回す。
状態はStateパターンの亜種で実装。破壊とかね。
管理は親タスクで、その管理はその親タスクで。
こんな感じの実装だったな。
利点はタスクによる処理の一貫性が得られる点と、
どの階層からでもタスクを再構築できる点。
オブジェクト指向とは相反する。
当然最良の方法でもない。
0383名前は開発中のものです。04/02/10 05:03ID:QjDGv5K4
画面にNOW LOADINGとかの画像なりを表示させつつ
その間にデータを読み込むというのはどうやったらできますか?

使っている言語はC言語です よろしくおねがいします
0384名前は開発中のものです。04/02/10 05:31ID:ZekKaigm
必死で考えて考えて考えたやつ→作れる
すぐ諦めて訊くやつ→無理

383、内容が薄すぎる。
自分で考えたんならもうちょっと建設的な質問ができるはずだぞ
0385名前は開発中のものです。04/02/10 08:03ID:rQrFL9Ao
画面にNOW LOADINGとかの画像なりを表示させつつ
その間にデータを読み込めば良い
0386名前は開発中のものです。04/02/10 08:07ID:lQiCBpHN
自機を動かしながら、敵を動かすのと同じやり方でいいでしょ
それともマルチスッドレにしたいのかな?
0387名前は開発中のものです。04/02/10 09:04ID:XIpFljSz
マルチ的手法とか、リアルタイム的手法とかいろいろ考えられるね。
NOW LOADING処理表示中に、細切れにしたデータを逐次読み込むか、データ
読み込み中にNOW LOADING処理を逐次呼び出すとか。

後者が楽だと思うけど、俺は画面処理を軸にしたいから前者の方が好きかな。
0388名前は開発中のものです。04/02/10 09:08ID:qDkTjytk
>>383
CreateFile 非同期 で検索汁
0389Delphian04/02/10 12:58ID:X/1Dxz8Q
>>379

ぁ、ワーカークラスのコンストラクタでタスクリストに登録すると、
継承したクラスごとに優先度とか変えられないですね。

そういういろいろややこしくなることを考えると、
やっぱりゲームごとにクラス作っていこうと思います。

みなさん、ありがとうございます!
0390Delphian04/02/10 17:06ID:X/1Dxz8Q
ぁ、コンストラクタに引数もたせれば、いいんですよね(;^_^A

実際、タスク使ってつくる人より、
普通にクラスを使ってつくる人のほうが多いんですかね?

C++でいいのでゲームプログラミングでおすすめの本があったら、
教えてもらえるとありがたいです。

できれば中高度くらいで…
3Dものは作る予定ありません。
0391名前は開発中のものです。04/02/10 22:49ID:jnigZ/TI
ああん、コンストラクタとかタスクとかクラスとか何話してんだか全然わかんないポ
0392名前は開発中のものです。04/02/10 23:12ID:hqZnD59D
動けば問題ないよ、面白ければ問題ないよ
0393名前は開発中のものです。04/02/10 23:13ID:TgKzx3qf
>>391
まずプログラムの基礎を勉強するべきかと。

この辺の本とか、
http://www.amazon.co.jp/exec/obidos/ASIN/479800314X/ref=sr_aps_b_/249-6758129-5407516
http://www.amazon.co.jp/exec/obidos/ASIN/4798006033/ref=pd_bxgy_text_2/249-6758129-5407516
C++の便利な使い方も書いてあるので読め。
0394名前は開発中のものです。04/02/10 23:30ID:8DmWCK/o
コンストラクタもタスクもクラスもわからなくても
古典的手法でガレッガや怒蜂は十分作れるYO

本が合う人は本でやってみるのもいいと思う。
もしそれでできなくても挫けるな。
どんな泥臭い方法でも、まずは動いて遊べるゲームを一つ完成させることだ。

一つもできないうちからウダウダやってると限りある人生ムダにすることになるぜ
0395名前は開発中のものです。04/02/11 00:54ID:ffzykx9O
まず、泥臭い方法で作る。
で、もっと良い方法ないかなと模索する。
結果、タスクなりオブジェクト指向なりに行くと。
タスクに関してアセンブラと少ないメモリで少しでも
すっきりした形で作ろうした結晶のひとつ。
いきなり理解しようとするのが間違っている。
オブジェクト指向しかり。
0396名前は開発中のものです。04/02/11 01:03ID:HavUqnN1
自分で問題に直面してみないと分からないことは多いからね
0397名前は開発中のものです。04/02/11 13:33ID:WVAdP0V+
Cとタスクの一本槍人生。
WS→GBAと渡り歩いたら必然的にこうなったような。

しかしC++を覚えにくくなるという諸刃の剣。
結城浩尊師が御本を執筆なさる日を待っているとかいないとか。
0398名前は開発中のものです。04/02/11 14:20ID:FwrI7GbY
int x[MAX];
int y[MAX];
int kind[MAX];
for (int i = 0; i < MAX; i++) { ... }

こういうBASIC時代の身も蓋もない実装を、アセンブラやCで正常進化させていけば、
勝手に古典的タスクに行き着きますな。
俺も含めて、すべてのオヤジゲームプログラマが辿った道でしょう。
んでもってC++覚えたらゲームオブジェクトやらエンティティやらシーングラフやら
OO的アプローチで取り組んでみると。

歴史をそのまま辿ってるので、今どきのわきゃーモンにとって効率のいい道かは……
まあ、若いんだし、回り道してみてもいいんじゃない?と思うけどね(w
0399Delphian04/02/11 16:05ID:3Fwk/VlR
>>398

とりあえず、ここでアドバイスをいただいて、
オブジェクト指向でのゲームプログラミングについて、
わかってきました。

同じキャラクタが簡単に複製できるのでよいですね!

もう一歩レベルアップしたいのですが、
それは、あたり判定、、、(?)です。

シューティングというか、アクション要素の強いものにするつもりなんですが、
どういう方法をとればいいのかわかりません。


0400Delphian04/02/11 16:06ID:3Fwk/VlR
画面は斜め上からの見下ろしタイプ(?)で、
移動とか描画のイメージとしてはボンバーマンをイメージしてもらえると、
わかりやすいかと思います。

たとえば、1キャラ32×32のサイズだとして、
1キャラ単位の移動の場合には、
(右に移動するときは、8ドットずつ描画。
 1キャラサイズ分移動するまでは操作できない)
キャラの座標を元に、スプライトを優先度順に描画して、
当たり判定も座標位置から処理することができますよね?
(この場合、当たり判定というより、座標からのチェックですね。)

これをドット単位の移動にしたい場合、
どうすればよいのでしょうか?
0401Delphian04/02/11 16:14ID:3Fwk/VlR
ドット単位の移動の場合には、
通常でいう当たり判定を実装すればいいのでしょうか?

たとえば、32×32サイズのキャラの場合、
足元(キャラの下半分=32×16)にのみ当たり判定をもたせて、
敵・障害物にも当たり判定を持たせて、
その当たり判定によって移動の制限・敵との接触を判断するような形でよいですか?
0402名前は開発中のものです。04/02/11 18:32ID:gYQdJ6t0
ある程度やり方が想像ついているのなら、聞く前にまず組んで見ろ。
それで、何か問題があれば聞きに来るようにしてみては。
0403Delphian04/02/11 18:54ID:3Fwk/VlR
>>402

すみません(>_<)
すでにやってみてわからなかったので、質問しました。
>>401の方法でたしかに移動はうまくいくんです。
しかし、描画がうまくいかないんです。

たとえば、障害物があって、
その下に自キャラがいる場合は、
障害物にかぶって自キャラが手前に描画されます。

しかし、障害物の後ろにいる場合でも、
障害物にかぶって自キャラが描画されてしまいます。

この場合、どのように描画していけばいいのかわからないんです。

障害物を2つのスプライトに分ける、以外に何か方法はありますか?
それとも、障害物を優先度の違う2つのスプライトにわけるしかないんでしょうか?

それによってはだいぶかき直しがでてきてしまうので、
なにかよい方法があればと思って聞きました(>_<)
0404名前は開発中のものです。04/02/11 19:00ID:mUyP1muW
具体的にどう組んでるか判らないが、一番単純な方法は
自分も含めて奥から順番に並べていく。
0405Delphian04/02/11 19:13ID:3Fwk/VlR
>>404

できました!!
ありがとうございます!!

原因は、自キャラの描画優先度が常に最優先の順位になっていたためでした。
0406名前は開発中のものです。04/02/11 19:23ID:HavUqnN1
うーむ…。
何故タスクを使っているのかということを知らずに、タスクを使っていたのではどうしようもないよ。
タスクを使うなら使うなりにその利点とかをちゃんと理解して使わないと。
0407名前は開発中のものです。04/02/12 00:17ID:JIe2B+wy
>>397
あーわたしも同じような感じだ。
いい加減Winに移行しようと思っているけど
どこから手を付けたものか。
0408名前は開発中のものです。04/02/12 00:54ID:9O1aGBUy
そういや全員がパソコン用シュー組んでるわけじゃないんだな
0409名前は開発中のものです。04/02/12 01:00ID:WI+q7xKn
>>407
今俺はLUNAってライブラリ(DX9版)使ってどうにかこうにかスプライトドライバらしきものは作ったってとこ。
楽することしか考えてないし。
1つのテクスチャからしか画像引っ張って来れないクソだけど。

ま、先達の足跡をなぞらせてもらうってのがいいんじゃないかと。
0410名前は開発中のものです。04/02/12 04:04ID:s4ARHeDC
D3DXSpriteを使おうと思っているのだけど、半透明や加算合成はサポートされていますか?

理想としては、DirectDrawみたいにサーフェスから矩形転送で半透明や加算合成がハードウェアで
サポートされている機能があればいいんだけど。
そんなやつ知りませんか?
0411名前は開発中のものです。04/02/12 04:10ID:s4ARHeDC
↑のは、DirectDrawみたいに手軽な矩形転送(BLT命令)の方法で半透明や加算合成がハードウェアでサポート
されている便利な機能は無いのかなってことです。
0412名前は開発中のものです。04/02/12 04:51ID:x2br8nu/
DrawPrimitive使ってスプライト描画ライブラリ作ればいいじゃん。
ゲーム作るよりは簡単だと思うが。
0413名前は開発中のものです。04/02/12 05:21ID:N/rg5owY
D3DXSpriteの話題なら、スレ1_53あたりから出てるようだね
あとはdxスレが参考になるのかな
俺は直接directx触ったことないので間違ってるかも知れないが
0414名前は開発中のものです。04/02/12 10:08ID:w674jgk+
あんまOOに拘らん方がいいと思うが
0415名前は開発中のものです。04/02/12 13:12ID:mg39+6ki
まぁ、目的はそれぞれ。
完成することが目的じゃなく、オブジェクト指向を楽しむためのシューティングプログラムであっても結構。
0416名前は開発中のものです。04/02/12 16:03ID:p/bDU+ZR
質問した本人の迷いが晴れて少しでも進歩してくれるなら、それでよい
が…迷わせてるだけの回答もあるようだ
まあ2ちゃんねるだから回答の質など低くてあたりまえなんだけどな
0417名前は開発中のものです。04/02/12 20:38ID:JIe2B+wy
>>709
Lunaは導入を検討中…まあ楽にというのは同意。
別にシステムを作りたいってわけじゃないからね。
0418delphian04/02/12 21:16ID:CeQLH9bx
>>401

だめでした!!
せっかく書き直したのに…(;_;)
この方法には問題点がありました…。


障害物、自キャラ共に足元(下半分程度)だけにあたり判定を設けています。
これで自キャラが障害物の手前にいるときは、障害物に少しかぶる程度になります。
障害物の後ろにいるときは、後ろに少し隠れるようになりました。

しかし、、、マップをつくった時に判明しました…
障害物が縦に二つ並んだときはだめでした!!
画面上では障害物がつながって並んでるのに、
自キャラがすりぬけてしまいました…。

横から障害物にぶつかると、あたり判定の隙間をすりぬけてしまうんです…
障害物のあたり判定が小さいとかですかね?
それともやり方自体が間違ってるとかでしょうか…

せっかくうまくいったと思ったのに、かなり悩んでいます…
斜め見下ろしタイプにするんじゃなかった(;_;)
0419名前は開発中のものです。04/02/12 22:19ID:64+QEQjj
表示だけ斜め見下ろしにすれば良いのでは。
判定自体は平面で十分かと。
てかシューティングゲームなのか?w
0420名前は開発中のものです。04/02/12 22:37ID:cAtxPdMd
自キャラと地形の当たり判定が問題ですよね。
自キャラの当たり判定を見た目より大きくして
壁のキャラ同士の隙間を通れないくらいにしたら。

自キャラと敵などの当たり判定は普通の大きさでするとして。
0421名前は開発中のものです。04/02/12 22:38ID:wLwHm65y
あたり判定を地形用と敵キャラ用で2種類作ればいいんじゃないだろうか。
0422delphian04/02/12 22:43ID:CeQLH9bx
>>419

表示と判定ってきりはなすいい方法ってありますか?
障害物の前に表示させたり、後ろに表示させたりするのに、
平面にしちゃうと障害物の後ろに隠れるように表示できない気がするのですが…

ちなみに移動はアクションっぽい感じで、
敵の出現とか攻撃方法がシューティングっぽい感じです。
アクションシューティング!?みたいな感じを予定してます。
0423delphian04/02/12 22:48ID:CeQLH9bx
>>420
>>421

2種類ですか、なるほど。
でも、判定が2種類だと重たくなりそうな気がしますが平気でしょうか?
0424名前は開発中のものです。04/02/12 22:54ID:wLwHm65y
2種のあたり判定は、確かに処理は重くなるけど
かなりの数比較しないと目に見えて重くならないハズ。

作画順序が問題なら、作画前にソートしてはどうか。
0425delphian04/02/12 23:35ID:CeQLH9bx
>>424

ありがとうございます!
とりあえずやってみます!
つまり、
自キャラ→敵キャラ
自弾→敵キャラ
敵弾→自キャラ
自キャラ→地形

と4回当たり判定すればいいんですよね!?
うーん、重くなんないかなぁ…。
とりあえずやってみます(>_<)
0426名前は開発中のものです。04/02/12 23:46ID:64+QEQjj
>>422
これは一般的に広く使われている方法だと思うけど、当り
判定用の仮想マップを作る。

プロック単位なら1ブロック1バイトとかで十分。
ブロックのサイズで割り算すれば仮想マップでの位置は
簡単に求められるよね。

表示に関して言えば見る方向が限られているわけだから
位置で優先順位が決まるはずだよ。
0427delphian04/02/13 00:10ID:L2MM37WS
>>426

ただ、自キャラの移動がドット単位なので…
ずれて障害物にぶつかったときは、判定がおかしくなっちゃいますよね?
0428名前は開発中のものです。04/02/13 00:32ID:72fuhvhV
>>427
ドット単位でも殆んどの場合仮想マップで十分だよ。
1点だけで当り判定しなければいいだけの話。

移動前に移動するはずの位置(オフセットさせて)での当り
判定を取ればめり込むことも無い。

例えば上に移動したいなら上の辺の2点でどちらかが当る
かどうかを調べてどう移動するかを決めると。
0429delphian04/02/13 00:39ID:L2MM37WS
>>428

障害物や自キャラすべてのキャラが32×32のサイズだとすると、

  自キャラの位置÷32が仮想マップでの位置

とかそういう感じですか?
0430名前は開発中のものです。04/02/13 00:48ID:XbqqmpNF
へえ、こんなところがあったんだね。
もっと何て言うか、プログラム的なテクニック以外の話題かと思ってたんだけど
タスクとかオブジェクトとか、みんないっぱい勉強してるんだなぁ。
そういう専門用語なんて全然わかんないよ。
CとかDelphiとかも、全然わかんないよ。

でもちゃんとシューティング作れたよ。
こういう人間もいるから、みんなくじけず頑張れ。
0431名前は開発中のものです。04/02/13 00:50ID:v58S7DuN
>>430
貴重な人材ようこそ
実際にシューティング作れた人の経験談ってのは、何より大事だよ
0432名前は開発中のものです。04/02/13 00:54ID:72fuhvhV
>>429
そうそう。
で、自キャラの当り判定用に4つの点が移動すると
考えてみればわかるかな?
043343004/02/13 01:34ID:XbqqmpNF
>>431
どうも、話の腰を折っちゃったみたいで申し訳ない。

今Windowsの2作目をやってるけど、大バグ出しちゃって大変だよ。
敵を動かすメインの部分を再設計するはめになったよ。
技術的なことより、モチベーションの維持が大変かもしれない。
2ちゃん見てる暇あったらさっさと直せって言われそうだけど・・・
ユーザー様販売店様ごめんなさい。
0434名前は開発中のものです。04/02/13 01:50ID:v58S7DuN
モチベーションの維持はなかなか大変だよね。最近読んだ記事では
ttp://www.radiumsoftware.com/0402.html#040205
このあたりが俺もそんな経験あるなあって感じだった
0435名前は開発中のものです。04/02/13 06:56ID:/YwtefBv
1日8時間エンジン全開にできれば制作サクサク進むだろうになあ。
0436名前は開発中のものです。04/02/13 08:09ID:5j3rqqRT
やる気を高揚させるためにゲーセンに逝く。
0437名前は開発中のものです。04/02/13 08:23ID:KOGPA4TU
むしろシューティングが殆ど無くてショボーンとする罠
0438名前は開発中のものです。04/02/13 09:24ID:KkLY0EpL
>>434
俺もそこみてて共感した
自分含めて周りにもいるので。。。
0439名前は開発中のものです。04/02/13 16:53ID:1Fo+YVFx
G-わんげ鳩大往生XII〜絆ダウン〜 4stage
http://game4.2ch.net/test/read.cgi/arc/1069685469/
0440名前は開発中のものです。04/02/13 21:26ID:XbqqmpNF
>>434
なるほど、目から鱗が落ちるとは正にこの事。
だから今日も頑張るよ。
ついでに新しい敵動作も追加するよ。
0441名前は開発中のものです。04/02/13 22:33ID:guX4f2wb
学校の卒業研究で3Dシューティングを作ってるのですが、ここって製作物の晒しOKですか?
0442名前は開発中のものです。04/02/13 22:35ID:EmYVUBZc
おkでう
0443名前は開発中のものです。04/02/13 22:43ID:f3pxBEWu
>>1
0444名前は開発中のものです。04/02/13 23:09ID:En2k9c8k
>>439
自分たちで責任もってやりなさい。
0445名前は開発中のものです。04/02/14 00:06ID:cgI0TFan
卒業研究でシューティングって何気に凄いな
物理屋?
044644104/02/14 00:11ID:c3gggQ2G
ただの専門学校です(´Д`;
今確認してみたらメモリリークしてた個所があったので
晒すのはもう少しかかります・・・

>>443
すみません。
0447名前は開発中のものです。04/02/14 01:12ID:C5FrO4Iv
>>446
期待してる。
ソース月だったら神
044844104/02/14 02:14ID:c3gggQ2G
おそらくまだ問題を色々内包してたり、
システムやグラフィックにまだ未完成な部分も多いですが、いったん晒し。
ttp://gamdev.org/up/img/237.zip
Zキーでショット、Xキーでボム、カーソルキーで移動して、ESCで終了です。
タイトル画面ではZキーを押してスタートしてください。

>>447
すみません。今はスパゲティ状態になっているので、
どれだけ先になるかわかりませんがソースを整理できたら晒させて頂きます。
0449名前は開発中のものです。04/02/14 02:25ID:Gjymcyaj
キタ━━━━━━(゚∀゚)━━━━━━!!!!
0450名前は開発中のものです。04/02/14 02:29ID:Gjymcyaj
せ、先生!!
ゲームが物凄いスピードで進みます!!
なんか処理をCPUとか描画依存とかにしちゃってるのかな?

P4 2.4GC
RADEON9800Pro
VRAM128M RAM1G3100
WinXPPro

045144104/02/14 02:33ID:c3gggQ2G
あ、しちゃってます。
というよりもFPSを一定に保つ処理入れ忘れてました。
フルスクリーン状態ならなんとかなりませんか?
0452名前は開発中のものです。04/02/14 02:36ID:8/CSSAPL
うちもウィンドウモードだとマッハで動くな。
AthlonXP2200+
RADEON9500pro
PC2100/1GByte
WinXPpro
0453名前は開発中のものです。04/02/14 03:22ID:4XzIoYrv
GetTickCountでウエイト入れればいいだけっしょ。
045444104/02/14 03:26ID:c3gggQ2G
ttp://gamdev.org/up/img/237.zip
ファイル名同じですが中のバイナリ変えました。
秒間約60FPS固定になっているはずです。
が、リフレッシュレートとの兼ね合いで
描画がカクカクするようになった・・・
0455名前は開発中のものです。04/02/14 04:05ID:8Y8IyI5m
必要なところがしっかり押さえてあっていい感じだね。この調子でガンガレ
0456名前は開発中のものです。04/02/14 05:46ID:wsFOcZ87
殺伐としたスレに救世主が!



      ヽ)∵)ノ
      (  (  くねくねマン
       )  )
0457名前は開発中のものです。04/02/14 20:31ID:8/CSSAPL
>>454
OK.
問題ナス。

441氏はトリップつけたら?
0458名前は開発中のものです。04/02/14 21:53ID:IUYsHKXe
特にシステム上とかで突っ込むポイントは無いけど、難しい(´Д⊂)
あと武器LVの上がるシステムの仕組みが良く分からないです
ボタン押しっぱなしだとLV2の状態でもLV1が出るとか?
■ このスレッドは過去ログ倉庫に格納されています