ゲームプログラミング相談室
■ このスレッドは過去ログ倉庫に格納されています
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/
0702↑
02/10/09 23:55ID:???(ダンジョンマスターJavaは素晴らしかった)
公式サイトhttp://www.cs.pitt.edu/~alandale/dmjava/
ダンジョンマスターをやろう!http://home8.highway.ne.jp/galzo/game/danmasu.htm
0703名前は開発中のものです。
02/10/10 00:08ID:???確かに DirectDraw なら(ビデオメモリがある限りは)ビデオメモリ上に
サーフェイス作るから、BitBlt は速いやね。フレーム毎に全部書き直し
にしても、そこそこの fps が出せる。
0704名前は開発中のものです。
02/10/10 00:10ID:???0706名前は開発中のものです。
02/10/10 07:50ID:???今現在Javaでゲーム作ってる漏れが言うのも何だが、
起動とGUIは非常に遅いっす。色々工夫しないと話にならんです。
0707要ブックマーク
02/10/10 11:15ID:buBBvKiZhttp://www.realdigital.co.jp/densi2/progindex.html
>C言語・C++言語・WINDOWSプログラム・DirectX Draw・DirectX 3D・ソフトウェアライブラリー
>各言語の説明と、サンプルソース。
YaneuraoGameScript & SDK本体
http://www.sun-inet.or.jp/~yaneurao/links/ygs/
yaneuraoGameScript2000
http://isweb19.infoseek.co.jp/computer/yaneurao/ygs/
>初心者向けC言語によるゲーム制作指南
C言語初心者向けリンク集
http://www3.mahoroba.ne.jp/~seibi/gad_cgi/html/16_02.html
ヒューマンアカデミー
http://www.athuman.com/a/it/course.html
>3ヶ月コースなど
初心者向けゲーム制作講座"Delphi de GAME"TopPage
http://www.din.or.jp/~koudai/Delphi/Delphi.html
0708名前は開発中のものです。
02/10/10 12:07ID:???はぁ?DirectX8にスプライト関数(ラッパークラス)あるだろ?
非常に簡単に半透明使えるし、回転拡大縮小できるし、ポリゴンみたいなこと
できるし、いいんじゃないの?エフェクトはかけられないけど・・・。
DirectDrawより簡単ではるかに便利。2Dならこれを使えや
0709名前は開発中のものです。
02/10/10 12:11ID:???0710名前は開発中のものです。
02/10/10 12:28ID:???0711名前は開発中のものです。
02/10/10 13:02ID:???0712名前は開発中のものです。
02/10/10 13:45ID:???0713名前は開発中のものです。
02/10/10 16:22ID:???0714名前は開発中のものです。
02/10/10 16:37ID:???0715708
02/10/10 16:41ID:???なんか理由あるの?
drawPrimitiveUPと比較しても速度変わんないんだけど?
抜き色指定とかでDDS使わない分、楽でいいだろうに・・・。
0716708
02/10/10 16:42ID:???0717ひきプロ ◆8fhky/PGis
02/10/10 16:49ID:???ためしに作ってみたら毎フレーム全部描画しても
GDIの時より軽くなりますた。
>>708
そういえばアルファブレンドができなくて悩みました
8のヘルプも読んでみようと思います
0718名前は開発中のものです。
02/10/10 17:02ID:???ID3DXSpriteを使うと叩かれるのか。謎だな。
それはどこでの話だ。
0720名前は開発中のものです。
02/10/10 17:51ID:tjuH/a8v他の環境で動かしたらscaleが有効になってなくてしょぼんだった。
0721718
02/10/10 17:54ID:???スレのリンクを貼るほどの価値もない話題ということか。
それなら気にしねーほうがいいんじゃねーの。
どうせ具体的な指摘は何も無かったんだろ?
0722名前は開発中のものです。
02/10/10 18:08ID:???0723名前は開発中のものです。
02/10/10 19:04ID:???0725名前は開発中のものです。
02/10/10 20:45ID:pMa8asNt0726名前は開発中のものです。
02/10/10 20:50ID:???0727名前は開発中のものです。
02/10/10 22:57ID:???あるぞ。
0728名前は開発中のものです。
02/10/10 23:53ID:???> DirectDrawより簡単ではるかに便利。
DirectDraw は初期化と、ロスト時の再初期化処理だけで意外と面倒。
0729名前は開発中のものです。
02/10/11 00:28ID:???無い
サイズの制限はハード依存であってID3DXSpriteそのものの制限とは関係ない
0730名前は開発中のものです。
02/10/11 00:33ID:???0731730
02/10/11 00:46ID:???0732名前は開発中のものです。
02/10/11 02:21ID:???> ID3DXSpriteだと256*256以上の大きさのテクスチャを扱えないからじゃねーの?
>726 :名前は開発中のものです。 :02/10/10 20:50 ID:???
> そんな制限は無い
>727 :名前は開発中のものです。 :02/10/10 22:57 ID:???
> >>726
> あるぞ。
>729 :名前は開発中のものです。 :02/10/11 00:28 ID:???
> >>727
> 無い
> サイズの制限はハード依存であってID3DXSpriteそのものの制限とは関係ない
このやりとりは不毛だな。まず具体例書いてくれ。
Windows98SE + DirectX8.1(debug runtime)
GeForce256 (Detonatorドライバ 40.72)
D3DCAPS8.MaxTextureWidth = 2048
D3DCAPS8.MaxTextureHeight = 2048
Windows98SE + DirectX8.1(debug runtime)
ATI RADEON ALL-IN-WONDER (ドライバ 4.13.01.9039 7.72-020524M-004273C)
D3DCAPS8.MaxTextureWidth = 2048
D3DCAPS8.MaxTextureHeight = 2048
上記2つ例ではID3DXSprite固有のテクスチャサイズ制限(256x256)は確認できない。
0733名前は開発中のものです。
02/10/11 02:45ID:???Drawだと左上から256×256の部分が表示されるだけだな。
GeForce2MXだからVoodooのような256×256の制限はない。
確かDirectX7の時にはこの制限がなかったと思うが。
0734名前は開発中のものです。
02/10/11 03:43ID:???ドライバは40.72 Beta
0735734(補足)
02/10/11 03:44ID:???0737名前は開発中のものです。
02/10/12 08:41ID:???VooDoo系チップの場合じゃ、ホゲェェェ!!
そういうハード特有の事情を知らんやつが、
Direct3D触るとろくなことがない。
0738名前は開発中のものです。
02/10/13 01:22ID:???だからハードウェアの制限とID3DXSpriteの制限を分けろよ(藁
0739名前は開発中のものです。
02/10/13 03:02ID:???おまいのまなこたんは、ふしあなさんでつか?
0740名前は開発中のものです。
02/10/13 03:30ID:???ID3DXSprite・Drawだと256×256以上のテクスチャは使えないだな。
0741名前は開発中のものです。
02/10/18 08:11ID:Zt+yBkdjDirectX8.1bのランタイムと
nVidiaの最新ドライバを使ってみたか。
0742名前は開発中のものです。
02/10/22 20:32ID:cC1V2h4qデータを生で置きたくないのです。
他のゲームを見てみたら、結構暗号化(?)されてたりして読めないのがあるのですが、
あれはどうやっているのでしょうか。
セーブデータや環境設定。
jpeg画像。
midやwavファイル。
についてそれぞれ教えてください。
0743名前は開発中のものです。
02/10/22 20:33ID:???VS.NET
C++
DirectX8
です。
0744名前は開発中のものです。
02/10/22 20:41ID:???0745名前は開発中のものです。
02/10/22 20:43ID:???初心者スレ向けの内容だね。
「普通に読めない」というのは、暗号化(スクランブル)の場合と
圧縮の場合がありますが、それぞれについて。
スクランブルに決まったやり方はありません。
なぜなら、決まった暗号化の手続きがあるのであれば、
決まった複号の手続きで簡単に戻されてしまい、暗号化の意味が無いからです。
ですが、全部1bitローテートするだけで普通に読めなくなるので
簡単なものでも問題なしかと。
圧縮については、辞書圧縮や動的ハフマン法、ランレングス法といった
有名なアルゴリズムがありますのでそういったものを利用する場合が多いようです。
具体的なアルゴリズムは文献を調べるなりネットで調べるなりしてください。
0746名前は開発中のものです。
02/10/22 22:57ID:???0747名前は開発中のものです。
02/10/22 22:58ID:???拡張子だけ変えて実はgifそのもの、なんてのもあったなー。すぐばれるけど。
0748名前は開発中のものです。
02/10/22 23:38ID:???どんなマップ?
平面なら二次元配列でいいと思うが。
0749名前は開発中のものです。
02/10/23 00:55ID:XrIoI0Co名かには逆汗ブロックするものもあるけど
0750名前は開発中のものです。
02/10/23 01:44ID:???ん? 発想が逆だと思うよ。
「リバースエンジニアリングされたら終わり」じゃなくて、
「リバースエンジニアリングされなきゃ大丈夫」。
平文で読まれなきゃ読める人は大きく限定されるわけだからね。
でも、解析されても、個人製作のソフトにそこまで情熱を傾けてくれるのなら
それはそれで嬉しい気もする。
0751名前は開発中のものです。
02/10/23 21:37ID:rAqnFbe+正直、Vectorにある数多くのフリーゲームで、何割くらい(または、いくつくらい)が
遊べるゲームだと思っていますか?
人によってかなり答えが異なると思いますが、みなさんの意見を聞かせてください。
0752名前は開発中のものです。
02/10/23 21:50ID:???0753名前は開発中のものです。
02/10/23 23:47ID:???http://game.2ch.net/test/read.cgi/gamedev/1007129482/84n-
0754名前は開発中のものです。
02/10/24 16:35ID:???個人的にはゼロ。
ぜんぜん遊べん。
0755名前は開発中のものです。
02/10/24 17:51ID:???再帰処理が必要な思考ルーチンを組まなければならない場合、どうやってますか?
0756名前は開発中のものです。
02/10/24 17:57ID:???0757名前は開発中のものです。
02/10/24 19:21ID:???ageないと質問に答えてもらいにくいよ
急いでいないならいいが
0759名前は開発中のものです。
02/10/24 19:44ID:???・マルチスレッド
・再帰処理をタスクシステムへ載る様に組み直す
パッと思いつくのはこれぐらい。
0760名前は開発中のものです。
02/10/24 20:59ID:???そんなことはない。少なくともゼロではない。
>>760
必死だな(w
0761名前は開発中のものです。
02/10/24 21:41ID:???なんでそんなに必死なの
0762名前は開発中のものです。
02/10/24 22:06ID:???0763名前は開発中のものです。
02/10/24 22:50ID:???0764名前は開発中のものです。
02/10/25 02:42ID:???もっとおかしい事はたくさんありマンコ。
0766名前は開発中のものです。
02/10/25 11:11ID:???おまいらが、いまよんでいるのは 擬 似 文 字 でつか?
0767名前は開発中のものです。
02/10/25 14:59ID:???0768名前は開発中のものです。
02/10/25 15:06ID:???おまいらにとっては 仮 想 文 字 なんでつね?
0769名前は開発中のものです。
02/10/25 16:06ID:???0770755
02/10/25 16:07ID:???0771759
02/10/25 17:17ID:???そういうことです。配列にスタックを作って自前で管理し、ローカル変数を
そのスタック上に置きます。
再帰を単純なループに開いた上、タスクシステム上でまわす事になります。
0772名前は開発中のものです。
02/10/25 20:04ID:???ユーザーからの入力文字(漢字変換とかもアリ)をげっちゅーするには
やっぱりInputBoxのAPIしかないのでしょうか?
0773名前は開発中のものです。
02/10/26 01:01ID:vJSal2rR自分のプログラムを実行するごとに重くなっていきます。
プロセス自体はちゃんと終了しています。
windowsって、プログラム終了時にメモリの解放って行ってくれないんですか?
まぁ、自分がメモリリークをつぶさなければいけないのですが。
特に、大き目の画像を扱った後にそのような現象がおきるみたいです。
どうなんでしょう。
0774名前は開発中のものです。
02/10/26 01:14ID:???タスクマネージャに該当プロセスがないことは確認したかい?
0775名前は開発中のものです。
02/10/26 01:14ID:???0776名前は開発中のものです。
02/10/26 01:28ID:???ただしこれはドライバが正常に動作していればの話。
ディスプレイドライバを更新するとかしてみれば?
0777名前は開発中のものです。
02/10/26 01:46ID:???0778名前は開発中のものです。
02/10/26 02:48ID:???プロセス終了時のメモリ解放は
OSの管轄ですが何か?
メモリリークが問題になるのは
長時間常駐するプロセスだけ
0779名前は開発中のものです。
02/10/26 02:55ID:???0780名前は開発中のものです。
02/10/26 03:54ID:???まさか、しないと思ってるのか?
0781名前は開発中のものです。
02/10/26 04:37ID:???一応OSが開放してくれるハズだが、
それを過度に期待したプログラムを組むのは避けた方が無難。
0782名前は開発中のものです。
02/10/26 04:44ID:???確保したメモリは必ず自分で解放しなくちゃダメだよ。
OSを信用する方が悪い。
0783名前は開発中のものです。
02/10/26 07:46ID:???救済措置と思ったほうがいい。確保したメモリは必ず開放するのが鉄則。
0784名前は開発中のものです。
02/10/26 10:14ID:???0785名前は開発中のものです。
02/10/26 12:43ID:???> OSが開放してくれるとしても、それはあくまでも開放ミスに対する
> 救済措置と思ったほうがいい
そりゃ違うだろ。
そもそも仮想記憶を使ってる OS の場合、ページテーブルやら TLB (*1) やら
は OS 以外は触れない。そこにバグがあると疑い始めたら、もはやアプリケー
ション側でとれる対策は何もないよ。
(*1)
IA-32 だと TLB はソフトウェアからいじる必要はない(ページテーブルをハード
が勝手にコピーしてくれる)けど、MIPS などは TLB ミスが起きると例外を発生
して、OS が自前で埋める必要がある。
0786名前は開発中のものです。
02/10/26 14:26ID:???という保証は無いからメモリリークするようなプログラムは
そもそも欠陥品と見ていい。だから開放しないと駄目。
それにOSが開放しなかったからといって、それはOSの
過失ではない。プログラム作った奴が悪い。
0787名前は開発中のものです。
02/10/26 14:35ID:???では次の話題。
↓
0788名前は開発中のものです。
02/10/26 15:24ID:???いくらやってもけしからんことに勝手に開放されてしまいます
0789名前は開発中のものです。
02/10/26 16:18ID:???Win98でRPCだか何だかを使うと起こりやすいそうだ
使ったことないけど
0790名前は開発中のものです。
02/10/26 16:22ID:???DOS環境とかゲーム専用機等ならたぶん開放しないのでは。
0791名前は開発中のものです。
02/10/26 22:41ID:???アルゴリズムが公開されている暗号もある。
>>755
タスクと再帰処理がなぜ両立できないのか分からん。
>>788
何の実験に使うのか知らんが。
ファイルや共有メモリ等、OSが勝手に解放することがないリソースは存在する。
存分に使え。
0792名前は開発中のものです。
02/10/27 01:11ID:???そもそも「どんな環境でも」なんて言い出したら、それこそ malloc/free がない
世界とか、あっても C 言語の規格書に従ってない環境まで出てくるから、議論
にならんよ。
規格書を行間まで読めば、C 言語の hosted environment を前提とする限り
malloc したメモリは OS に解放されるはず、が結論。
だいたいヒープの仕組みとか仮想記憶の仕組みを知っていれば、そんなに
ビクビクする必要はないと思うんだが。解放されないって、実際にどんな環境
を想定してるんだ?
(スタイルとして解放する方が良いかは別問題な)
0793名前は開発中のものです。
02/10/27 01:28ID:???こまめに解放してメモリを開けたほうがいいと思うんだが。
0794名前は開発中のものです。
02/10/27 01:52ID:xQ8SKzduDirectXでもやりたいのですが、 そういうことはできないのでしょうか?
たしか こんな計算式
C = (A+B)>>7+D
A: と B:
ソースのカラーか フレームバッファのカラー
D: ソースかフレームのアルファ値
0795名前は開発中のものです。
02/10/27 03:45ID:???IDirect3DDevice8::SetTextureStageState( )
0796名前は開発中のものです。
02/10/27 05:52ID:???ところが大抵の処理系では
freeは解放済みフラグが立つだけで
実際に解放されるのはプロセス終了時なんだな・・・
0797名前は開発中のものです。
02/10/27 06:27ID:???0798名前は開発中のものです。
02/10/27 09:49ID:???それじゃfree自体存在意義ねーじゃん
0799名前は開発中のものです。
02/10/27 10:25ID:???けど同じプロセスが再び○allocするときは
その解放済みの領域からメモリ確保するので
あながち無意味とも言えない
0800名前は開発中のものです。
02/10/27 10:53ID:???一種のキャッシュだよ。まっとーなメモリ保護のある環境下で OS を呼び出して
メモリを割り当ててもらうのは
ソフトウェア割り込みによる特権モード変更
割り込みハンドラでのレジスタの待避などの定型処理
(ここで OS のメモリ割り当て関係のコードに入って)
各種制限のチェック(たとえばユーザあたりのメモリ割り当て越えてないか、
とか)
仮想記憶のページテーブル、TLB の変更
OS の持つ仮想記憶レイヤーにおけるページエントリの変更
と、いろいろ手間がかかる。ユーザ空間で完結できれば、それに越したことはな
い。
このあたりは使ってるライブラリによっても変わってくるけど、昔の UNIX だと
一度 malloc したら二度と OS には返さないのが一般的で、最近でも条件 (*1)
が揃わない限りはまず返さない。
本当に OS からメモリを短時間・大量に借りたいなら malloc/free なんか使っ
ちゃダメです。mmap() とか VirtualAlloc() とか使いましょう。
(*1)
ヒープの端っこが free() されるとか、ページ単位で連続した空間が free される
とか。この条件を緩くして OS 側に返すチャンスを増やそうとすればするほど、
malloc/free が内部で管理・チェックするデータが増え、割り当て・解放に掛か
る時間もメモリ消費も大きくなるというトレードオフがある。
たとえば Solaris だと libc, libmalloc, libmapalloc あたりに実装が異なる
malloc/free がいくつかあるから、ソースを眺めながら処理速度を比べてみると
勉強になるよ。
0801名前は開発中のものです。
02/10/27 11:02ID:???るからメモリ開放しないプログラムを書くのは良くないと思う。
■ このスレッドは過去ログ倉庫に格納されています