ゲームプログラミング相談室
■ このスレッドは過去ログ倉庫に格納されています
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/
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それは貴女の心です。
0446名前は開発中のものです。
02/05/12 09:53ID:VspODHGoc++buliderとWindows付属のツール(ペイントなど)だけでゲームの製作は可能ですか?
0447名前は開発中のものです。
02/05/12 09:55ID:???可能
0448439
02/05/12 09:59ID:???必要なのはIncludeFileだけで、
SDKの中のライブラリは使わなくていいんですか?
0449名前は開発中のものです。
02/05/12 09:59ID:VspODHGo0450名前は開発中のものです。
02/05/12 12:56ID:???それつかってゲーム作ってる人います?
0451名前は開発中のものです。
02/05/12 15:13ID:???0452名前は開発中のものです。
02/05/12 15:25ID:W8mXt2BA0453名前は開発中のものです。
02/05/12 16:56ID:???0454名前は開発中のものです。
02/05/12 17:40ID:???0455名前は開発中のものです。
02/05/12 17:56ID:???0457448
02/05/13 22:44ID:???IMPDEF ddraw.def c:\windows\system\ddraw.dll
でモジュール定義ファイル作って、
IMPLIB ddraw.lib ddraw.def c:\windows\system\ddraw.dll
で作ったファイルをリンクしたら動いた。
けど、このファイルがDirextX7で動くか心配だ・・・
0458440
02/05/14 01:21ID:QkMxU4bATHX!
ま、正直なところ、DirectXであれこれやるならVC++を使うことをお薦めするが・・・。
0459名前は開発中のものです。
02/05/14 06:42ID:???それでいいと思うよ。
0460名前は開発中のものです。
02/05/14 08:45ID:???だったらVC++とかDelphiのライブラリ内で作っちゃった方がいい。
0461名前は開発中のものです。
02/05/14 14:24ID:???そりゃそうだ。
マインスイーパ作るのにDirectXはいらないな。
適材適所。
0462名前は開発中のものです。
02/05/14 21:31ID:gp9yAFEg0463名前は開発中のものです。
02/05/18 20:47ID:OvBslwUs0464名前は開発中のものです。
02/05/19 11:39ID:l8bBGy5I映画で懲りたかと思えばコレか、
おまえらゲームプログラマの質なんてたかが知れてる。
次はどんな手で笑わせてくれるんだ?
サーバが重くてつながらないのにチョコボ大陸横断レースでもするのか?(藁
0465名前は開発中のものです。
02/05/19 11:41ID:???0466名前は開発中のものです。
02/05/19 14:58ID:???0467名前は開発中のものです。
02/05/19 15:25ID:???0468名前は開発中のものです。
02/05/19 16:38ID:5QVs0KEUすいません、STGを作るの初めてなんで疑似タスクで質問させてください。
疑似タスクの仕組みとしては LogicianLoad を参考にさせてもらっています。
----------------
Q: 1フレームの中でタスクの優先順位を何回も変更する場合ってありますか?
優先順位を変更するならば、タスクをリストに登録する際どうやってその位置を見つけますか?
リストの先頭からざーっとなめてるんですか?
----------------
とりあえず、私としては以下のようにしてるんですが、よくないところとかあったら教えてください。
----------------
固定長ワークの配列を作る。要素数 256個とか。
タスクは、ワークへのポインタを持つ。
いくつものタスクがおなじワークへの参照をすることがあるので、ワークには参照カウンタを持たせる。
タスクのリストへの登録は map<優先度, list<タスク *> > な優先度マップを用意して、
優先度マップ[優先度].push_back(&タスク);
としてリストに登録。タスクの優先度変化とか、チェンジタスクとかは同じワークを参照するタスクを
つくって対応。状況に応じて自殺。
----------------
0469名前は開発中のものです。
02/05/19 18:12ID:???適切なソートアルゴリズムを選択すれば良い。
この場合、バケットソートが丁度良いかもしれない。
バケットソートについてはgoogleで検索して下さい。
0470hosoku
02/05/19 18:16ID:???要素を追加する位置をサーチする場合、そのコストはゼロ。
0471hosoku
02/05/19 18:18ID:???各優先順位の先頭(or最後尾)ノードへの参照テーブルを用意する。
0472hosoku
02/05/19 18:25ID:???外人相手には100%通じないので、その辺も気を付けて。
0473468
02/05/19 20:33ID:???なるほどです。やってみます。
0474名前は開発中のものです。
02/05/20 03:37ID:???1 移動
2 衝突判定
3 オブジェクトの生存チェック
4 描画
こういう風に順番を分ければ、処理順が重要になる事って
あまりない気がするんですが・・・
0475名前は開発中のものです。
02/05/20 06:46ID:???外人相手だと何と言えばいい?
0476名前は開発中のものです。
02/05/21 01:09ID:0jVRIemAその1〜4の順番分けをすることが、まさに処理の優先順位をつけることだと思うのだが・・・。
もちろん、メインループ内でそれぞれの処理を行う関数を順に呼ぶようにしても作ることは
できるんだけど、その辺をフレキシブルに変更できるようにするための仕掛けがタスクな
わけじゃん。
0477名前は開発中のものです。
02/05/21 01:15ID:???優先順位と言えば優先順位みたいなモノだけど、
474で書いたように呼ばれる順番を保証しないと、
(好き勝手な優先順位で好き勝手に死んだり生まれたり)
安全と最適化を両立しづらくないですか?
0478名前は開発中のものです。
02/05/21 01:43ID:???チーム内で決めるのがふつうなんじゃないの?
0479名前は開発中のものです。
02/05/21 14:08ID:lOTv7vN.できる様になったのですが、ここではたと詰まってしまいました。
あるアニメーションセットから、別のアニメーションセットに移る時
一般にどのような補間がなされているのでしょうか?
とりあえず自分でも色々試したのですが、一瞬で移行すると場合によっては
不自然だし、現在の位置から移行先の最初のフレーム位置まで
適当に補間をかけてみたら、なんとも奇妙な動きになってしまう始末で(- -;
……まさか、同じ座るという動作でも、移行前のものにあわせて
何パターンもアニメーションを作るのでしょうか((((; ゚Д゚)))
なんとも手詰まりで…アドバイスいただければ幸いであります。
0480名前は開発中のものです。
02/05/21 15:05ID:???つなぎの姿勢をかませるとか、
そこら辺はノウハウの問題なんじゃないかと思うんですけど
状態遷移図みたいなのを書いて検討してみるしか。
0481480
02/05/21 15:06ID:???しか。→とか。
0482名前は開発中のものです。
02/05/21 15:58ID:???0483名前は開発中のものです。
02/05/21 16:02ID:???モーションB start<------+------------------->end
^0.0 ^1.0
この0.0〜1.0の区間を補完すればいいんでない?
0484名前は開発中のものです。
02/05/21 16:04ID:???0485479
02/05/21 17:14ID:???…勘違いして、ずっと別のスレを監視してました(;´Д`)
>>480
なるほど!後のパターンを増やすのではなく、つなぎを噛ませるのですか。
うー、しかし同じアニメーションからの遷移でも、どのコマから移るかによって
いろいろ考えなきゃなのかな…。しかし完璧を求めるなら、これをやるべきですよね。
>>482
線形補間でやると、組み合わせによっては突拍子もないのがでちゃうんです。。
たぶん私のモーションの作り方が悪いんですが…でもこれが手軽で良いですよね。
>>483-484
ややや、つまり移行時間を決め、その間のAとBを合成しつつ、
だんだんとAの影響を弱め、Bの方を顕在化させるわけですね!
むはー、プログラム的にも解決できるなんて(*´Д`)
皆様のレスに基づき、それぞれのアニメーションにあった方法をあてて
いきたいと思います。一人じゃ絶対思いつかない事ばかりで…本当に大感謝です〜。
0486名前は開発中のものです。
02/05/22 01:58ID:emKWkvCgその他、キーワードは Catmull-Rom スプラインかな。
あとは自分で調べてくれ。
0487名前は開発中のものです。
02/05/22 16:22ID:wmr.hUOIいいホームページ知りませんか?
ちなみにVISUALBASICで作ろうとおもいます
048899
02/05/22 16:35ID:???〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/
------------------------------------------------
0489名前は開発中のものです。
02/05/22 17:15ID:DJLFFQIk普通キャンセルだろ。
0490名前は開発中のものです。
02/05/22 17:46ID:???DOA3
0491名前は開発中のものです。
02/05/22 19:15ID:???今時キャンセルなんてやってるのは時代遅れのメーカーぐらい。
0492名前は開発中のものです。
02/05/22 23:37ID:???0493名前は開発中のものです。
02/05/23 14:44ID:???0494名前は開発中のものです。
02/05/23 16:55ID:???0495名前は開発中のものです。
02/05/23 18:38ID:???mouchottoatamatukaouze
0496名前は開発中のものです。
02/05/23 20:02ID:???不自然になっちゃうなら補完式を考え直すべき
0497sage
02/05/23 22:57ID:FUqKSSOQ補間もキャンセルとごまかすための手法の一種にすぎないのだが。
だから、どちらが優れているなどないと思われ。
case by case。
一つのことに凝り固まるのは、頭悪いぜ。
0498名前は開発中のものです。
02/05/23 22:58ID:???俺が頭悪かったようです。
逝ってきます。
0499名前は開発中のものです。
02/05/23 23:06ID:???0500名前は開発中のものです。
02/05/24 00:29ID:???あんまり、本当の事を言うと話が止まるので
わかっていてもしらんぷりしとけよ(ワラ
0501名前は開発中のものです。
02/05/24 01:21ID:???通路ばかりのダンジョンをランダムで生成したいのですが、
唯一見つかったアルゴリズムでは綺麗なダンジョンが作れませんでした。
トンネルを掘るようにしてダンジョンを作るアルゴリズムを使うと
綺麗なダンジョンが作れる、と読んだのですが、参考になる
情報などがありましたら教えていただけないでしょうか?
よろしくお願いします。
0502名前は開発中のものです。
02/05/24 01:54ID:???このページ見た?なんか凄そうだけど。
色々なパターンが紹介されているみたいだし。
0503416(HSP) ◆HoSW/FCI
02/05/24 03:53ID:btbuBamk0が通路で1が壁だとすると、まず、n×mの広さを1で全部埋めます。一番外側だけ0にすると範囲チェックしなくて済むから楽かも。
で、親座標と子座標を用意して、親は左上から右下まで2ステップずつ捜査させます。子は親からランダムに4方向を選んで移動するわけですが、これも2ステップずつ移動させます。子の移動先が壁だったら掘って、またランダムに移動。
移動予定先が全部通路で選択肢が無い場合は、子の移動は終了して、親を1つ進めます。
そしてまたその親座標から子を移動させて動けなくなるまで掘っていく。これを最後まで繰り返すと解が1つだけの迷路ができます。
同様の方法で2つの接しない壁を作っていくという方法もありますが、上記のほうがシンプルかも。
0504416(HSP) ◆HoSW/FCI
02/05/24 04:06ID:???すでに掘った場所には移動しない、という判定自体は同じです。この場合の分岐方法は、掘り進んでいく過程で分岐点を複数置いていく(記憶していく)ことになります。
記憶しないで矩形の範囲単位で掘れるだけ掘るという方法もありますが、洞窟っぽくはならないでしょう。また、掘っていく過程で矩形の大きさを変えれば、より自然の洞窟に近い迷路ができます。
0505名前は開発中のものです。
02/05/24 06:13ID:???アルゴリズムを作れそうにはないけど
パズル的に楽しませていただきました。
>>503
そのアルゴリズムをベースに作ってみようかと思います。
ありがとうございました。
0506名前は開発中のものです。
02/05/24 06:23ID:???いくつか作っておいて、つながるように並べるのもあり
0507やさしい
02/05/27 01:43ID:???プログラマを募集してます
われこそはと思うつわものは覗いてください
http://ex.2ch.net/test/read.cgi/shar/1022428219/
0508名前は開発中のものです。
02/05/27 22:56ID:???0509名前は開発中のものです。
02/06/25 01:31ID:???0510オhル艦長
02/06/25 14:18ID:J1CGzihY0511名前は開発中のものです。
02/07/24 12:32ID:???敵の番になったら、自分のいるマスにむかって1歩(1マス)近づく、
という感じにしたいのですが、ちょっとなやんでいます。
敵のキャラと自分のキャラの座標を比較して、
敵のx座標が自分のx座標より大きければ1マス分増やす、
y座標が自分のy座標より小さければ1マス分減らす、というかんじです。
ifやSelect Case の入れ子でやってみたんですが、
行がながーくなってしまって、
どうもこれでは上手いやり方ではないような気がします。
もっと効率の良い考え方がありましたら教えていただければと思います。
説明がへたですみません。。
0512511
02/07/24 12:49ID:Ml.IF7uc0513名前は開発中のものです。
02/07/24 12:54ID:???どうして長くなったのかわかんないけど、行がなが〜くなったらそれぞれの処理を分割するしかないのでは?
ifの条件文が長い場合はあらかじめ比較するモノを変数に入れておくとか。
if〜endifはつかってるよね?
手法としては、移動する処理自体を1つの関数にしておいて後から高速化するのが望ましいかも。
とりあえず遅くてもゲーム自体はできるから。
0514名前は開発中のものです。
02/07/24 12:56ID:???>敵のx座標が自分のx座標より大きければ1マス分増やす、
>y座標が自分のy座標より小さければ1マス分減らす、というかんじです。
敵のx座標が自分のx座標より小さい場合や
y座標が自分のy座標より大きい場合は考えなくていいのか
俺ならとりあえず移動処理をブラックボックスにしてほっとく
あとからいくらでも高速化できる(かもしれない)からな。
0515名前は開発中のものです。
02/07/24 13:08ID:???このスレどうよ
http://game.2ch.net/test/read.cgi/gamedev/1024902432/l50
0516511
02/07/24 13:22ID:Ml.IF7uc>ifの条件文が長い場合はあらかじめ比較するモノを変数に入れておくとか。
んと、とりあえずこんな感じにしてみたんです。
select case Npc.x(敵のx座標)
case is > Player.x(自分のx座標)
if Npc.Y < player.Y then
Npc.X = Npc.X - 32(32はひとますぶんです)
Npc.Y = Npc.Y + 32
endif
...こんなかんじで、敵のいる位置のパターンが8こ(斜め4個に上下左右)
もあるんで、どんどん入れ子じょうたいになってしまって。。。
>移動する処理自体を1つの関数にしておいて後から高速化するのが望ましいかも。
ふむふむ。上記の移動の処理をMoveNpc というPublic Subにしているんですが、
そのなかに自作の関数をいれるということでしょうか?
>敵のx座標が自分のx座標より小さい場合や
y座標が自分のy座標より大きい場合は考えなくていいのか
そうなんです!パターンのぶんだけif −endif 文がふえてしまって
ながくなっちゃってるんですよね。これをもっとどうにかして
みじかくならないかなあと。。。
>俺ならとりあえず移動処理をブラックボックスにしてほっとく
ふむふむ、さきにほかのところを完成させちゃえー、ということですね。
たしかに、、、ほかにも考えなきゃいけないとこがいっぱいあるんで
そっちもがんばりたいとおもいます。
0517511
02/07/24 14:00ID:Ml.IF7ucぱにくってた頭が少しすっきりしたみたいです。
移動処理のとこの致命的なミスを発見し、うまくなおせました!
(行の長さは相変わらずながくなっちゃいましたが)
今は敵が死んだときの処理をがんばってます。
0518名前は開発中のものです。
02/07/24 17:42ID:???> そうなんです!パターンのぶんだけif −endif 文がふえてしまって
if 敵のx座標 < 自分のx座標 then 敵のx座標を増やす
if 敵のx座標 > 自分のx座標 then 敵のx座標を減らす
if 敵のy座標 < 自分のy座標 then 敵のy座標を増やす
if 敵のy座標 > 自分のy座標 then 敵のy座標を減らす
コレだけで済むと思うんだが。
ちなみに、
> Npc.X = Npc.X - 32(32はひとますぶんです)
今の状態では右へ1キャラ分移動するのに32を加えていると思うけど、
これはそういう風にするんじゃなくて、将棋の「マス」みたいに管理すべき。
そしてグラフィックを表示するときにx座標とy座標を32倍すればいい。
0519511
02/07/24 19:40ID:Ml.IF7uc>>518
>今の状態では右へ1キャラ分移動するのに32を加えていると思うけど、
>これはそういう風にするんじゃなくて、将棋の「マス」みたいに管理すべき。
>そしてグラフィックを表示するときにx座標とy座標を32倍すればいい。
おお!ということは、移動処理のほうでNpc.X = Npc.X+1にして、線画処理で
BitBlt FrmMain.PicMain.hDC, Npc.X * 32, Npc.Y * 32, 32, 32, FrmMain.PicChara.hDC, 0, 32, vbSrcPaint
てなかんじでいいのでしょうか?
この方がのちのち管理もしやすそうですね。
今までは1個1個のマス目の番号を割り出すときに
intBlockNo = (8 * (Chara.Y / 32)) + (Chara.X / 32)
ってやってたんですが、この方法ならいちいち32で割らずにすむので
かなりすっきりできますね!!!
これからさっそくかきなおします。
0520名前は開発中のものです。
02/07/25 01:52ID:???absとsgn関数をうまく使え
if abs(敵のx座標-自分のx座標) < 1 then 敵のx座標にsgn(敵のx座標-自分のx座標)を加える
Y座標についても同じ
0521511
02/07/25 02:23ID:VlAcWhO2>>520
>absとsgn関数をうまく使え
今 abs関数とsgn 関数調べてきました!
絶対値、、、中学のときに習ったような、、自分の不勉強さに身がちぢこまります。
理解できてないままソースにコピペではあまりにも恥ずかしいので
いまから紙にかいて考えてみます。
あれれ?と思うようなとこはたくさん有りますが
ゲームのおおまかなソースが書きあがったので、
明日は他の部分ももっと効率的な書きかたができないか考えてみます。
0522名前は開発中のものです。
02/07/25 12:19ID:???お前は効率的な書き方をマスターしたいのかゲームを完成させたいのかどちらだ?と
小一時間(以下略
慣れないうちはきっちり動くものを作り上げてから速度&効率のチューニングをやれYO!
とマジレスもしてみるテスト
■ このスレッドは過去ログ倉庫に格納されています