ゲームプログラミング相談室
■ このスレッドは過去ログ倉庫に格納されています
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/
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!
とマジレスもしてみるテスト
0523チューニングなんて後から
02/07/25 12:51ID:???↓
ちょっと効率のいいアルゴリズム発見
↓
それにあわせて書き直す
↓
さらに効率のいいアルゴリズム発見
↓
それにあわせて書き直す
↓
さらに効率のいいアルゴリズム発見
↓
:
:
0524511
02/07/25 21:22ID:???>>522
>お前は効率的な書き方をマスターしたいのかゲームを完成させたいのかどちらだ?
ゲーム完成させたいです!
>慣れないうちはきっちり動くものを作り上げてから速度&効率のチューニングをやれYO!
そうですね、まだ直さなきゃ行けないとこがいぱーいあるのに
綺麗なソースをかきたいなんて100年早かったです。。反省。。。
>>523
うう、完成しないままループしてしまいますね。。。。。
きっちりさいごまで仕上げることに専念します。
今日は移動用の選択カーソルの不具合をなおします。
0525名前は開発中のものです。
02/07/25 22:06ID:???報告ならここにしろ
■自主製作ゲーム:開発状況報告スレ■
http://game.2ch.net/test/read.cgi/gamedev/1005143186/l50
0526西村トオル、ナイスですね〜
02/07/26 20:35ID:???カメラアングルは、女優(対象)を後ろから捉えています。
そこで質問なんですが、
イベント中とかにゲームの動きを止めて
カメラだけを動かして女優(対象)を舐め回すように撮影したいんですが、
(取り合えず、女優を中心に球を想定して、常に女優の方を捉えつつ
その球面上をカメラが移動って方向で)
何か良いカメラの動きのアルゴリズムとか知りませんか?
やはり、監督自身(自分で)動く軌跡(座標)を切ってやらないといけませんかね?
0527名前は開発中のものです。
02/07/26 22:27ID:???ベジェ曲線みたいにすりゃいいんじゃない?
0528名前は開発中のものです。
02/07/28 03:47ID:???検証もせずに、他人のコード採用してたら、それこそあぼーんだよ。
解決案が必要なのに、エゴに凝り固まって、他人のソース見ることも出来ないのは、もっと重傷だけどね。
まあ、ゲームに関して言えば、コーディング技術云々より、ゲーム全体としてのデザインの方が重要だから、
そんな小さなことにこだわるな、というのが正解かもね。
0529名前は開発中のものです。
02/08/15 17:23ID:???んなこたーない
0530名前は開発中のものです。
02/09/15 11:53ID:???基底クラスを書いて、音や絵やその他のデータなんかも
まとめて管理してるんでしょうか?
0531名前は開発中のものです。
02/09/15 19:09ID:???PCの話で良い?
データのI/Oはインタフェースに肉付けしてく形で作ってる。
具象クラス側で生ファイル、圧縮ファイル、ネットワーク、リソース、
各I/O方法にあわせる事が出来るし、プロトタイプ作ってる途中は
生ファイルI/Oだけあればよいし。
0533名前は開発中のものです。
02/09/19 05:00ID:N2qPvY6Q今は、各々のキャラクタのクラスがサーフェスやアニメーションの情報も持っていて、
なんとなく不細工な感じがするので、見た目の情報を切り分ける事にしたんですが、
それを一元管理するクラスの設計が出来ません。
今動いてる物をいじるんだから、それなりに便利にしようと思い、
確保したサーフェスやアニメーションの情報や、今表示中のスプライトの情報を、
管理クラスの寿命と共に廃棄できるようにしようとしたり、
サーフェスやアニメーションの情報を削除しても、それをまだ使用してるスプライトがあったら、
そのスプライトが削除される時までは、保持されるような物を作ろうとしました。
けれど、実装してもうまくいかないし、
整理しようと紙に書いていても、頭が混乱してきました。
みなさんは、こんな場合にはどう設計されていましたか?
0534533
02/09/19 05:03ID:???すみません。
0535名前は開発中のものです。
02/09/19 05:10ID:???0536名前は開発中のものです。
02/09/19 05:14ID:???◆オブジェクトクラス
スプライトへのポインタ(場合によってはテーブル)
各種パラメータ
_______
◆スプライトクラス
対象サーフェスへのポインタ
サーフェス上のRECT
現在位置
アニメーションありの場合RECTのテーブル
_______
◆サーフェースクラス
サーフェス実体
スプライトからの参照カウント
という風に階層分けをしてうまく作った。
0537536
02/09/19 05:18ID:???スプライトクラスを
◆スプライトクラス
現在位置
スプライト定義クラスへのポインタ
表示しているRECTのindex
◆スプライト定義クラス
対象サーフェスへのポインタ
RECTのテーブル
と分ける。
0538名前は開発中のものです。
02/09/19 05:18ID:???私がやったときは、各キャラのデータを保持するクラスを作って
それとは別に「キャラのデータを元に画面を組み立てる」関数を作った。
ハードコーディングでキャラの外見を決める場当たり的な方法だけど、
小規模なら混乱を最小限に防げてプラクティカルだよ。
0539名前は開発中のものです。
02/09/19 05:35ID:???シーン構築時に必要な物をすべて読み込んで、
終了時にまとめて削除する方が速いしスマートじゃね?
0540533
02/09/19 05:42ID:???早朝からありがとうございます。
リファレンスカウンタは、調べていてる時に見つけて
>>536 さんのような感じにしていたんですが、
管理するクラスと、それに管理されるクラスとの関係を
上手くまとめられませんでした。
ゲーム開始前の時点で、管理クラスにサーフェスやアニメーションなんかの
描画に関係する物を登録して、終わった時には、使っていたほうは意識せずに、
管理クラスが、自動的に廃棄してくれるようにしようとしたんですが、
>>533 で書いたように、混乱して終わりました。
ここらへんの管理クラス回りの設計を質問したかったんですが、
文章が長い上に要点がボケてました。すみません。
0541533
02/09/19 06:08ID:???>>537
そうやって定義を分けておくと、同じ種類のキャラクタのスプライトで使いまわせますね。
参考になりました。
>>538
>「キャラのデータを元に画面を組み立てる」関数
が私が最初にとっていた方法だと思います。
その場合のキャラのデータとは、見た目やゲーム内での状態を一つにまとめて
表してる物の事ですよね?
違ってたら、すみません。
>>539
> シーン構築時に必要な物をすべて読み込んで、
> 終了時にまとめて削除する方が速いしスマートじゃね?
そうしたかったんですが、このへんが、よくわからなかったところなんです。
必要な物を管理するクラスの設計を、触りだけでも解説していただけませんか?
0542名前は開発中のものです。
02/09/19 12:33ID:???読み込み失敗時のエラー処理が繁雑になるから、ゲーム開始時点で
まとめて読んでしまった方が良いかも。データ量にも依るけど。
0543名前は開発中のものです。
02/09/19 15:44ID:0CTGoUX30544名前は開発中のものです。
02/09/19 15:57ID:???トランスフォームやライティングやテクスチャやブレンディングなどの頂点処理機能のこと。
プログラマブル頂点シェーダは、いままで処理系(Direct3Dなど)の
固定機能のみであったのに対して、これらの機能をプログラムできるってやつ。
0545名前は開発中のものです。
02/09/19 16:04ID:39QNxA7D0547名前は開発中のものです。
02/09/20 02:00ID:???イイ!
0548名前は開発中のものです。
02/09/20 04:38ID:???0549名前は開発中のものです。
02/09/22 18:44ID:lBYio+jt普通の人間に近い画角を設定すると、至近距離での物の見え方が
おかしいように感じます。
0550名前は開発中のものです。
02/09/22 19:54ID:???今のところ現実的な解決方法が見つかってないと思う。
至近距離のものは、目には歪んで見えているのに真っ直ぐのものを
真っ直ぐと認識できる。これは脳みそが補正しているからです。
至近のものをなんとかして正しくゆがめて表示すると、
それはそれで不自然に感じるはず。
なぜなら、脳が補正しないから。
0551名前は開発中のものです。
02/09/22 19:57ID:???最大の問題は、目からディスプレイまでの距離が離れているから、
自然な映像は目からディスプレイよりも近い映像を表示し得ない
のです。
ヘッドマウント式のディスプレイであれば、
正しくゆがめるとちゃんと認識できると思う。
0552名前は開発中のものです。
02/09/22 22:18ID:???HMDは焦点距離を1mくらいに設定してるので、
結局うまく認識できないと思う。
0553名前は開発中のものです。
02/09/22 22:28ID:???0554名前は開発中のものです。
02/09/22 22:52ID:???グラデーションはbit数を上げれば解決するけど。
0555名前は開発中のものです。
02/09/23 00:45ID:ThYVC2el本は絶版みたいだし、お願いします
0556名前は開発中のものです。
02/09/23 01:03ID:v6pFfVCjやめとけ。検索すればすぐでると思うが、情報がいい加減でひどい
フォーマットってうわさだ。何に使うん?
0557名前は開発中のものです。
02/09/23 01:11ID:???3D拡張もあるらしいが
0558名前は開発中のものです。
02/09/23 01:13ID:v6pFfVCj0559名前は開発中のものです。
02/09/23 01:53ID:???ありがとうございます。
3Dを扱う一般的なフォーマットは知っておかんといかんかな、と思いまして
0561名前は開発中のものです。
02/09/23 06:14ID:FUH7SiPADirectX8はWizardもついてだいぶよくなったみたいだけど
構造体がいっぱい残ってるのがうっとしいです。
やれることが限定されても、そのへんクラスで結構隠してくれてるのが
あればいいんですが。
0562名前は開発中のものです。
02/09/23 07:28ID:???0563名前は開発中のものです。
02/09/23 07:39ID:???http://www3.justnet.ne.jp/~botchy/el.htm
0564名前は開発中のものです。
02/09/23 07:57ID:???オイオイ
> いいの
ダヨ
0565名前は開発中のものです。
02/09/23 08:13ID:???洗練されているという良い物ではないけど。
0566名前は開発中のものです。
02/09/23 08:14ID:FUH7SiPAありがとうございます。
ELLibちょっとヘッダ眺めてみました(眺めただけ)。
ほかにもあれば、情報収集しときたいのでお願いします。
0567名前は開発中のものです。
02/09/23 08:34ID:???やねうらおの奴使っておけ。
まー、完璧ではないかも知れないが普通に使う分には問題ない。
NxDrawが生きてたらそれが良いと思うんだけどね。
あとはゆきいるかの所かなぁ
リンクは面倒なのでぐぐってくれ。
ゲーム用のフレームワークが本格的なゲームエンジンを指す場合、
高い金払ってUTのエンジン使えるように契約したりしてくれ。
0568名前は開発中のものです。
02/09/23 08:49ID:FUH7SiPAふんふん、なかなか本格的ですね。
これはどうもありがとうございます。YTLには笑った。
趣味で使うつもりなので。
UTって何でしょう。
0569名前は開発中のものです。
02/09/23 09:41ID:???この辺を嫁ばいい。
http://udn.epicgames.com/
0570名前は開発中のものです。
02/09/23 10:35ID:???ありがとうございます。
ちょっと見ただけでは良く分かりませんでしたが
今度暇なときに見てみます。
0571名前は開発中のものです。
02/09/23 14:39ID:???あれじゃあ、片手落ちじゃない?
0572名前は開発中のものです。
02/09/23 15:12ID:???その前に君は日本語を使いなさい。
「あれ」は何の指示代名詞なんだい。
0574名前は開発中のものです。
02/09/23 15:29ID:???571
<#`Д´>パ、パカニスルナ
0575名前は開発中のものです。
02/09/23 16:30ID:???厨に変なツッコミいれられるから
0576名前は開発中のものです。
02/09/23 16:52ID:???575=厨
0577名前は開発中のものです。
02/09/23 16:58ID:???とりあえず誰か>>571の解説を頼む。
正直、俺には読解不能。
0578名前は開発中のものです。
02/09/24 23:47ID:???やねうライブラリでは、2D しか対応してないって事では?
0579名前は開発中のものです。
02/09/25 00:30ID:???0580578
02/09/25 02:18ID:???今時の PC でゲーム作るって言ったら、
3D に対応してるライブラリのほうが、作るのが簡単で良いんじゃない?
無理に 2D に落として仕様を考えるよりも、素直にアイデアを出せるし、
三世代くらい前のカードでも、充分速かったと思うよ。
0581名前は開発中のものです。
02/09/25 02:31ID:???ん?
3Dの世界を構築するエンジンじゃなくて、
3Dハードを使うって事か?
0582名前は開発中のものです。
02/09/25 08:22ID:???0583名前は開発中のものです。
02/09/25 08:52ID:???0584名前は開発中のものです。
02/09/25 17:49ID:???権威を失うから駄目なんだよ。←2Dなら深い質問も大丈夫です、かかってきなさい
という意味と思われ
0585名前は開発中のものです。
02/09/25 20:08ID:???また可能ならどういった方法がありますか?
テキストとバイナリを交互に書き込んでみたのですがテキストが化けました
Delphi、Windowsです
0586名前は開発中のものです。
02/09/25 20:14ID:???テキストをバイナリとして扱えばいいんでねーの?
0587名前は開発中のものです。
02/09/25 20:39ID:???なるほど、その手がありましたか!!
ありがとうございました
0588名前は開発中のものです。
02/09/25 21:07ID:???0589名前は開発中のものです。
02/09/25 21:23ID:???>>585を再度質問させていただきます
よろしこ
0590名前は開発中のものです。
02/09/25 21:37ID:???漢文を訳すより難解なり
0591名前は開発中のものです。
02/09/25 21:40ID:???ヘッダだけテキストにしてそれ以降をバイナリ
もしくは全部テキストにしたければバイナリをbase64にでも変換すれば?
0592名前は開発中のものです。
02/09/25 21:54ID:???>ヘッダだけテキストにしてそれ以降をバイナリ
Delphiでどうすればできるのか教えて欲しいです
Cではできますた
0593名前は開発中のものです。
02/09/25 22:14ID:???同じようにしる!!
その手の作業に関しては、
DelphiでできてCでできないのはわかる(VCL使っているとか)が、
CでできてDelphiでできないというのはよくわからない。
0594名前は開発中のものです。
02/09/25 22:16ID:???こたえられるかもしれんよ。
0595名前は開発中のものです。
02/09/25 23:00ID:???テキストバイナリ混成データ送ろうとして
四苦八苦した思い出があるなぁ
けど、もうどうやったのか忘れた(藁
0596名前は開発中のものです。
02/09/25 23:38ID:???0597名前は開発中のものです。
02/09/25 23:41ID:???Personalでやったから苦労したんだよ!
ちなみにパケット越しじゃなくて
パケットに詰めて、だな
0598名前は開発中のものです。
02/09/25 23:57ID:???シリアライズとデシリアライズのコードを対になるように書けばそれで
終わりっしょ?DelphiもCも関係ないと思うんだが・・・
0599名前は開発中のものです。
02/09/26 01:34ID:???アホですか?
そのシリアライズがうまくいかないって話なんだけど?
てか思い出したけど
サーバC++/クライアントDelphiでやってて
コネクションまで確認できたのに結局データのやりとりはうまくいかなくて
クライアントもC++で組み直したんだった
もちろんDirectPlay使ってたとかいうオチじゃなくてWinSockでやってた
0600名前は開発中のものです。
02/09/26 01:36ID:???非PersonalだとコンパイラやIDEが勝手にプログラマの無知を補間してくれるんですか?
0601名前は開発中のものです。
02/09/26 06:31ID:???ゲームアプリ開発に及ぼすってことなのかね。
あまり考えられないよな。
・・・・DB関連のことなのか。
0602名前は開発中のものです。
02/09/26 06:32ID:???○ 影響を及ぼす
■ このスレッドは過去ログ倉庫に格納されています