1 :
名前は開発中のものです。:
age
あぼーん
乙彼〜
乙
7 :
名前は開発中のものです。:02/11/06 00:20 ID:Hy1yMbKx
age
8 :
名前は開発中のものです。:02/11/06 20:50 ID:mrrgYg+p
某 MIPS 系のマシンで STL コンテナを使おうとすると、リンク時に "relocation
truncated"と怒られる。どうも template がらみでできる weak object の配置に
失敗してるみたいだけど、解決策知ってる人います?
(確かに MIPS だとグローバルポインタ相対でアクセスするから、配置する箇所に
よってはグローバル変数といえどアクセスできなくなるよな。ld に喰わせるスクリ
プトファイル書けばいいのか?)
>>8 ふつう -G0
ってコンパイラ何使ってるかくらい書けヨ!
10 :
エックサー:02/11/07 19:03 ID:O6dqrNtE
DirectX8使ってるんですけど、メッシュの頂点の、ディスプレイ上での座標を知るにはどうしたらいいんですか?
11 :
8:02/11/07 21:47 ID:???
>>9 Thanks
> ってコンパイラ何使ってるかくらい書けヨ!
確かに。想像の通り gcc です。
12 :
名前は開発中のものです。:02/11/08 13:56 ID:mLnGgDjl
わたしも 3D座標をスクリーン座標に変換する方法が知りたいです。
座標xyzをwで割るらしいのですが、xyzwの求め方がわかりません。
xyzはただの3D座標なのでしょうか? それとも何かの行列を
掛けたりしているのでしょうか?
wはどこからでてくるのでしょうか?
すみませんが 教えていただけませんか?
ビューと射影行列を掛けるだけ
DirectD3なりのレンダリングエンジンを使うにしても
描画前に行列をセットしていると思うが何が分からないのか分からん
14 :
8:02/11/08 21:31 ID:???
STL の件だけど、要するに __malloc_alloc_oom_handler などの static 変数
が .sdata セクションに配置されるのが問題なんだね。
教えてもらった -G0 を使って「全部 .data セクションに置く」方法に加えて、
問題になってる変数に個別に __attribute__((section(".data"))) 指定する
方法でも動きました。
しかし、何で __malloc_alloc_oom_handler などのクラステンプレート中で
定義された static 変数に限って .sdata に配置できないのかは謎です。
.sdata や.sbss 使い切るほど static 変数定義してないんだけど。
>>12 オブジェクトのローカル座標に、ローカル・ワールド変換行列、ワールド・ビュー
変換行列、ビュー・スクリーン変換行列(a.k.a 射影行列) と順にかけて、出てき
た座標を w で割れば良い。
行列だけど、DirectX 使ってるなら SetTransform() に
D3DTS_WORLD
D3DTS_VIEW
D3DTS_PROJECTION
という第一引数を指定して渡してるヤツ。
>>13 まぁ、サンプルコードを深く理解せずに copy & paste してるんでしょう。趣味
でプログラミングしてるなら、そういう態度もアリだとは思うよ。
>>14 gccって、vtblを.dataに吐いてたりしない?
17 :
名前は開発中のものです。:02/11/09 01:09 ID:0QThSDoj
>>15 そーゆー奴ってさワールドからローカルへの変換ができねぇってことだろ?
動いてる物体にのれないのはもちろんのこと
スキニングも理解してできてねぇだろ?
逆行列はしっかり理解してから次のステップへいってもらいたいね。
俺も会社入るまえそうだっただけに応援したいね。
ローカルに直せるってだけでかなりできることが増えるね。
なにいってるかわかんなくなったね。
じゃあね
18 :
8:02/11/09 01:16 ID:???
>>16 vtbl が配置されるセクションと、クラステンプレートの static 変数が配置される
セクションが違うと、何か問題がある? あと、今回の件に関しては STL のコン
テナが利用する allocator の話なんで、仮想関数は出てこないはず。
そもそも .sdata, .sbss に関しては、こういうことだと理解してるんだが、勘違い
があったら指摘して下さいな。
1. EE-core (っつーか MIPS) は 32bit 固定長命令を採用しており、アドレス
空間も 32bit ある。
2. したがって 1 命令で 32bit の任意のアドレスにアクセスすることはできない。
どうしてもアクセスしたければ
a) まず 16bit をレジスタの上位アドレスに読み込み
b) 次にオフセット付きメモリ参照命令を使って、メモリにアクセス
と 2 命令使う。
3. それだと効率が悪いので、汎用レジスタの一つ ($gp) をグローバルポインタ
として固定した値を入れて利用。static なデータは $gp から 16bit 相対で
アクセスできる範囲に入れておく。(これが .sdata と .sbss)
当然 16bit 相対でアクセスできる範囲は限られるから、そこから溢れたデータ
は効率悪くても 2 の方法でアクセスする必要がある。gcc は標準では 8byte
以下のデータは .sdata, .sbss セクションに、それ以上のデータは .data, .bss
セクションに格納する。この閾値は、必要に応じて -G オプションで変更できる。
19 :
8:02/11/09 01:19 ID:???
>>18 の続き
そういうわけで gp がらみで問題になるのは
1. .sdata, .sbss が溢れるほど大量に static データを定義した場合
2. 翻訳単位によって、閾値が異なる場合。たとえば同一のグローバル変数を
参照するプログラムの片方を -G0 でコンパイル、他方を -G8 でコンパイル
とか。
3. $gp を書き換える場合。特に位置独立なコードを使うシェアードライブラリの
関数を呼ぶ場合。(ふつー Global Offset Table 用意して、$gp 書き換えた上
で関数を呼ぶスタブを作る)
といった場合。クラステンプレートの static 変数が関わるとは思えんのよ。
PS2 Linux だとなんの問題もなく動いたような気がするし。
20 :
12:02/11/09 01:55 ID:s6gdDMqC
>>15 ビュー行列 と 射影行列を掛けたものと、 3D座標を 掛けたの
ですが、でた xyzwで
x/w
y/w
z/w
をやってみたのですよ。
しかし、 値が1.0を超えているにもかかわらずスクリーンの端
にまで、 ラインが(この時二つの座標を線で結んでいました。)
届いてませんでした。
なので、 やり方が違うのかなとおもいまして・・・・
>>20 なんか微妙に日本語が変な気が。ありがちなのは行列をかける順番を
間違えてるとかだが。
> しかし、 値が1.0を超えているにもかかわらずスクリーンの端
> にまで、 ラインが(この時二つの座標を線で結んでいました。)
意味が良く分からん。
22 :
12:02/11/09 02:14 ID:s6gdDMqC
>>21 すばやいレスありがとうございます。
2点をラインで描画しました。
ビュー行列 matView
射影行列 matProj
調べたい座標 Vec
計算後の値 v4
mat = matView * matProj
D3DXVec3Transform(&v4,Vec,mat);
Vecとmatを計算して求められた 値をwで割る
v4.x/v4.w
v4.y/v4.w
v4.z/v4.w
ここで スクリーン座標が求められるはずです。
スクリーン座標の値は xyに関しては -1〜1 zは 0〜1に なるはず
だけれど、 その値を超えたにもかかわらず そのラインは
画面の端まで届きませんでした。
mat = matProj* matView
でやってみても 値は変わりますが、 ラインが端まで届きません。
なので、計算の仕方が間違ってるのか、それか根本が間違っている
かどちらかだとおもうのです。
23 :
名前は開発中のものです。:02/11/09 03:22 ID:gww9xFnI
ビューポートは考慮したーのーかーなーあーあーあーあ?
24 :
12:02/11/09 03:44 ID:s6gdDMqC
>>23 すみません。 たしかに、 640,480のウインドウを値(1.0,1.0)に
する必要がありますが、 このビューポートを実際どのように
使えばいいのか。
25 :
12:02/11/09 05:27 ID:s6gdDMqC
>>23 もとめられた値に windowのサイズの半分を掛けて
あげればよいのでしょうか?
640,480のウインドウなら320,240をそれぞれ掛けてあげる
x = x*320;
y = y*240;
それですと 一応それらしき値はでます。
26 :
名前は開発中のものです。:02/11/09 09:43 ID:iuRz/9+A
ちゅーしんをあーわーせーろー。
27 :
名前は開発中のものです。:02/11/09 14:55 ID:9m0Zluol
意外にみんな親切なのな。
誠意が見られるなら付き合うよ。
質問の仕方とか…ね。
29 :
名前は開発中のものです。:02/11/09 15:20 ID:m4HooRjJ
30 :
12:02/11/09 17:41 ID:s6gdDMqC
>>26 >>ちゅーしんをあーわーせーろー。
中心ですか
どうやってあわせるのだろう・・・・・
視点と注視点から 角度を求めて それを 頂点に掛けて
あげるのでしょうか・・・
うーんでも、ビュー行列を掛けたときにすでに入っているような気も
しないでもないですね。
そういうのは3Dグラフィックの基礎知識だから、そっち方面の
参考書でも読んで勉強したほうがいいと思うぞ。
そだね。DirectX がどうこうの前に、基礎的な知識を習得したほうが近道だよ
試しに自力でライブラリ無しでポリゴン出してみなよ
ワイヤーフレームでいいからさ。いろいろ分かると思うよ
33 :
名前は開発中のものです。:02/11/10 00:18 ID:laxcwGaC
おーれーはーそーのーすーたーんーすーがきらーいだー。
目的地をみさーだーめーていっちーょくせんでりろーんはそーれーかーら
かーんーがえーるーのがーすーきーだ。
ちーなーみーにーちゅうーしーんをもとーめるーとゆーんは、
たーすーだーけーだーよ?あ?
で、あーとーはーじぶーんでなーんとかしれー
35 :
12:02/11/10 03:52 ID:CLex+uUH
>>33 私も とりあえず、足せば良いのかなと思いやってみたのですが
うまくいきませんでした。
>あーとーはーじぶーんでなーんとかしれー
いろいろご指導ありがとうございました。
いろいろ試して見たいと思います。
オブジェクトのワールド座標ににプロジェクション行列の逆行列をかけて
求まったxとyを使えば良いんじゃねーの?
その時、原点は画面中央、640×480の場合、xが0なら
画面中央320って事じゃないの?
…漏れの環境だとね。
zはカリングで使うじゃない?マイナスだとカメラの後ろに来てるって事。
>>34 static class menber でも、問題が出るものと出ないものがあります。
普通のクラスの static member object -> 問題なし
テンプレートクラスの static member object -> relocation truncated ... でリンク時エラー
普通のクラスとテンプレートクラスで異なる点は、nm で見た限りだとシンボルが
weak か否かという点。テンプレートクラスの static member は複数の翻訳単位
でインスタンス化される可能性があるけど、リンク後には実体を 1 つにせにゃな
らんので weak object になってる。
それで weak object + .sdata セクションという組み合わせが悪いのかと思ったの
だけど、違うのかなぁ。(これ以上は binutils のソース読まんと解決しないような
気がしてきた)
> でも、やっぱ -G0
らじゃ。
38 :
名前は開発中のものです。:02/11/10 17:12 ID:X0lDMmpo
>>36 >オブジェクトのワールド座標ににプロジェクション行列の逆行列をかけて
>求まったxとyを使えば良いんじゃねーの?
これですと 値が変動するときは プロジェクション行列が変わった時だけ
なのでうまくいかないと思います。
39 :
36:02/11/10 19:10 ID:???
ああ、すまんね。
こっちの環境だと、独自クラスのカメラてのがあって
毎フレーム、視錐台の変更って感じでやっているから出切るんだわ。
40 :
前編:02/11/10 20:19 ID:JSg4/5lD
はいではやりかたを整理しましょう。
まず変換したいワールド座標にカメラの逆行列をかけます。
これはDIRECTXではGetTransなんとかでとれるあたいそのままです。
つぎにプロジェクションマトリクスをかけます。
これは大抵の環境で同じです。
それからビューポートの変換です。
これは640X480の場合は
41 :
後編:02/11/10 20:29 ID:JSg4/5lD
X=(X/W)*320+320
Y=(Y/W)*-240+240
で終了です。
これはDIRECTXのヘルプにものっています。
ヘルプでビューポートで検索をかけるとみつかります。
これでできなかったら少し実際にものをだして動かしてみてはどうでしょうか?
42 :
37:02/11/11 20:55 ID:???
解決しました。結論としては linker に読ませてるスクリプト指定が腐ってる、
.gnu.linkonce.s セクションのデータを $gp 相対でアクセスできそうなところに
配置しろ、ってことで。
(結局 gcc のソースを読む羽目になったよ……)
>>42 そんなんでgccのソース読む羽目になったの?
マップファイル見たらすぐわかりそうなのに。
>>43 それは「.gnu.linkonce.s セクションって何、どういう条件で作られるの?」っつー
のが、分からなかったから。推測はついたけど、裏をとらないと困るっしょ。
>>44 そこまで見たあんたに尋ねるが、ソノ環境で、vtblは何処に出てる?
.gnu.linkonce.d.vt とか、そんなんだと思う。
なんか、gccのデフォルトで、.dataの一部として吐かれるみたいなんだけど、
書き込み可能なセクションに吐く理由がわからなくて気になってるんだ・・・。
>>45 確かに .gnu.linkonce.d.__vt_なんちゃら セクションに書かれてる。
gcc/cp/class.c を読むと
#ifndef WRITABLE_VTABLE
TREE_READONLY (decl) = 1;
#endif
みたいな記述があるから .gnu.linkcode.r に配置されそうなもんだが。謎。
>>46 おお、そのマクロでしらべてみたら、なんかでてきたよ。
ありがとん。
で、デフォルトでそんなマクロは定義されないらしいのだが・・・。やはり謎。
あぼーん
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| ここでおしまい |
|________|
∧∧ ||
( ゚д゚) ||
/ づΦ
50 :
名前は開発中のものです。:02/11/16 23:26 ID:VL8Oafej
終了厨がおおいですなぁ
ここでも、保守。
あぼーん
54 :
名前は開発中のものです。:02/12/09 22:53 ID:gy0Rwv2m
やる気のないゲームプログラマです。
丁度プロジェクトのハザマで暇なので
ツール作成でもしてみなさい、と上司に言われました。
イチから作成する根性もやる気もないのでとりあえず
VRAMを眺めるツールでも改造してみようかと思うんですが
どう改造したら勉強になるのか見当がつきません。
どうせ改造するならためになるほうがいいんだけど・・
ハードはGBAです、どなたかお知恵を。。
あぼーん
あぼーん
58 :
名前は開発中のものです。:02/12/23 20:03 ID:CHDaAJj8
誰も相談したい人いないのか?
59 :
名前は開発中のものです。:02/12/23 22:42 ID:frBmN/bA
ゲームのあたり判定ってどうやってるの?
精妙なあたり判定を作りたいときは大小の四角を何個か組み合わせればいいのかな?
当たり判定用のデータを他に持つと簡単。
具体的なビットマップだったり、矩形だったりするが
それはゲーム依存。
当たりを判定して、何に使うかというのもポイントだったりするので
そのへんもデザインしよう。
61 :
名前は開発中のものです。:02/12/23 22:57 ID:frBmN/bA
なーるほど、サンクス!
12月、1月は一時閉鎖します。
あぼーん
64 :
名前は開発中のものです。:02/12/25 01:36 ID:06ow8SQ/
mx・・・自機X座標、my・・・自機Y座標、mxa・・・自機X幅、mya・・・自機Y幅
ex・・・敵機X座標、ey・・・敵機Y座標、exa・・・敵機幅、eya・・・敵機Y幅
if ( (mx<ex+exa)&&(mx+mxa>ex)&&(my<ey+eya)&&(my+mya>ey) ) ...
シューティングのオーソドックス?な当たり判定はこんな感じのやり方しか
知らないんだけど他にはどんな方法がありますか?
ゲームやハードに依存しててもいいからいろんな判定の仕方が知りたいYO!
65 :
名前は開発中のものです。:02/12/25 02:21 ID:fYJY+WkT
説明めんどいのでこれで理解して。最近流行の弾幕系専用当り判定。
cEnemy…敵管理クラス。
cEnemy* hitRect[40][30];
cEnemy* pHitList = hitRect[mx/16][my/16];
while(pHitList != NULL){
if( pHitList->IsHit(mx,my) ) printf("どっかーん");
pHitList = pHitList->GetNext();
}
リスト内の各enemyに対して判定するってのは分かるけど、16って何?
16ドットって意味かな?
どちらにしろ定数にしておくべきだと思うが…。
あぁ、640x480の画面を16x16に区切って、自機の近くのやつだけ判定したいってことか
あぼーん
>>65 マジックナンバー使わんでくらはい(´д`;)
大きな判定の場合はどうするの?
複数のエリアに登録する?
>>65 高速弾だとすり抜けが多発しそうだが、その辺は考慮に入れてあるのか?これ。
72 :
名前は開発中のものです。:02/12/25 10:48 ID:Bqxu+V45
ていうか、8ビットや16ビット時代ならともかく、最近のPCなら
たとえ弾幕系でも2Dシューティング程度の判定量で
んな小細工する必要皆無だと思うけど。
一つの弾の判定に30クロックかかったとして(もっと少ないと思うけど)
1000個の弾との判定にかかるのは3万クロックだな。
60fpsで判定すると180万クロック。
1GHzのCPUなら0.2%で、2ミリ秒/秒だな。
安直にできそうなところはさっさとスルーしたほうがいいと思った。
あぼーん
75 :
64:02/12/25 14:47 ID:aHas5saF
>>65 ゴメン、C++はまだ勉強してないからわからない
スプライトを使った当たり判定をやりたいのだけれど・・・
Gems2の再帰的次元クラスタリング(Recursive Demiensinal Clustering: RDC)はどうよ?
計算量を、O(n^2)からO(nlog2n)までもっていけるらしい。
C言語で時代に逆行した2Dアクションゲームを作ろうと思います。
まず何から作り始めると良いでしょうか?
78 :
名前は開発中のものです。:02/12/25 19:40 ID:/cDNIeOU
SRPGの移動に関するサンプルみたいなのありませんか?
あぼーん
80 :
名前は開発中のものです。:02/12/25 21:16 ID:ocB35uV6
81 :
77:02/12/25 21:26 ID:RXUO2PKH
>>80 うむ、確かにな。
プログラミングは教科書に載ってるようなやつなら簡単に理解できるくらい。
ゲーム系はまるっきりってとこでつ。
82 :
名前は開発中のものです。:02/12/25 21:37 ID:Kq2zu9Np
>>77 まずマップチップ(背景データの素材)を用意して
それを配置したマップデータを用意して
マップデータから1画面分のデータを読み込んでマップチップを貼り付けて
それをスクロールさせる(読み込み位置を変化)ところから。
グラフィック関係はBitblt関数でやってもいいしDirectX使ってもいいし。
素材が無いと気合入らない事もあるし・・・
2Dアクションって・・・シューティング以外の格闘系だったりする?・・・
83 :
名前は開発中のものです。:02/12/25 21:43 ID:ocB35uV6
とりあえず
>>82をやったあとは、
マップ上にキャラクターの絵を置いて、キーボード操作によって
キャラの位置を動かすのをやってみるといいかも。
習作としてはシューティングが最適だったりするんだよね。
重力の概念とか考えなくていいし。
85 :
81:02/12/25 21:59 ID:RXUO2PKH
なるほど、シューティングか。
サラマンダみたいなやつの背景をうごかせるようになればいいのか。
CとDirectX、どっちが関数使いやすいですかねぇ。
>>84 C言語の本で確か「初めてのC」って名前でした。
あぼーん
87 :
名前は開発中のものです。:02/12/25 22:06 ID:Kq2zu9Np
>85
CでDirectXを操作するのだよ。DirectXは言語じゃない。
>87
うむ。
っつか素の ANSI C だとグラフィック関係を制御するライブラリ関数ないし。
89 :
名前は開発中のものです。:02/12/25 22:13 ID:Kq2zu9Np
言葉足らずだった。DirectXは慣れないと画面がパー、要再起動だから
C言語の関数でやってみてからDirectXに移行した方がいい。
グラフィックを扱う部分は大した量じゃないから後ですぐ移行出来る。
90 :
85:02/12/25 22:15 ID:RXUO2PKH
なるほふぉ。
勘違いしてました。
今手元にあるヴィジュアルCはグラフィック関係を制御できますか?
91 :
名前は開発中のものです。:02/12/25 22:26 ID:Kq2zu9Np
>>89 > C言語の関数でやってみてからDirectXに移行した方がいい。
要らぬ誤解を招かぬように「まずは Win32 API (GDI)」とでも言っておいた方が
良いと思われ。
標準 C ライブラリ関数には GUI 関係は全く既定ないから。(それどころか CUI
のスクリーン制御さえ既定ないわけだが)
> 今手元にあるヴィジュアルCはグラフィック関係を制御できますか?
もちろん。
Win32 API でプログラム組みたいなら、「プログラミング Windows」って本がバイ
ブル。分厚い本だが、懇切丁寧に書いてあるから読むのは難しくない。
93 :
名前は開発中のものです。:02/12/26 03:31 ID:sowo2pdC
>>92 APIについて
Windows95 APIバイブル1も一冊あるとかなり便利。
ただ、ヘルプを読んでれば十分という話も。
あぼーん
VC++をC++とは違う言語と思ってる人もたまに見かけるよね。
VC++ == MFC みたいな
96 :
名前は開発中のものです。:02/12/26 12:11 ID:FD9iJ3tp
VC++は製品名
C++は言語
言語仕様的には標準のC++とVCのC++はかなり異なる
g++も標準C++からかけ離れすぎ
あぼーん
100 :
90:02/12/26 19:37 ID:kDKABYvS
くじけそうです。
VC++の使い方が分かりません。
なにがやりたくてなにがやれないのか説明しる
102 :
名前は開発中のものです。:02/12/26 21:29 ID:bqU4KP+U
>98
拡張機能多いからな。インラインアセンブラ, typeof, 可変引数を使える #define と
か便利。
話が変わるが、頂点ブレンディング。剛体変換を行う複数の行列 M1, M2, ... と、
頂点毎に重み w1, w2, ... を用意して
M = Σwi * Mi (ただし Σwi = 1)
で出した M を使うってのは分かるんだが、当然この M って剛体変換じゃない
よね。
頂点変換は良いとして、法線ベクトルの計算をどうしたものかと思ってるんだが、
o 法線ベクトルの算出も M を使う。
o ただし法線と M の積を求めた後で、出てきたベクトルをノルムが 1 になるよう
に正規化する。
で良いのかね。
103 :
100:02/12/26 22:09 ID:kDKABYvS
ソースをC++で打っていいのか分からなくて困ってます。
まずはVC++の使い方から調べます。
ソースはテキストエディタで討ってくダサい
105 :
103:02/12/26 23:14 ID:kDKABYvS
あ、ちょっと説明が悪かったです。
VC++を立ち上げて新規作成を選んでファイルのところに
C++ソースファイル
HTMLページ
SQLスクリプトファイル
とか色々あるのでどうすれば良いのか分からなくなってます。
>>105 ヘルプに「チュートリアル」があるので、
まずはそれを一通りやってください。
107 :
名前は開発中のものです。:02/12/26 23:50 ID:5pSEx7R5
本を買ってきてください。
VCの本を買えばプロジェクトの作り方から実行方法までは迷うことはないです。
その金も惜しむなら、検索エンジンで
猫でもわかるプログラミング
で検索をかけてください。
>>105 君はここじゃなくてプログラム板の初心者質問スレッドで
聞いたほうがいいよ。
あぼーん
110 :
105:02/12/27 10:18 ID:CvRh/hw0
ありがとうございます。
がんばります。
RPGを作っているのですが、
「素人は数値や文章を打ち込む事をプログラムだと勘違いしている」
「数値や文章なんて、プログラムと切り離してエクセル等でササーっと打ち込めば済む事」
といった類の事を耳にしました。
テキストエディタのマクロを使う事くらいしか思いつかず、
どういやって切り離すのかまったくイメージ出来ません。教えてください。
あと、「そんな事はスクリプトを組んでスクリプトにやらせるべきで、逐一書くのなんて作業効率悪すぎ」
なんて事もどこかで読みましたが、ここで言うスクリプトって言うのは関数の事で合っていますか?
> スクリプトって言うのは関数の事で合っていますか?
いいえ。
>>64 遅レスだけど、
>if ( (mx<ex+exa)&&(mx+mxa>ex)&&(my<ey+eya)&&(my+mya>ey) )
こーやったほうが処理が稼げると思ふ。。。
if( mx > ex+exa ) goto HIT_CHECK_END;
if( mx+mxa < ex ) goto HIT_CHECK_END;
if( my > ey+eya ) goto HIT_CHECK_END;
if( my+mya < ey ) goto HIT_CHECK_END;
// 当たったヨ
アボーン;
HIT_CHECK_END:
// 当たらなかったヨ
ヤレヤレ;
>> 113
コンパイルかけたら同じ出力になると思う。
あぼーん
>>112 即レスありがとうございます。用語辞典読んでも実感が沸かない。
スクリプト==サクラエディタで言う所のマクロだと理解していいんですか?(秀丸マクロとか)
「そんな事はスクリプトを組んでスクリプトにやらせるべきで、逐一書くのなんて作業効率悪すぎ」って言うのは、
せんし・300/150/150/50
ぶとうか・200/160/70/150
ゆうしゃ・2500/140/140/140
と打ち込んだテキストをスクリプトにかけてCの書式にする方が、
逐一ステータスをCで記述して行くよりも圧倒的に速い。って事ですか?
あぼーん
>116
そんな感じ。
ただし実際には素の C まで落とさずに、中間言語に落として、プログラム側では
中間言語を解釈するインタプリタを用意することが多い。こうすると、パラメタやら
イベント処理を変えても再コンパイル不要になるからプログラマの手間・データを
変更してから実際に動かして試すまでのタイムラグが減る。
あんたらが 何話してんのか さっぱりだ
オレが悲しい 年末2ちゃん
当方C++歴5年、DirectX歴1年、4月から新人プログラマ
がっくり。
うんうん。イベントコントロール関係はスクリプトコンパイラ(独自)で
バイナリを吐いて、それを解釈しつつ実行というのが多いと思う。
UCSD PASCALみたいな感じか。
あぼーん
122 :
名前は開発中のものです。:02/12/28 16:40 ID:XAkUMvyT
質問させていただきます。
私は最近Cをはじめた者です。一つ疑問があります。
アプリケーションなどを開発するのと
ゲームを開発するのは、まったく同じものと考えてよろしいのでしょうか?
使用する言語が同じだとしましても、アプリとゲームを開発するのでは、
何か違いがあるのでしょうか?最近非常に悩んでおります。
専門学校などでも、アプリ開発の学科もあれば、「ゲームプログラム学科」
というのもありますし、何か違いがあるのかと思いまして質問させて
頂きました。よろしくお願いいたします。
124 :
122:02/12/28 16:58 ID:XAkUMvyT
>>123さん
ありがとうございます!
コレで悩みが全て飛びました。
気がねなく勉強できます。ありがとうございました!!
125 :
名無しは開発中:02/12/28 17:36 ID:6v0StEIP
中間言語というのはバイナリなのですよ。つまり
0102aabb...とかいう16進数なのです
プログラム中では定数をあてはめます。
#define command_1 0x01
#define command_2 0x02
.....
command_kaiseki(int no){
switch(no){
case command_1:
1の処理
break;
case command_2:
2の処理
......
}
}
126 :
名前は開発中のものです。:02/12/28 17:45 ID:9/qiHtyl
127 :
名前は開発中のものです。:02/12/28 21:35 ID:a5KU/+oB
野球拳を作りたいのですが何を使えばいいと思いますか?
登場人物には女の子を使えばいいと思うよ
野球拳ってどんな拳法ですか?
あぼーん
プログラムを学校で習おうとする時点で人生が狂っている
134 :
名前は開発中のものです。:02/12/30 23:20 ID:9kumBzua
あぼーん
136 :
名前は開発中のものです。:03/01/04 14:14 ID:Oaz/Glfr
あのさ、今シューティング作ってるんだけどさ。
敵の出現場所を定義するのがすごい面倒なんですよ。
ファイルに、敵が現れる時間、場所、種類などを書いて、それを読み込ませて
るんだけど、ちょっと間に敵を追加したいと思ったら、それ以降の敵の時間を
全部ずらさなければいけなくなります。
みなさんはどんなフォーマット使っていますか?
XMLみたいなmachine/human readableなフォーマットにして、
適切なツールを作るのが賢明じゃないかなあ。
138 :
名前は開発中のものです。:03/01/04 14:19 ID:Pe6gSFnI
う〜ん。
相対時間ならそれはそれで、面倒になることはないかな…
一応やってみますか。
あぼーん
141 :
名前は開発中のものです。:03/01/04 14:41 ID:Siq0Vq2w
2人で戦えるゲームを作ろうと思うのですが、二人が同時にボタンを押したら同時に処理しないといけないのでしょうか?
これだとペンティアム4のハイパースレッド機能という奴を使わないといけないのでしょうか?
最近PCをX68000からWindowsXPに変えたばかりなのでよろしくお願いします。
あぼーん
>>141 mainloop()
{
一人目のキー処理();
二人目のキー処理();
時間を進める();
描画();
}
>PCをX68000からWindowsXPに変えたばかり
ナントカ山口に騙されてたクチか?
あぼーん
>>144 キー入力の処理とそれとは、まったく関係ないが…
>>136 手を抜きたければ配列ってのもあり。
static unsigned int enemys[] = {
1, 0, 0, 0, 0, 0, 1, // 0 frame目
0, 0, 0, 1, 0, 0, 2, // 60 frame目
0, 0, 0, 0, 0, 0, 2, // 120 frame目
..
};
1 行 60 frame 単位で処理して、出現座標の x 座標に対応したところに
敵出現情報を埋めておく。0 で敵なし, 1, 2, 3, .. が敵の種類とかさ。
少し凝った処理が必要(たとえば 30frame で出したい)とかになったら、
上位 24bit をパラメタとして敵出現関数に渡して、そっちで細かい処理
をさせる。
>>146 キー入力とは関係ないが、
> これだとペンティアム4のハイパースレッド機能という奴を使わないといけないのでしょうか?
こんなことを言ってる様だと、擬似タスクの勉強からはじめろって言いたくなる
気持ちもわかるだろ。
それじゃあーハイパースレッド機能のないX68000では二人用のゲームは
作れないのか?と問いたくなるけど(w
>>141 はキー入力のことは一旦置いといて、ゲーム制作の基本中の基本を
解説しているサイトを検索して読み漁った方がいいかと思うけどね。
あぼーん
150 :
名前は開発中のものです。:03/01/04 20:57 ID:iAU/RP0w
そこで疑似タスクなんてチンケな物出してくる君の実力もそこまで。
ゲームのメインループとキー入力の関係を教えた方が百倍為になる。
151 :
名前は開発中のものです。:03/01/04 21:19 ID:tSU5Xw8/
入出力は、本気で考えると意外と深いぞ。
昔のようなハードウェアを 1 つのプログラムで占有できる環境なら
ポーリングさせれば良いんだが、今時の環境についてマジに理解しよ
うとすると、割り込みと OS 側の処理に関する知識が必須になる。
とりあえず「DirectInput では現在のキー入力状態を取得する API
が提供されてるから、それを使えば良い」ぐらいの理解で済ませてお
いて、細かい話は必要になるまで忘れといた方が幸せじゃないかね。
>>141 にちょい追加だが
mainloop()
{
キーボード入力状態のスナップショットを取得(); // 細かいことは Win32 にお任せ
一人目のキー処理();
二人目のキー処理();
時間を進める();
描画();
}
俺は151みたいなのが嫌いです。
153 :
148:03/01/04 21:41 ID:Sa70MEqM
>>150 > ゲームのメインループとキー入力の関係を教えた方が百倍為になる。
ハァ?何それ?・・・って感じですがなにか?
>>151 141のレベルを推測するとそこまで考える必要は全然ないと思われ。
そんなのは逆に知識ひけらかせてるだけにしか見えないが。
そもそも質問にマジレスするとなると、まずほとんどの二人用ゲームで
「同時に処理する必要はないし、厳密にはできない」だな。もちろんこれだけで
141がきちんと理解できるのか疑問だけど、それ以上のことは141自身が
言ってないので答えようがないな。
> 「同時に処理する必要はないし、厳密にはできない」
そもそも「同時」ってのが何を指してるのか考えないといかんよな。
>>141 現実世界だと時間は連続して流れてるわけだが、ゲームではふつー 1/60 秒なり
何なりの適当な間隔でゲームを進行させる。だから、入力を処理するのも「押し
たらすぐ」ではなくて、押したらそれを覚えておいて、次のゲーム進行のタイミ
ングで処理すれば良い。
…ってのがすべての基本かね。
俺みたいなヘタレ高校生がゲーム製作で食っていけるように
なるにはどうしたらいいんだ!?
人生の先輩達よどうか教えておくれ・・・
>>155 マジレスすると、ゲーム以外のことを沢山勉強すべし。
プログラマになりたいなら、プログラミングはやっといた方が良いけど。
あと数学と物理と英語。
>>155 ゲーム制作をさせてくれる会社に入りましょう
159 :
141:03/01/05 03:22 ID:GM2t1dvX
んま!こんなに馬鹿が釣れましたわ!
あぼーん
>>155 プログラマになりたいなら、大学までプログラムは放って置いて
高校までに英語をネエティブ並みに話せる、書ける、読めるようになっておきたい。
俺が。
英語はプラスアルファに過ぎんから、本業のプログラミングできんと話に
ならんぞ。まぁ、英語も読むぐらいはできないと困るが。
∧_∧
( ´∀`)< 糸冬 !!
/, つ
( ((_(_, )) )
しし'
age
166 :
si:03/01/29 11:03 ID:03M+lMkZ
簡単なゲームのプログラミングぅpしてください。
C言語で希望です。
あぼーん
http://www.hh.iij4u.or.jp/~peto/ みながら勉強してるんですが、
ちょっと疑問に思ったので質問させてください
たとえば、飛行機を表すタスクがあって、飛行機が移動しますね。
で、3Dのゲームだとカメラから描画の順番とか決めたりする処理がきて、で、そのあとに描画本体が来ますね。
とうぜん、飛行機の描画処理は飛行機タスク自体がおこなっていると思うのですが、ここで疑問が生じました。
飛行機タスクは、1フレームの中で優先順位が変わるたびにリストの中を移動しているのでしょうか?
それだとリスト中の位置を特定するのにいちいちサーチをしているのでしょうか?
それとも、「飛行機」を表す複数のそれぞれ優先順位の違うタスクで一つの「飛行機」を構成している?
それだとデータをどのように共有しているのでしょうか?
おしえてください。
170 :
名前は開発中のものです。:03/01/29 21:18 ID:fBpSUHac
>>169 >飛行機の描画処理は飛行機タスク自体がおこなっていると思うのですが
ダウト
はぅ。
そいでは、どうやって描画してるのでしょう?
飛行機描画関数に飛行機を渡しているのかな?
っていうか、聞きたいことずれました。
要するに、
1.タスクはリストの中を移動することがあるのですか?
Yes -> 2 / No -> 3
2.リストの中をどうやって移動するのですか?
3.そしたら(描画をするのが飛行機タスクじゃないにしても)どうやってタスク間で情報を共有していますか?
173 :
名前は開発中のものです。:03/01/29 23:11 ID:KEqojg40
タスクは前タスクと後タスクのアドレス情報を持ってるから
移動するとか考える必要ないんじゃない?
あと、タスク間での情報の共有って? 各タスクから共通の関数呼べば済むのでは?
>>171 描画をタスク自身が行うとは考えにくい。
タスクというレベルにまで到達しているなら、
「描画専門タスクに描画を依頼する」
という方式になっていると思う。
描画されるものとしての飛行機と、
アプリ内でのオブジェクトとしての飛行機を、
区別することが肝要だと思う。
>>173 2方向リスト処理ですよね。この場合、私の質問は、STLで書いちゃうと
std::list<task *> tasklist;
tasklist.remove(this);
tasklist.insert(newpoint, this);
の newpoint の位置をどうやってチェックしてるんですか?っていう意味だったのです。
listの先頭から全部なめていくのかなー・・・、それとも別の頭いいやり方があるのかな〜と。
情報の共有というのは、もし飛行機が
struct 飛行機 {
actor * a1, * a2;
}
で構成されるものだとして、a2 はどうやって a1 の中の変更した情報をチェックするのだろーとか考えてました。
いちいち new 飛行機 とかすると、(速度的な面で)疑似タスク使ってる意味がありませんよね?
>>174 なるほどです。
描画されるものとしての飛行機っていうのは、単純に飛行機のスプライトとか3Dモデルとかでいいですか?
176 :
名前は開発中のものです。:03/01/30 02:20 ID:ZJQj5onM
>>171 そのページの概念は処理順が安定している内部処理に絞られた物なので、
描画には向かないです。つーか勝手に用語用法決められても(汗
描画系で言ったら、
フレーム毎に「TCBアドレス+カメラ距離のセット」のリストを作成し、
距離基準にソーティングした後、リストを順になめて描画をする
様な処理が必要です。(実際にはマルチパスレンダやらなにやらで、優先度
の基準は色々追加されていく)
あ、情報共有のところ、修正って言うか追加です。
「飛行機作るときに、a1 に a2 へのポインタかませば良いんじゃないの?」
っていうのは、飛行機を構成する疑似タスクがたくさんになってくると、メモリ領域の中身が
ポインタだけで埋まっちゃう・・・とか思ったので、使わないんじゃないかなとおもいました。
178 :
171:03/01/30 03:30 ID:BqRtFvdb
>>176 なるほどです。めもめも。
#これで書けたら、うれしなっとプチ
私は new 飛行機 でやってる人なので、参考になるかわからんけど…
newpointの位置
「ここから先は敵タスク」みたいな目印用のタスクを何個か加えて、
それのポインタをグローバルで持たせてる。
それ使って大雑把にサーチした後に細かく見てる感じでやってるけど… 他に良い方法あるのかな
情報の共有
基本的に、子が親のポインタを持つのみ。
親から子に何かさせたい時は、親が自分のフラグを変えて、子がそれを見に行く。
子同士で何かさせたい時は、子が親のフラグを変えて、他の子がそれを見に行く。
補足
タスクの移動は、タスクを管理している側で操作したほうがいいと思う。
自分で移動するとnextが変わっちゃうので、他タスクがスキップされたり2回処理されてしまう。
情報の共有は、親は自分が参照されているかどうか、調べる必要があるかも。
子が持っているポインタが開放されたタスクを指していることがないように。
3Dの場合、半透明部分は後で描画しないといけないとか、細かい処理があるので、
「3D描画エンジン(仮名)」というような割合高機能なクラス(もしくは関数群)を作って、
それに描画を依頼する形で考えると良いのでは。
1.各物体オブジェクト(タスク)は、「3D描画エンジン」に指定位置での指定3Dモデルの
描画を依頼する。
2.「3D描画エンジン」は、それらの情報(位置、方向+モデル)を総合してソートなどして
描画順などを決め、一気に描画する。
つまり、描画順は各物体オブジェクト(タスク)にとっては知ったこっちゃねぇと。
描画エンジンが面倒みてくれるよと。こゆわけです。
だから描画順によってリストを移動などしなくて良いのです。
WM_PAINTで一気に描画するWindowsの基本と一緒だね。
タスクは結局ステートを変更するだけに過ぎない。
182 :
171:03/01/30 13:02 ID:BqRtFvdb
>>179 >情報の共有
子同士で何かするときのイメージなんだけど、親を掲示板に見なして、
A「なんかすっぜ」
B「おー」
B「おれはやったぜ」
A「そかりょかーい」
B「うぃ」
みたいな感じでいいのかな?
タスクの移動に関して「nextが変わっちゃう」問題は、タスクを取ってきたときに
nextを保存しておくのはダメですか?
>>180 なるほどです。
あぼーん
>>183 破滅的な状態を回避するには有効だと思う。
186 :
名前は開発中のものです。:03/01/31 10:15 ID:6VWpyBYm
要するにMVCモデルとかDocument-Viewモデルというやつだな。
187 :
名前は開発中のものです。:03/01/31 11:35 ID:4bR+Vd+q
すみません質問です。
CGIはサーバ&クライアントの関係を用いて
データのやり取りとりを行いデータの読み出しや書き込みをしていますよね?
ではGAMEではどのようにしてセーブをおこなったりしているのですか?
ゲームボーイやファミコンの本体にサーバとクライアントの機能が
備わっているとは思えないのですが…。
どのような仕組みで保存(セーブ)をしているのでしょか?
いやすべてがクライアント/サーバ型じゃないから。
GAMEって例えば?
189 :
名前は開発中のものです。:03/01/31 11:40 ID:4bR+Vd+q
どんなゲームでもいいんですが
ドラクエでもなんでもデータセーブ機能がついているゲーム。
サーバ&クライアントの関係を使わないとしたら
どのようにして保存をするのですか?
どのような言語で書かれたプログラムを使うのかとかおしえてください。
あとできればその理論が知りたいです。
マルチポストじゃなければ答えてあげたのにね……残念。
192 :
名前は開発中のものです。:03/01/31 11:45 ID:4bR+Vd+q
すみません。
この時間では書込みが少ないと思いマルチにしてしまいました。
おしえてください。。。
答えてあげたいけど、マルチポストは大嫌い。
そのような abuse 行為は善意に支えられたネットワークにとって
最大の敵であることを知りなさい。
恥知らず。
あのさ、マルチポストってだけならば別にわるいことって、ネチケットのFAQで読んだことがあるよ。
それも一度や二度ではなく。URLなんか覚えてないけどね。
ただし、質問者がマルチポストした先の答えをまとめて、
全ての回答者にこれこれこーなりました、ありがとーと言って回るならばっておまけ付き。
メモリカードとかに記録してるんだろ?
なんでサーバ・クライアントの話が出てくるのか分からないんだけども
>どんなゲームでもいいんですがドラクエでもなんでもデータセーブ機能がついているゲーム。
んっとさー、おーざっぱに答えるから嘘ついてるかもだよ。
コンピューターっていうのは CPU と メモリ とそれらをつなぐバスっていうのが最低限の要素なんだよね。
ファミコンっていうのは、メモリをつけてないコンピュータを売りつけて、
遊ぶためにはメモリ(ROMカセット)を買ってくださいって仕組みだったんだよ。
で、ROMカセットの中に RAM も入れて、電池で連続起動しておけばセーブシステムのいっちょあがり。
連投規制で書き込めないと見た。
あぼーん
199 :
名前は開発中のものです。:03/01/31 19:18 ID:qsXaXa9v
Cを中心に簡単なゲームを作りたいと考えているのですが、
Game Programming Gems以外に何か参考になる図書はありませんでしょうか?
よろしくお願いします。
200 :
416 ◆quHoSW/FCI :03/01/31 19:49 ID:2OuKlzSK
>>187 認識がヘン。
CGIやネットゲームのようなサーバ&クライアントの関係がある環境でも、
それは単に、サーバ側にデータを保存させているか、クライアント側に保存させて
いるかの設定の違いに過ぎない(CGIやとクラ側保存は・・・クッキーがあるか)。
データ保存が可能な環境と、保存命令があれば可能。サーバ&クライアントの
関係はぜんぜん関係無い。
というか要するに187は、CGI…というかPerl辺りを
限定的な環境でちょこっとかじっただけなんでしょ。
一生懸命説明しても無駄だと思う。
最初は実体を例示しないとわからないのは仕方ないけど
ずっとその例示を引きずるのは頭悪いな
203 :
名前は開発中のものです。:03/01/31 23:02 ID:vCqXldk6
204 :
名前は開発中のものです。:03/01/31 23:36 ID:qsXaXa9v
>>203 インベーダーゲームみたいな2Dの簡単なソフトです。主にシューティングを中心に作りたいです。
206 :
名前は開発中のものです。:03/02/01 00:33 ID:JG1cEAZ6
>>205 ありがとうございます。参考になりました。
あぼーん
208 :
名前は開発中のものです。:03/02/02 16:57 ID:6i0/vwvm
2Dで、人間の関節などを動かせるようにしたいのですが、
まずどのようなものを勉強すればいいのでしょうか。
キーワードとかってあります?
2Dで?
どうもイメージ沸かない・・・
>>208 階層構造,ローカル座標系
IK,FK
ここまでは3Dでもいっしょ
2Dなら画像の回転も必要かな
2Dで関節っていうと、幼稚園児向けの番組で動かしてる人形を思い出す……。
手足にそれぞれ黒い棒がついてて、関節がおかしな方向に平気で曲がる紙人形。
213 :
名前は開発中のものです。:03/02/02 19:02 ID:DGXzuX3G
IK,FK を検索エンジンで調べるためのキーワードをおしえれ。
インバースキネマティクス
ありがとぅょ
>>215 FK(フォワードキネマティクス)の方が簡単だから
IKよりFKをやってみては?
えーと、PALスレとか、リフレッシュレートスレでいわれてる、不定間隔なフレーム処理の補間ってどうやるんですか?
B宗(v += a)な私には、フレーム処理を 5ms 毎に実行して、それを V-Sync で描画するぐらいしか想像がつかないんだけどー。
あぼーん
220 :
名前は開発中のものです。:03/02/06 00:54 ID:2WnqR6mA
2Dゲームを作るときに、アニメーション画像って、どうやって管理しますか?
RPGの主人公がマップ上を歩くときに、手足が動いたりするのですが、
タイマーをかけて、stateを1,2,3,4,1,2,...って変えていって、
stateの値ごとに描画を変えるのがいいですか?
それだと、アニメーションが複雑になると、プログラムも汚くなるのですが、
もっと見やすくていい方法ってないですか?
>>220 アニメーションデータを表すデータ構造を作れ。
そしてそれを解釈して描画するプログラムを作れ。
これなら、アニメーションが複雑になってもプログラムに影響は無いぞ。
さらに、アニメーションデータを編集するツールを作るともっといい。
あぼーん
>>220 >もっと見やすくていい方法ってないですか?
きちっとした設計できれいにコーディングをする
いやマジです
関数とか構造体とかクラスってわかります?
>>220 状態遷移のクラスを作って、定期的にそいつから
アニメーションパターンの数字を取得するようにする。
描画するときは、その数値に対応した絵を表示させるだけ。
225 :
名前は開発中のものです。:03/02/08 23:49 ID:He/KRUT1
>>224 すいません。想像しづらいのですが、
クラスのインターフェースを書いてもらえますか?
>>225 甘えるなゴルァ
「有限状態オートマトン」で検索するか、
"Game Programming Gems 1" の 「3.1 有限状態マシンクラス」を読んでくれ。
(全然難しい内容ではないが、まあ、一応)
何回か作り直してればそのうちマトモな形になるよ
あぼーん
230 :
名前は開発中のものです。:03/02/10 16:24 ID:FAmepXpS
処理落ち率の計算の仕方を教えてください。
フレームを飛ばさないのに、処理落ちするって、どういうことですか?
処理は落ちてないんじゃないですか?
231 :
ぽぷり:03/02/10 16:27 ID:6VC5i/Lt
最初からココで聞いたらよかったかな。
あと2箇所に書き込んだマルチだが良かったら質問よろしく頼みます
いまFF4のパクリ作ってるんだけど戦闘の曲を.wmaで作った。
で、これをループでエンドレスで流すわけだが
そのまま初めのフレーズ(ダダダダ、ダダダダ・・・・)に戻ってしまう。
この曲は1分54秒まであるんだが
俺としては0:00から1:54まで流した後
ループは0:00からではなく00:53あたりからにしたい。
どうしたらいいかな?誰か賢い奴教えてくれ。
流れとしては・・・・
戦闘開始(音楽スタート)
0:00→1:54→0:53→1:54→0:53→・・・・・戦闘終了(音楽終了)
っていう感じにしたいです
232 :
デフォルトの名無しさん:03/02/10 16:28 ID:sFeXOrcI
ゲームで時間のかかる処理をしていると画面の
キャラクターの移動などがズルッズルッと遅くなる。
これが処理落ちしているという状態。
時間内に処理が終わらないのを「落ち」といっているのでしょう。
この場合処理はとばしていません。
パソコンでよく見られるのが、処理が重いときに処理をスキップする
やつです。画面の更新がなめらかでなくなってカクカクして見えます。
あぼーん
あぼーん
>>231
DirectShowでも、DirectSoundでも、MCFでも、プログラム上で制御は可能だが…。
237 :
ぽぷり:03/02/10 20:03 ID:6VC5i/Lt
>>235 HSPでは無理かな?
プログラム上の制御って、どんな項目で検索したらいいでしょうか?
>>237 >>235が十分なくらいキーワードだしてるよ。
MCI(MCFは間違いだよな?)、DirectSound、DirectShow
HSPはよく知らないが、
MCIはWindowsAPI、DirectSound、DirectShowはCOMが扱えれば大丈夫。
HSPがそれらを扱うのが難しい言語ならば、
他の人が作ったライブラリを使う手もある。
# HSPといえどもDLLぐらい使えるだろ?
242 :
235:03/02/11 00:32 ID:OEwInXkJ
MCFは間違い。
何やってんだ、俺。
保守sage
敵の弾で曲がるレーザー系のを作って見たいのですが、
雰囲気としては一度敵機の近くでゆっくり動き、目標に向かって
早い曲線を描こうと思っています。おそらくゆっくり部分と狙撃部分の
2つのルーチンを使用するかとおもいますが、問題が2つほどありまして、
1)曲線が目標位置によってイビツになる。
2)レーザー表現を座標引き渡しで20個ほど丸オブジェクトを使用
したので、処理が遅い。
何か良い方法はないのでしょうか?
245 :
名前は開発中のものです。:03/03/08 01:35 ID:AeESF41/
見た目だけクォータビューで、内部的にはトップビューなゲームを制作中なのですが、
座標を四十五度回転させてから上下半分に潰して表示している為に、見た目上上下の移動が遅く、左右の移動が早く見えてしまいます。
こういう場合、みなさんどうしていますか?
>>244 遅レスだけど。
1)
float f = atan2(目標とのyの差, 目標とのxの差) - (現在の進行方向);
while (f<-3.14) f += 3.14*2;
while (f>3.14) f -= 3.14*2;
(新たな進行方向) = (現在の進行方向) + f*(曲がり具合0.0〜1.0);
とかやってみる。符号とか間違ってるかも。
よく状況がわからないけど、変化量が急に変わらないようにすればいいんじゃないかな。
2)
直線で繋ぐとか。
>>245 画像にかけた、縮尺を移動量にもかける。
上下が左右の50%なんだろ?
じゃあ、移動量も50%でいいじゃん。
つーか、それ
クォータービュー風表示で、内部がトップビューって言うか?
一瞬意味が分らなかった。
あぼーん
249 :
245:03/03/08 03:30 ID:AeESF41/
>>247 お返事有り難う御座います。
内部でのベクトルも表示時には四十五度回転しているため、
それではうまくいかないのです……。
(内部的に下にすすめが表示上は左下に、右に進めば右下に進んでいるように見えます)
内部のマスは正方形ですが、表示時は菱形なので移動量がおかしくみえるということなのですが……。
>>249 その処理だと、クォータービューって言わないじゃん。
つまり、クォータービューって斜め見下ろし型でしょ?
君の言ってる移動処理は、トップビューでただ45度回転してるだけだよ。
それでは、描画と移動処理が噛合う訳が無いよ。
普通は、トップビューと同じ処理で、横長の菱形MAPchipやなんかを
用意してキャラをMAPchipより手前にずらして立たせて
完全2D処理で、擬似クォータービュー見たくするもんだが…
ベクトルとか言ってるなら、それは3D処理が必要。
つまり、菱形を潰して描画してるだけなのだろうが
それって普通に見た場合(3D視点)、奥行きがあって
斜めに見下ろしてるから左右は広く、手前と奥で縮まる訳だ。
君の言ってる事を解析すると、移動処理は2次元ベクトルを平面で45度回転しただけ。
MAPchip描画は上下に潰しただけ。しかし、そのMAPchipは見た目には奥行きがあって斜めに見た様に見える。
その噛み合わせが不自然って訳だ。当然かな。
解決策として、大道は移動ベクトルと描画用MAPchipに同じ3D処理をする。
もう一つは、その処理を止めて違う処理に変える。
そんな感じじゃない?
あぼーん
すべての方向に対して、同じ時間で移動できる場所に点を打ってその点を補完して線にする。
すると、君のプログラムでは、正方形が出来上がるわけだ。
ところが現実には円になることが期待される。
君のプログラムは、内部的には「円を正方形で近似している」んですよ。
そのまま表示すれば、移動方向によって速度に変化が生じるのは当たり前。
対策は、内部のプログラムを書き直して円を円として扱うようにするか、
あるいは円を八角形で近似するように書き直すか、
グラフィックを表示するときに縮尺を変えて正方形を円に近くなるようにごまかすか、
そんなものしか考えようがないでしょう。
253 :
252:03/03/08 04:12 ID:tiy6mV84
ごめん勘違い。
無視してください。
ん?やっぱさ247で言ってる通りでいいじゃんか。
君の描画処理って45度回転して上下に潰すっていてるよね?
その言ってる正方形ってのがMAPなんだろうが、
移動ベクトルにも同じ処理してないじゃん。
上下に潰すって事は、Y軸方向にスケールをかけてる訳だ。
そのY軸方向のスケールを、移動ベクトルにもかけてるか?
つまり、移動ベクトルはX成分はそのままで
Y成分が縮まる(上下に潰れる)ってやれば整合性が取れるじゃん。
…そうじゃ無いってなら言ってる意味がもう分らないよ…
画像が欲しいとこではある
256 :
245:03/03/08 09:51 ID:AeESF41/
>>250-255 真面目にレスいただき、ありがとうございます。
意味がわからない面も多々あり、申し訳ありません。
画像は用意したいと思うのですが、よかったらどうかお待ちください。
マップ自体は見た目上だけクォータービューで、
(画像は潰しておらず、べた表示です)
キャラクタの表示する座標だけを描画時にマップの端を軸に45度回転させて、
上下に半分潰すことでクォータービュー風(移動)にみせています。
要するに内部的に上に進めば
表示座標上は(45度/2の傾斜がついた)左上に進んでいることになるわけで、
内部のY軸方向のスケールと、
描画時のY軸方向のスケールは45度/2ずれているわけです。
なので内部的にY軸だけに補正をかけると、
描画時にはX成分にも影響を与える訳です。
勿論、内部的には円を近似した移動値で書かれているのですが、
その、円の移動値(−X-Y)〜(+X+Y)のスケールだけが
描画時には半分に潰されてしまっているわけなのです。
よって、内部的には正円ではなく、楕円に進む必要があるのか、と考えています。
すこし妙な感じがするのですが。
257 :
245:03/03/08 10:29 ID:AeESF41/
>>257 そりゃああた、パースを考慮に入れてないからっす。
普通の二次元画像を斜めにして単純に潰すと、絵としておかしくなる。
だから、その絵としておかしいMAPの上で正しくキャラを動かしても絵としてはおかしくなる。
この世には遠近法というものがあって、遠くのものは小さく、近くのものは大きく見えるのが世界の常識です。
実際には遠近法を考慮しなくてもそれなりに綺麗に見えるものなのですが、
奥行きが深い場合はちょっと不自然に見えます。
>>257 やっぱり247と254で言ってる通りじゃんよ。
で、君の言ってる事が意味が通って無い。
まず、最後に潰そうが何しても、移動量ベクトルの”大きさ”は
四方向で”同じ”だ。差なんて無いじゃん。
つまりベクトルで言うと
上(0, 1)
右(1, 0)
下(0, -1)
左(-1, 0)
が、45度回転して(-PI/4)
上(-0.7071, 0.7071)
右(0.7071, 0.7071)
下(0.7071, -0.7071)
左(-0.7071, -0.7071)
で最後にYにスケール(Y:1/2)をかけるても
上(-0.7071, 0.3535)
右(0.7071, 0.3535)
下(0.7071, -0.3535)
左(-0.7071, -0.3535)
って四方向は、”方向”が違うだけで”大きさ”は同じだが?
…ベクトルって言い出したのは、君の方なので
ベクトル自体は扱えるよな?
斜め上から正射影で見た状態やね
>>245 >見た目上上下の移動が遅く、左右の移動が早く見えてしまいます
上下と左右の見た目スケールが違うんだから、
そう見えてしかるべきなんでは?
見た目で同じスピードにすると、
実マップ上での移動速度がヘンになる(軸により偏りがでる)けど
それでいいのかな。
表示の座標から見て、「上下」と「左右」の移動に差が出るってことは、
内部の座標から見て、「上下左右」と「斜め」の移動に差がある。
…あってるのかわからんけど。
それなら、内部座標から見た「斜め」方向への移動を減らせばいい。
なんか、気持ち悪いけど。
リロードしたら
>>260と同じだった…
さらに読み返すと、楕円に進む と同じようなこと言ってる気もする。
262 :
245:03/03/08 11:54 ID:9W7WzJNL
皆様レス有り難うございます。
>>255 パースは一応理解しているのですが、
2Dとして不自然でないように取り入れるにはどうしたらいいのかと思いまして。
>>256様
そうですね、内部的なベクトルの大きさは同じです。
でも、見た目上の(プレイしている側からしてみれば)違っているように見えてしまいますよね。
これを正したいと思ったのです。
>>260、
>>261 そうですね、中身が移動量が異なると気持ち悪いと思います。
そして、見た目上も正しいと思うのですが
クォータビューなゲームで
上下と左右の移動量が違う(ように見える)と何だか変な感じを受けたりしませんか?
これをうまく解決したい、と思ったのですが……。
うまく言えなくてもうしわけないです。
うーん、画面がしっかり傾いているように見えれば、
ヘンには感じないと思う。そう印象付けるような画面構成にするといい。
車の後ろから見るレースゲームで、等間隔にオブジェクトを配置したり
等間隔に地面に模様をつけるのは、走ってるという感覚を引き出すための
基本テクニックだったりする。のっぺりしてると速度感が沸かないのよ。
クオータービューについてもそういう工夫があっていいんじゃないかなあ。
あぼーん
265 :
416 ◆quHoSW/FCI :03/03/08 16:20 ID:s3TXU6Pq
>>262 もしかして、トップビューで言うところの斜め移動をさせてない? トップの
上下左右はクォーターでは斜め45度だが、トップでの斜めはクォーターでは
真横とかになるよね。
移動がマス方式のクォータービューでは斜め移動はそう見える。A列車3、4で
列車が真横に移動するのと、斜めではえらく差があるように。
あぼーん
あぼーん
268 :
名前は開発中のものです。:03/03/13 14:53 ID:x1k2yze2
春休みとDirectX8を利用して、Ys3っぽいべたなアクションゲームを作ってます。
描画周りは一通り出来たのですが、ここで疑問が・・・
キャラが動いたときの描画なのですが、
既に配置済みの背景の中を、ビュー行列を変えて移動させるのと
ビュー行列据え置きで、キャラ周りの背景を移動するたびに配置換えする
一般にどちらが良いのでしょうか?
前者の方が簡単そうにみえ、今はそちらなのですが、
MatrixのFLOATで補えないくらい広いマップとかは、どうなるのかなどと考え出したら・・・。
お馬鹿な質問ですが、よろしければマジレスいただけると嬉しいです。
あぼーん
>>268 Ys3って横から見たような画面構成だっけ?
PC88やPC98はマップチップを組み合わせて画面を構成してたと思うけど、
(つまり後者)それほど難しくないよ。
271 :
名前は開発中のものです。:03/03/14 00:05 ID:1VLZD/pC
>>270 レスありがとうございます。やはり後者でしたか_| ̄|○
PC88やPC98ではと言うことですが、今はあまりこういう手法は用いないのでしょうか?
しかし、やはり効率的な描画方法っていうのは、今も昔も変わらなそうですね。
画面は仰るとおり、横から見たようなのです。
私はこれとリンクの冒険が大好きで・・・。どっちも一般にはアレですが・・・。
すいません、あげてしまった・・・。
スクリプト荒らし来ちゃうかな・・・。
>>271 GBとかのBG面があるゲーム機は今でもそんな感じ。
背景がモデルならば仕様次第な気もするけど、似たような事をやらなくも無い。
あぼーん
276 :
名無し募集中。。。:03/03/14 05:14 ID:fXoEalJM
1個だけでゲームの処理を担当。
もう一つで効果音などのサウンドを担当。
残りはすべてポリゴンの座標計算
あぼーん
あぼーん
1タスクに1個のプロセッサでいいんじゃないの?
280 :
名前は開発中のものです。:03/03/15 11:30 ID:dtuvcX+v
3角形のポリゴンと、直線の交差判定をするC++の関数を誰か作ってください。
bool func( Vector p1, Vector p2, Vector p3, Vector l1, Vector l2);
こんなかたちで、p1,p2,p3がポリゴンの頂点、l1,l2が直線の両端座標です。
Vectorは構造体かクラスで、x,y,zの座標を持っています。
交差してたらtrue、してなかったらfalseを返すというものです。
お願いします。
>>279 プロセッサ間の同期処理だけでほとんどのCPU時間が消費されそうな予感
並行処理できるならハナっからそういう単位で仕事をする
高速なプロセッサに分けてくれたほうがマシと思う
>>280 アルゴリズムを書いてくれたら、関数を書くよ。
できるだけ詳しく頼む。
282 :
名前は開発中のものです。:03/03/15 12:39 ID:FEgToVwJ
3Dの座標をスクリーンの座標(0-639,0-479)に対応させたいんですが
どうすればいいですか?
カメラを移動させて試行錯誤しておおまかには合ってきたのですが
どうしても左上が(0,0)、右下が(639,479)にビシっとあってくれません
>>282 はじめから2dスプライト使えばいいのでは・・・
DirectXでテクスチャ貼って使うなら
柔軟な頂点定義でトランスフォーム済み頂点を持つの定義して
ポリゴン2つ作って貼ればいいのでは?
>>284 >>285 ありがとうございますっ!!
2Dスプライトを3Dオブジェクトに置き換えたかったんです
説明不足スマソ
Cマガジン持ってたので解決できそうです
やりたいことがほぼそのまま載ってました
ありがとうございました
∧ ∧ ∧ ∧
/⌒~~~⌒\ ( ,,) (,,・Д・)
/ ( ゚>t≡ )y─┛~~ 〜(___ノ 〜(___ノ ,γ_
(_ ノγ U ∩_∩) THANK YOU 2ch ┌───────┐ \
α___J _J and (| ● ● | ヽ
/ ̄ ̄ ̄ ̄\ GOOD-BYE 2ch WORLD! /.| .┌▽▽▽▽┐ .|____|__||_| ))
/ ● ●、 ( ┤ .| | .|□━□ )
|Y Y \ またどこかで会おうね \. .└△△△△┘ .| J |)
|.| | .▼ | | \あ\ | ∀ ノ
| \/ _人|∧∧∩゛冫、 .∧_∧ | \り.\ . | - ′
| _/)/)/( ゚Д゚)/ ` . (´∀` )..ヽ(´ー`)ノ \が\ . | )
\ / 〔/\〕 U / ∩∩ ( ) (___) \と.\ .|/
| | | c(*・_・) | |ヽ(´ー`)ノ_| | | | |〜 /\.\う\| (-_-)
(__)_) UUUU /∪∪ (___)(_(__) ◎ ̄ ̄◎─┘ .└──┘.(∩∩)
>>287は2ch初心者?こんな古いAAどっから持ち出したんだ
あぼーん
>>288はゲ製作技術初心者?こんなAAにいまどき反応しだして
>>290 オレも全く同じ事思ったが、
スクリプト荒らしを擁護してるように思えたから、書き込みは控えてたよ( ´∀`)
クドリャみたいなブレードとショットを使うSTGつくってるんですが
ブレードの衝突判定がうまくできません。
普通に判定すると連続ヒットになるので
当たったキャラに無敵時間をつくったらショットがすり抜けてしまいました。
ブレード判定外へ敵をヒットバックさせれば解消できるんですが
それだとブレードコンボ(連続技)が表現できない…
仕方ないので最初に戻ってブレード攻撃力を低く設定し直したら
当たり方によってダメージがばらつく。
そして無限ループ…
漏れ…アフォでつか(´・ω・`)
> 無敵時間を
これをブレード?への判定無効フラグにすればいいんじゃなかろうか。
295 :
名前は開発中のものです。:03/03/16 16:18 ID:FATlrtEb
>>282 方法1)
D3DXSPRITEを使う。
方法2)
TLVertexを使う。D3DFVF_XYZRHWが含まれてる奴ね。
ヘルプに詳しく書いてあるから読んでみれ。
297 :
292:03/03/16 18:15 ID:uI5iL2i7
>293
即レスありがとうゴザイマス(´Д`;)ヾ
STGしかつくった事がなかったので
ブレード→自機を追従するレーザー、多段&複数ヒット
ショット→当たると消える、多段ヒットしない
としか認識してませんですた。
つーか…漏れアフォケテーイ(;´Д`)
>294
ブレードゲーって意外に多いんでつね。
ともかくソース公開に感謝!
ゲームの方はナゼかパッドが使えなかったです…
リプレイのやり方も知りたかったので解読してみまつ。
あぼーん
>>292 ブレードとショットで別々の無敵タイマーを持てば良いんじゃないの?
で、それぞれで無敵タイマーが無敵無効の状態の時のみ当たる事にして、
当たったら無敵タイマーセット。
(^\ /^)
─╂\_) (__/╂─ ┏━━━━━━┓
┃ illlli ┃ ┃ _THE END. _ ┃
┃ (・∀・ )/ † ┃⊆三三三三⊇┃
─╂╂ 」⌒l ''' つ」⌒l ‡== ┃|l※※※※※l|┃
┌╂/ ̄ ̄ヽ / ̄ ̄ヽ †]| ┃|l※※※※※l|┃
│┃|(・∀・) |l| (・∀・)|┃ ┃|l※※※※※l|┃
、ヾ`゛""'ソ' 。ノ'> ┣╋ヽ__/''ヽ__/┻┓ ┃|l※※※※※l|┃
ミ ,__/ ゚ノ>。゚ ヾ`゛゛""' ━━━━┛
=,(#・∀・) // ヽ__ 彡 _。。。。。。
'(\__ /フ/∈,) 、ヾ`゛"'ソ' (・∀・#)ミ ) _/`'’
\_)</ ミ ,_/ (\∪",、/ミ)
/( ,__ン\ =,(#・∀・)○┳ `◆-' </
(_)ヽ_ノ (_) ノ'(9 __ ヘつ┃ /((,,,) ,つ\
〉~ yヘ∩┃ (_)ヽ、ノ (_)
/ ̄ ̄ ̄/ヽ /ヘ ̄ ̄ ̄ヽ /ヘ ̄ ̄ ̄ヽ
|____|_/ _/|_\_|____| \_|____|
/\/\/\/ \/\/\/\/\/\/\/\
シュウリョウー!! オワッタラカエレ!!!カコイイ!! コノスレハブジニシュウリョウシマシター!!!!ジ・エンド!!!!
\/\/\/\/\/\/\/\/\/\/\/\/
攻撃中は複数の敵に当たるが、同じ敵には1度しかあたらない、
なんて仕様が来たことがあったな(なぎはらうっぽい動作で)
その時は、当たった敵をリストに追加して判定してたけど。
302 :
名前は開発中のものです。:03/03/25 01:44 ID:geV3sJ5n
303 :
追記:03/03/25 01:53 ID:geV3sJ5n
ホーミングレーザーの誘導の仕方とかではなく
アンチエイリアスがかったようにラインがとても綺麗な
ところをいってます。
304 :
名前は開発中のものです。:03/03/25 02:42 ID:aCstEDxO
トライアングルストリップはそのためにある。
あぼーん
ええっ!やだ、そんなエッチなこと・・・
一応いっとくとあるゲームってのは、
「らじおぞんで」というwindowsで動くフリーの2Dシューティングです。
通った位置を記憶したあとの、考えられる過程がしりたいです。
309 :
:03/03/25 13:21 ID:gZec8/NN
格闘ゲーム作ってみようかと思っているんですが、VRAMが640*480が一枚の場合、
AプレイヤーとBプレイヤーと背景で3等分しているんでしょうか?
それとも背景は若干小さくしているとか?
たとえば、SNKの格闘ゲームはどのような配分なんでしょうか?(ちょっと前の画廊とかサムスピとか)
僕が考えているのは320*320が2枚でAとBプレイヤーのキャラパターンを格納し、
残りの160*640に背景を置くという感じなんですが、キャラパターン用のスペースは出来るだけ多くとりたいし、
背景用はそれほどでもないので、。
あぼーん
___
. |(・∀・)|
. | ̄ ̄ ̄ ジサクジエン共和国
△
△l |
__△|_.田 |△_____
|__|__門_|__|_____|____
あぼーん
あぼーん
317 :
名前は開発中のものです。:03/03/25 22:14 ID:OH59+Xxk
格ゲーを作ろうとしています。
今、ユーザーが入力したキー情報を分析して、コマンド技のコマンドとして解釈させる
部分を考えているのですが、やって見るとコマンドの解析というのは結構奥が深い事
が分かってきました。
あれこれ考えてるうちにこんがらがってきたので、この辺のことをまとめてあるページ
とか無いでしょうか。コマンド入力なんて昔からありますし、何か定石があるんじゃない
かと思っているのですが・・・
319 :
名前は開発中のものです。:03/03/25 22:45 ID:OH59+Xxk
>>318 レスどうもです。
もうちょっと詳しく書いてある奴無いでしょうか。これくらいなら思いつくんですけど、
例えば
↓\→(PK)
みたいに、コマンド中に同時押しが有った場合とか、同時押し判定とコマンド判定を上手くやる
必要がありますよね・・
実は今、全部の技をコマンド技として扱うようにしようとしています。小パンチは、Pだけで出る
コマンド技、しゃがみキックは下レバー入れながらKで出るコマンド技、という扱いにしてしまお
うかと。
そうすると、単に連続して押されたデータを解釈するだけじゃなくて、「レバー入れながら」とか
を考える必要が出てきますよね
あと、Pで小パンチ、Kで小キック、PK同時押しで強攻撃だとします。
小パンチは出が早い技なので、Pを押した瞬間にパンチモーションに入ります。
ですが、同時押し判定許容時間内にKが押されたら、パンチモーションをキャンセルして
強攻撃に移る必要があったりしますよね。
こういう事を色々考えてるとウワーッワカンネエエってなってきてしまいます・・・
「マンド入力総まとめ」みたいな都合のいいページがあれば嬉しいのです!
あぼーん
うーん、統一された手法とか、定石というのはまだ確立されていないんじゃないかな?
個々のプログラマが実現したい現象を元に自分なりにプログラムを書いている状態。
私だったら、コマンドのデータ列をあらかじめ配列か何かの形で作って、
コマンドの進み具合を示すポインタをコマンドの種類ごとに一つ定め、
ポインタの次の動作に該当したらポインタを進めて、該当しなければポインタを初期位置に戻す、
という方法で実装するなぁ。
318が提案するような比較に比べると判定が少し早そうなんだよね。
322 :
名前は開発中のものです。:03/03/25 23:32 ID:AfPryGzZ
単位時間ごとにキー入力を更新。更新古いものから削除。
で、配列二次元とかで二つつくって
単位時間
123456789十・・・
キー配列
↑→→→→→↓\→→・・・
ボタン配列
無無P無無無無無P無・・・
ってやったらどうでしょ
んで、技チェックはボタンが押された瞬間から。
なんとなくボタンとキー同時押しができそうな気がするんですが。
323 :
322:03/03/25 23:34 ID:AfPryGzZ
すんません。
P以外にも各ボタン用の配列が必要でした。
324 :
322:03/03/25 23:45 ID:AfPryGzZ
そんで各配列を16ビット(アンサイン型)の各要素に割り当てて
例・単位時間7秒のデータ
上位8ビット …↓ = 0100000 (ビット対応キー最上位が↑、以下↓←→\・・・)
次8ビット で…無 = 1000000 (ビット対応キー最上位(9ビット目が無、以下PK・・)
(ボタンの場合、同時押しになると01100000 とかで判断。無が立って無い&P&K&立ってない・・・)
こういう変換をすると
16ビットデータ配列
[0]10000000 10000000 もちろん出力は10進で可能。
[1]00010000 10000000
[2]00010000 01000000
[3]・・・・・ みたいなのが出来あがって・・・
・・・・・
各キャラの技表データもバイナリで定義しておけば。
同時押しもできる気がさらにします。
あぼーん
326 :
名前は開発中のものです。:03/03/26 09:03 ID:NtlD3GhA
>>321 レスどうもです!
>うーん、統一された手法とか、定石というのはまだ確立されていないんじゃないかな?
そうなんですか。。ストリートファイターの時代からある物ですから、何か一般的なやり方
があるのかと思ってたんですけど、そうでも無いんですね。
提示いただいた方法も、参考にさせていただきます、ありがとうございます。
>>322 なるほど、それぞれのキー動作を別々にキューイングするやり方ですか・・・なんか新しい
考え方ですね。
>>324 ははあ、なるほど、これなら確かに同時押しが定義できますね・・・
しかも少ないメモリで安上がり。いいですねえ、、、参考にさせていただきます。
327 :
名前は開発中のものです。:03/03/26 09:04 ID:NtlD3GhA
今思いついたんですが、あらかじめ作っておくコマンドテーブル(↓\→(PK)みたいなの)
に、連続ボタン入力間の許容時間もセットで持っておくというのはどうでしょうか。つまり、
同時押しは、「非常に短い時間で入力する必要のある連続ボタン入力」と扱うわけです。
こんな風にテーブルを持っておきます
↓(10フレ)\(10フレ)→(10フレ)P(3フレ)K(10フレ)
PとKが逆に入力されるかもしれませんから、入れ替えたテーブルも持っておくのです
↓(10フレ)\(10フレ)→(10フレ)K(3フレ)P(10フレ)
また、通常のしゃがみパンチは許容時間を非常に長く設定しておいて
↓(0x7FFFFFFFフレ)P(10フレ)
こうすれば「下押しながらPでしゃがみパンチ」がコマンド技として定義できるんじゃない
ですかね!?
あぼーん
329 :
名前は開発中のものです:03/03/26 13:47 ID:nm8sE5JY
この板のおかげで嵐に不感症になりました。
あぼーん
321見たいにコマンド別にインデックスを進める方法で同時押しできてるよ。
非同時押しと似た入力のコマンドがあるなら、コマンドの優先順位を決めるだけかと。
まあどっちにしろ、318ので十分できるわけだが。
# なにがわからないのだろう
>非同時押しと似た入力のコマンド
同時押しと似た入力のコマンド
オートマトン?
336 :
名前は開発中のものです。:03/03/28 02:58 ID:q0sPFLKX
>非同時押しと似た入力のコマンドがあるなら、コマンドの優先順位を決めるだけかと。
コマンドの解釈だけならそれでいけるけど、一旦確定して発動しかかってる技を
キャンセルして別の技に移行するのがプログラム的に複雑。
例としては、↓\→+P(波動拳)と、↓\→+PK(EX波動拳)など。
安直な解決法としては、同時押し入力の猶予期間中はコマンドの確定を先送りするとかか。
あぼーん
>>336 理解した。
321の方法だとキャンセル可能だな。
339 :
名前は開発中のものです。:03/03/28 19:59 ID:eMBHUQuF
>>336 > 安直な解決法としては、同時押し入力の猶予期間中はコマンドの確定を先送りするとかか。
これやってるのがKOFシリーズだったと思う。今もそうかはしらないけど。
全ての技に同時押し判定の猶予期間を設けてあるので
小パンチであっても、ボタンを押したと同時に出るわけではない。
この方法だと微妙にレスポンス悪く感じると思う。
カプコンゲーだと、同時押し確定前の技をキャンセルする形で出る。
例えば移動を伴う技と、同時押しの技を組み合わせると、
微妙に前に進んでから同時押し技が出ることになる。
スト3サードだとこれは戦略に組み込まれるくらい重要なテクニックらしいね。
あぼーん
そういやガンダムのはどうなったんだ?
あぼーん
344 :
aaa:03/03/31 18:37 ID:XAKZeAF5
禿しくワラタ
あぼーん
つか、オートマトンという数学的にも確立されたアルゴリズムがあるじゃないか?
まあ、上のほうにも挙がっているが・・・
◆宇宙戦艦ヤマト■ヤマト・オンライン製作2■
宇宙戦艦ヤマトの≪世界観≫で、無料オンライン・リアルタイムシミュレーションゲーム製作を進行
http://game3.2ch.net/test/read.cgi/netgame/1049216232/7-8n まだ仕様を練る段階なのですが、ヒマがあったら覗いて見て下さい
公式サイト
http://members.goo.ne.jp/home/yamato-r メール
[email protected] 「Winny方式:相互サーバー化システムによるネットゲー製作に挑戦。ご意見募集中」
「無料ソフト プログラマへの報酬を捻出する手段(ソフト内に広告等)を、ご意見募集中」
パッチ(付加変更プログラム)を充てて様々な作品世界を反映させると、
商用ソフトでの販売が可能なほどの完成度を目指します。
「銀河戦国群雄伝ライ」「戦国自衛隊」「聖戦士ダンバイン」「装甲騎兵ボトムズ」「宇宙戦艦ヤマト」
「信長」「太平洋戦争」「第二次世界大戦ドイツ」「ガンダム」「スターウォーズ」「機甲創生モスピーダ」
「マクロス」「銀河英雄伝説」「戦闘メカ・ザブングル」「エルガイム」「太陽の牙ダグラム」
「ハーメルンのバイオリン弾き」「スタートレック」
これらの作品パッチも合うかも!(パッチは著作権者の許可を取り各自で自作して下さい)
∧ ∧ ∧ ∧
/⌒~~~⌒\ ( ,,) (,,・Д・)
/ ( ゚>t≡ )y─┛~~ 〜(___ノ 〜(___ノ ,γ_
(_ ノγ U ∩_∩) THANK YOU 2ch ┌───────┐ \
α___J _J and (| ● ● | ヽ
/ ̄ ̄ ̄ ̄\ GOOD-BYE 2ch WORLD! /.| .┌▽▽▽▽┐ .|____|__||_| ))
/ ● ●、 ( ┤ .| | .|□━□ )
|Y Y \ またどこかで会おうね \. .└△△△△┘ .| J |)
|.| | .▼ | | \あ\ | ∀ ノ
| \/ _人|∧∧∩゛冫、 .∧_∧ | \り.\ . | - ′
| _/)/)/( ゚Д゚)/ ` . (´∀` )..ヽ(´ー`)ノ \が\ . | )
\ / 〔/\〕 U / ∩∩ ( ) (___) \と.\ .|/
| | | c(*・_・) | |ヽ(´ー`)ノ_| | | | |〜 /\.\う\| (-_-)
(__)_) UUUU /∪∪ (___)(_(__) ◎ ̄ ̄◎─┘ .└──┘.(∩∩)
勘違いしてるようだが、MMORPGは複合式P2Pだぞ。
___. ∩゛ ∧空∧ ((( ))) /\
/. ――┤. -=・=- -=・=- | | ∧ ∧{´ ◎ `}____( ´∀`)\ う \
./(. = ,= | ∧∧ ∧_∧ | | ( ´ー`) ):::/´∀` ;:::: \ヽ(`Д´)ノ゛\ ま\
|||\┏┓/∫ (=゚ω゚)ノ~ ( ´Д`)// \ < .∧|∧ /::::::::::| .¶_¶. \い\
V/ ∧,,∧ ∬ 〜( x) / / ,一-、(´ー`) /:::::|::::::| (ΦдΦ)/~ \棒\
|| ミ,,゚Д゚ノ,っ━~~ U U / /| / / ̄ l⊂ヽ \/|:::::::::|::::::| γ__ ∧w∧ 旦∬
人 ミ ,,, ~,,,ノ .n THANK YOU 2ch ■■-っ ┌───────┐ \ ( ゚Д゚ )∩゛
( ゚ー゚)と..ミ,,,/~),ヽ(凸)ノ~ and.. ´∀`/. | ● ● | ヽ ノ
/ ̄ ̄し'J\[Y] GOOD-BYE 2ch WORLD! /| .┌▽▽▽▽┐. |____|__||_| ))
/ ● ●、ヽ (. ┤ .| |. |□━□ ) (゚Д゚)?
|Y Y \ またどこかで会おうね.. \. └△△△△┘. | J |)∧_∧
|.| | .▼ |∀゚) |\あ\ | ∀ ノ " , 、 ミ
| \ /■\ _人 |∧∧∩゛∧_∧∩゛∧_∧ | \り.\ | - Å′ ゝ∀ く
| ( ´∀`)___/( ゚Д゚.)'/ ( ´∀` )/ (・∀・ ),. |. \が\. | ). \ Λ_Λ
\ ( O ) 冫、 U / ( / ⊂ ⊂.)ヽ(´ー`)ノ゛ \と.. ∧_∧/(´Д`;)<丶`∀´>
|││ │ ` | | ∪ | | ( ( ( ( へ (゚д゚)〜⌒(゚ー゚*) (-_-) (・ω・` )
(_(__(__)(・∀・) ∪~∪ (_(__) (_(_) く ⊂⌒~⊃。Д。)⊃⊃⊃(∩∩)(∩ ∩)
複合式P2Pって何?
というか、MMORPGはもろC/Sだと思うんだが…
Hybrid P2Pの事。
中央集権型+分散型。
無論、旧来のC/S型もあるんだが。
Hybrid P2Pで作られてるMMORPGの主なやつとか教えて欲しいです。
いつの間にか俺の知らない世界に突入してたのかな。
最近のMMORPGはポートあけなきゃいけないのが普通?
オレも
>>349の自信の根拠を知りたい…
少なくとも主なヤツにはない気がするが
今のトコMMOはほぼ全てC/S型でそ。
マッチアップ機能を持ったMOの場合マッチアップ鯖とはC/S、ゲームはP2Pってことで
ハイブリッドともいえなくもない。
Diabro2(BattleNet接続)やPSOはチート防止用のアイテム管理機能みたいなのもあるから
単純なマッチアップよりは高度なことをしてますね。
もちろんDiablo2もPSOもMMOではなくてMOですが。
356 :
355:03/04/23 17:25 ID:10QNqlCX
あと、オイラの作成中のMMOは
ボイスチャット(オプション)だけP2Pなので
ハイブリッドともいえなくもない...
ヒヨコ戦艦が「凄腕のプログラマがいて、P2Pで30人リアルタイムバトル可能だ」
みたいな事言ってたのはどうなったんだろう。
凄く興味があったんだけど、
スレはDAT落ちしてるわ公式ページはただのヤマトオタページになってるわ・・・
DLLって、ただでも作れますか?
360 :
さいたま:03/07/29 22:33 ID:JsIf0Yyf
さすがは俺だ。
いろいろなミニゲームを詰め込んだ、
たると・わーるどというゲームを完成させたぞ。
まあバグはそれなりにあるわけだが、
まずはゲームとしての形が出来上がったということで、俺的には満足。
んまあ、デバッグはしなきゃな。
せっせとバグフィックスも。
漏前らも頑張れ!
だれ?
362 :
名前は開発中のものです。:03/07/30 18:56 ID:C9H8Oh+V
三角関数をテーブルにして利用しようとしているんですけど
いろいろな解説ページを見て思ったんですけど
一周を256,512,1024・・・などに分割するのは分かるんですけど
そのときに SinTbl[256 + 64]などのように
+90度分するのはなぜですか?
Cosを求めているのでは?
符号が反転するけど、Yが上向きの数学的な座標軸から、Yが下向きの
スクリーン座標軸への変換も同時に行っているのかもしれない。
cos(θ) = sin(θ+π/2)
>>363 cosは、sinの90度ずれたものなのでそうしておけば、sin、cos両方で兼用できる。
これじゃ364と同じ説明だな、スマソ。
367 :
名前は開発中のものです。:03/08/02 20:00 ID:iv+RaiJ0
☆ ☆ ☆
http://www.gals-cafe.com ☆ ☆ ☆
りさちゃんですっ☆みんな元気ぃ?夏だねっ!
あたしね、今アメリカにいるんだけど、、、えへっ(*>▽<*)
アナタに逢いたくて、こんなバイト始めちゃったヨ♪
りさに逢いに来てくれたら、7日間も会費無料サービスしちゃうし、
さらにさらに10分間も無料なんだよ! Σ(@o@)!!
アナタにだけの特別大っサービス♪絶対来てね!
二人っきりでたっくさん楽しいことしようよ♪まってるよ(^.^)/
☆ ☆ ☆
http://www.gals-cafe.com ☆ ☆ ☆
368 :
安全地帯:03/08/02 21:26 ID:/+zTW8yh
他板から誘導されてきますた。そのままコピペです
3DアクションのFPSでMOなものをいつか作りたいです
鯖を選んで、ログインして、森や町の中で索敵して
狙って撃つ。て感じのです
出来ればブラウザで開くだけで、専用クラをインストをせずに
OSに関係無く気軽に始められるものがいいです
3Dがそれなりに使えて、OSに依存しないで
鯖に接続あたりが充実してるプログラム。何を覚えるべきでしょう?
分かってる範囲で。Java(アプレット
)、少し遅い。機種依存がけっこうある。
3Dは出来ないことはないけど、大変らしい。
ShockWave、3Dゲム作ってる人多いので有力候補?
プラグインが入ってれば環境依存すくなそう
C++、ふつーのプログラミングなら有利だけど、
自分の目的では、OS別にクラをリリースしないとダメ
で、何がお勧めなんでしょうか?
>>369 色々な意味で無理ですからあきらめなさい
山に登ったことのない人間が、エベレストへの登り方を尋ねているようなものだ。
それは別にいいじゃねえか
登るor登れる気満々なのが問題。
>>369 >出来ればブラウザで開くだけで、専用クラをインストをせずに
ここさえなければそれなりに現実的なので
トレードオフというやつを考えて
逆にそこを外せないなら
>3Dがそれなりに使えて(略)鯖に接続あたりが充実してる
というのが非現実的になってくる
それと3DゲームでOSに依存しないというのはほぼ無理
そもそも3D描画の手段が用意されて無いOSもあるわけで
自分でOpenGLドライバとか組めるほどの技術がなきゃ無理
更にWin/Linux互換までは簡単だが
Macintosh互換までいくとまた難しい
>>374 サンクスコ
おとなしくWinで作れってことですね
手近な山(丘)からゆっくり登っていきまつ
>374
ブラウザって縛りがなければSDLでない?
win,linux,mac,beOS
3DはOpenGLに対応してる
非対応hardならsoft側で処理してくれるとか
net関係のライブラリもあるし
なによりタダ
道具揃えたところで登れるわけじゃない罠
本格的にMMOとか作るならSDL+Delphi+C++、
お手軽なミニゲーム作るならJavaでアプレットってとこかな?
JavaってJDK1.4になってからとんでもなく画面更新が早くなって
2Dのゲーム動かすならJAVAで十分だとおもうんだけどどう思いますか?
379 :
名前は開発中のものです。:03/08/09 12:15 ID:1QmqaJBe
実際に本職のゲームプログラマーになりたいんですが最初に学ぶ言語はどれが良いんですか?
フリーのソフトはありますが解説が少ないので…
プログラムの学習用はVB.NETとVC++.NETのどちらが良いですか?
>>379 言語はC。理由はこれを使ってないところはまずないから。
んなわけで学習用にはVC++.NET。
>>380 ありがとうございます、買う決心がつきました。
買って来ます。
382 :
_:03/08/09 13:13 ID:S+GKUahg
質問です。
VC#.NetでIPを使った1対1の簡単なチャットのようなものを作る場合、
どのような方法を使えばいいですか?
IPでの双方向リンクの仕方が全く分からなくて参考書も探したのですが、
あるのはWebアプリの作り方ばっかりで…どなたか教えて頂けませんか
あるいはそのことが乗っている本を紹介して頂けませんか?
ゲ製板なので板違いかも知れませんが、
IPチャットが可能であれば1対1のネットゲームも作れるかもしれないと思いまして…
すいませんです
385 :
名前は開発中のものです。:03/08/09 20:44 ID:44BF5mIM
PCゲームってのはコア層がやるもんだよ。
過去の現象見ても、事務機としての普及が第一だろうね。
はっきり言ってLinux/UNIXは汎用的な事務機としてはロクなもんじゃない。
基本的に計算機の玄人が使うようにできてるからな。
事務屋にゃ扱える代物じゃねーんだよ。
ただ、つけいる隙はあると思うね。
Linux/UNIXはUIの取り換えがきくから、専用機として作り込むのにはWindows
なんかより断然いいだろう。
そこらへんのじじばばが何気に街角で触ってる機械が実は誰も知らないけど
Linuxでしたなんて現象はこれからどんどん増えるだろうね。
事務機としてもマルチウィンドウが必要なところってのは実はあんまり無い。
その証拠にほとんどのWindowsユーザはアプリケーションを最大化して使って
るじゃない。
Xなんか使わなくてもDOS時代のUIを思い出せば充分使えるものになるだろうね。
むしろその方が混乱が無いだろう。アクティブウィンドウが切り替わっただけ
で「パソコン壊れたー!」ってパニック起こす連中を嫌と言うほど見て来た。
パソコンとしてもそれに適したUIが出て来れば使う人はいるだろうね。
そのへん頑張ってるのがKDEやGnomeだが、こっちはさほど利点が無いから難し
いな。
NECや富士通が気合い入れて自社UIを作って出しゃいいんだがな。KDEやGnome
ベースでもいいからさ。
???
誤爆?
>>383 このあたり?
Microsoft.DirectX.DirectPlay
System.Net.Sockets.TcpClient
System.Net.Sockets.TcpListener
System.Net.Sockets.UdpClient
388 :
山崎 渉:03/08/15 08:02 ID:IMRBSWHe
(⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
atan2用のテーブルの作り方がわかりません(涙
cos,sinは角度を使って作ればいいのはわかるんですが、
atanの添え字って一体何を基準に用意しているんでしょうか?
tanの逆関数なのでsin/cos(?)と思っても、
どんな範囲で値を用意すればいいのか。
ここを参考にしてるのですが、
ttp://www.sun-inet.or.jp/~yaneurao/intensive/tips2.html 肝心のテーブルが作れないのです。
0〜1までの範囲で自分の好きな少数で
<math.h>のatan()から求めて256段階に
スケーリングすればいいだけでしょうか?
頭が悪いのは重々承知しておりますので、
何卒ヒントを(;´Д`)
>0〜1までの範囲で自分の好きな少数で
すみません好きとか関係ないですね。
0〜1までの256段階の少数(float 0/255〜255/255)で、
という意味で受け取ってください。
まず、0度〜45度の範囲に限定してテーブル化してみるべし。
この範囲ではθとtan(θ)はほぼ比例関係にあるから、単純な補間ですむ。
残りの角度についてはこのテーブルの参照方法を工夫するだけ。
>>387 そうそれそれ!
そのネットソケットに関する、なにか参考書ないですか?
393 :
名前は開発中のものです。:03/11/08 21:38 ID:eeIVVo6R
質問です。
timeGetTimeの返す値って、PC起動してから時間が立つほど不正確になるもんなんですか?
Cで音ゲーを作っていて、メッセージループはポーリングにしてます。
で、降ってくるモノとかの移動距離を
「(今のtimeGetTime()の値 - 前回ループ時のtimeGetTimeの値)/1000*1秒間に移動したい距離」
のようにして算出しているのですが、
PC起動してから長時間たっていると、動きがガクガクするのです。
ポーリングの場合の移動量の算出方法って、↑以外にもあるんでしょうか?
>timeGetTimeの返す値って、PC起動してから時間が立つほど不正確になるもんなんですか?
そんなことはないはず。
>ガクガク
それって、PC立ち上げて全く何もせずに(触らずに)しばらく置いておいて、
ゲームを立ち上げると、「最初か」らガクガクしてしまうってこと?
>>394 いえ、PCを立ち上げてから何をしていたかは関係なさそうです。
現に今、PC起動後20時間半たってますが、そのexeを起動するとやっぱりガクガクします。
PC再起動すると、スムーズに降ってくるんですよ。ちょっと念のため確認すます。
本当にtimeGetTime()が原因なの?
描画が遅くなってるとか無い?
たとえば、ハードウェアで描画してたものが、(リソースが足りなくて?)ソフトウェア
エミュレーションになってしまっているとか。
変なこと言ってしまった…。
>>395を言い直し。
現に今、PC起動後20時間半たっていて、janeとかメディアプレーヤーとか、いろいろ操作をしていて、
起動してもガクガクです。 と言いたかった。
で、新たに気が付いたことがあるんですが、
ガクガクの時に、起動していた他のアプリ(msnメッセンジャー、覚え書、UD)をいろいろ落としてから、
自分の作ったゲームを起動してみたんです。
するとガクガクがひどくなり、降ってくる一方のはずのオブジェが、逆行する始末。
振ってきたり上がったりしながら、徐々に落ちてくる感じになりました。
そして今再起動したんですが、よく見ると完全にスムーズじゃないです。
体感で、300ms毎くらいに少し「カクッ」とします。
ちなみにwin2000です。
>>396 あくまで今の知識で考えうる範囲から、timeGetTimeのせいなのかなーと思っただけです。
原因がどこにあるかまだはっきりとはわからず。
なんかありえないなぁ。
逆行したってことは、timeGetTime()の値が逆行したってことだよね?
>>393の計算方式なら。
とりあえず、timeGetTime()のログでも取っておいて本当に逆行してるのかを確かめたほうがいいね。
(違うところが原因のような気がするけど…)
>ポーリングの場合の移動量の算出方法って、↑以外にもあるんでしょうか?
1秒あたりの画面更新回数を一定に保って(60回とか)、
毎回「1秒間に移動したい距離/更新回数」を座標に足すという方法。
というか、こっちのほうが一般的。
399 :
393:03/11/08 23:10 ID:eeIVVo6R
今、
timeGetTime()の値が前回と同じなら"a"を、
値がければ改行とその値をログに出すようにしたところ、
tgt=[3113327.000000]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
tgt=[3113343.000000]aaaaaaaaaaaaaaaaaaaaa
tgt=[3113390.000000]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
tgt=[3113405.000000]aaaaaaaaaaaaaaaaaaaaa
tgt=[3113421.000000]aaaaaaaaaaaaaaaaaaa
tgt=[3113437.000000]aaaaaaaaaaaaaaaaaaaaaaa
tgt=[3113452.000000]aaaaaaaaaaaaaaaaaaaaa
tgt=[3113468.000000]aaaaaaaaaaaaaaaaaaaaa
tgt=[3113483.000000]aaaaaaaaaaaaaaaaaa
tgt=[3113515.000000]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
tgt=[3113530.000000]aaaaaaaaaaaaaaaaaaaaa
こんな感じでした。そんなに頑張って回っていてくれたとは。
たまに長いところでカクッときてるのかなぁ…。
>>398 >1秒あたりの画面更新回数を一定に保って(60回とか)、
>毎回「1秒間に移動したい距離/更新回数」を座標に足すという方法。
その方法にしたいのですが、参考リンクとか教えていただけるとありがたいです…。
ぐぐってみたのですがいまいちうまく見つからず。
>393
ム板からこんにちわ
とりあえず
>「(今のtimeGetTime()の値 - 前回ループ時のtimeGetTimeの値)/1000*1秒間に移動したい距離」
このあたりの完全なソースを晒すべし。
ひとつだけ言えるのは、直線を移動するだけなら
「ある時間(今-前)で移動する距離」を加算していくより、
絶対時刻(今-基準時間)から位置を計算した方が誤差が少ないかと。
あと個人的には、そもそも音ゲーなら、
表示位置はサウンドデータの再生位置を取得した方が正しいように思える。
再生位置取得関数の精度がどうなのかと言う問題もあるけど。
>>399 あー。
CPU使用率100%だからうまくカウントできないんだろうか。
メインループのどこかでSleep(1)とか入れとくともう少しスムーズになるかも。
応急処置的な対処法だけど。
あと、フレームレート固定の方は、いいページ知らないのでURL提供は出来ない。
基本的には、1回の描画が早く終わりすぎたなら、その分Sleepするってことなんだけど…
位置の出し方は、
>>400の方法のほうがいいと思う。
402 :
393:03/11/09 11:53 ID:WRV9yPc0
一応、表示してるところも晒しておきます。これだけあれば十分でしょうか。
//座標コントロール関数の一部
fTgt = (float)timeGetTime(); //今の時間を取得
fFrame = (fTgt - g_fOldTime) / (float)1000;
if(g_fOldTime==fTgt){ //前回と同じなら処理しない
DBGP("a",0,0); // マクロ。
>>399のログ
return 1;
}
g_fOldTime = fTgt; //今の時間を前回時間として保存
DBGP("\ntgt=[%f]",fTgt,0);
for(j=0; j<MAX_LINE; j++){
for(i=g_stLine[j].iMin; i!=g_stLine[j].iMax; bmdjMaxpp(&i)){
// g_iBpmとg_iHispeedは必ず1以上
g_stLine[j].stObj[i].fY += g_iBpm*g_iHispeed*fFrame;
}
}
//表示関数の一部
for(j=0; j<9; j++){
for(i=g_stLine[j].iMin; i!=g_stLine[j].iMax; bmdjMaxpp(&i)){
//g_hdcOffはオフスクリーン
BitBlt(g_hdcOff, (int)g_stLine[j].stObj[i].fX, (int)g_stLine[j].stObj[i].fY,
iObjeW[g_stLine[j].iGazouSyurui], BMP_RECT_OBJE_H, hmdc,
iObjeWs[g_stLine[j].iGazouSyurui], 0, SRCCOPY);
}
}
>>401 sleep(1)入れると、描画が1秒毎になっちゃうんですけど…。
コンパイラがおかしい?
403 :
393:03/11/09 12:25 ID:WRV9yPc0
現在、起動後13時間ほどたっているがカクカク具合は起動時と大してかわらず…。
UD起動してなかったのが関係ありそう。
>>400 わざわざム板からありがとうございます。
>絶対時刻(今-基準時間)から位置を計算した方が誤差が少ないかと。
やってみます。オブジェを最初に表示したとこを基準にするか。
>表示位置はサウンドデータの再生位置を取得した方が正しいように思える。
いまいち意味がわからないんですが…。
いまのところ、譜面データとしては1小節毎に文字列(可変)を持ち、
その文字数がその小節の最大分解能で、1ならオブジェ有り、0ならオブジェなし。
例えば"10101011"だったら4分・4分・4分・8分・8分("ドンドンドンドド")といった感じです。
で、例えばBPM120(1分間に4分が120個来るスピード)なら、
1小節の長さ(2000ms) / 文字数(上の例なら8) = 250ms
250msごとに、オブジェを降らすかどうか判定する、と。
>>401 sleepじゃなくてSleepでした。おかしいと思った。
CPU使用率は4%になりましたが、やっぱりカクカクします。
フレームレート固定方法、自分で考えるand調べてみます…。
>402
>fTgt = (float)timeGetTime();
ポカーン
ものですな。
DWORDのまま計算しなさい。
>コンパイラがおかしい?
環境のせいにするのは、ギリギリまで頑張った者のみが許される事です。
限界まで自分を疑うべし。
float型で表現できるのは、±10-38〜1038の範囲で、有効桁は7桁です。
double型では、±10-308〜10308の範囲で、有効桁は15桁です。
406 :
393:03/11/09 13:23 ID:WRV9yPc0
>>404 最終的に座標(floatで持っている)の計算に使うから、最初からfloatにしてしまっていました。
ソース見直して、timeGetTime関係はすべてDROWDに直し、float使うのは座標の計算のときだけにして、
Sleep(1)もいれると、カクカクがだいぶ改善されました(完全になくなってはいない。)
>環境のせい
おっしゃるとおりです…。まだまだヘボプログラマーだなぁ。
sleepとSleepがあるとは知りませんでしたよ。
>>405 わざわざありがとうございます。
現在3DRPG風のマップを歩き回るプログラムを作るために、それ専用の3Dマップのデータ形式を吐ける
マップエディターを作ろうとしているんですが、いきなり行き詰まってしまいました。
3Dのマップってどういう風な形式にすればいいのでしょうか?
2Dではマップチップを用意してマップデータファイルから、必要な範囲(画面の範囲)だけを抜き出して
それを並べるだけでしたが、3Dの場合どうしたらいいのか思いつきません。
検索しても解説しているページを見つけられず、困っています。
まず、無い知恵を必死に絞って考えたのが、マップデータを、
固定物マップ(地面、建物、動かせない机・椅子)
準固定物マップ(動かせる机・椅子、アイテム)
自動物マップ(生き物、風車)
の三つにわけて、
固定物マップを2Dのようなマス目方式で主人公の座標をマス目と普通の座標で管理し、
普通の座標でマス目一個分進むごとにマップチップを読み込む方式に。
準固定物・自動物マップをマス目で管理しない方式に。
とここまで考えて主人公が視点を回したときのマス目の読み込みをどうするのか、
準固定物・自動物マップをマス目で管理しないとすればどういう方式にしたらいいのか、
など分からないことだらけになってしまいました。
どなたか解決法、もしくは基本的な3Dマップの構成を知っておられましたら
ご教示ください。
ああ、なんだかとんちんかんなことを書いてしまったかも・・・。
>>407 マップだろうがobjectだろうが自分で使ってる形式でいいじゃんよ。
モデルデータと配置(シーン)データを混同してる。
カメラのカリング描画と配置(データ)を混同してる。
ポータルシステム、オクトツリーなんかで検索でもしてみれば。
つーか、そのレベルじゃ自分でtool作って3Dは無理じゃない?
409 :
名前は開発中のものです。:03/11/15 00:36 ID:0SKvPsYa
キーの押し離しがイベントで飛んでくる処理系があります。
(具体的にはLinuxの/dev/input/js0)
こういう環境での同時押し検出(誤差の単独押しは無視)する際の定石などあるのでしょうか?
現在は下のようにしていますが、100000usecでは早すぎて1重押しを検出。
150000usecでは遅すぎて使えないという悲しい状態になっています。
int main(int argc,char *argv[]){
fd = open("/dev/input/js0",O_RDONLY);
ioctl(fd,JSIOCGBUTTONS,&buttons);
while(true){
FD_ZERO(&fds);
FD_SET(fd,&fds);
tim.tv_usec = 100000;
tim.tv_sec = 0;
if(select(fd + 1,&fds,NULL,NULL,timeout)){
read(fd,&js,sizeof(js));
if(js.type == 1){
button[js.number] = js.value;
timeout = &tim;
}
}else{ for(int i = 0;i < buttons;i++){
printf("button%d:%d ",i,button[i]);
}
printf("\n"); fflush(stdout); timeout = NULL;
}
}
return 0;
}
C++初心者ですが・・・RPGのモンスターのステータスの初期化の仕方を教えてください。
HP,攻撃力、防御力、素早さ、exp、お金・・・
どうか皆様お願いいたします
>>410 struct Teki
{
char name[17];int hp;
int atc;int def;int spd;
int exp;int money;
};
Teki teki[3]=
{
{"スライム",8,8,4,6,1,2},
{"ドラキー",10,10,5,6,2,3},
{"ドラゴン",50,80,50,30,200,100},
};
>>409 たとえばABボタン同時押しで発動するアクションがあって、Aボタンが押されその直後に
Bボタンが押されてもABボタンアクションが発動されてほしいってことかな?
(そして現状は↑の場合だとAのアクションが発動してしまうと。)
単純に、Aアクション発動中でもABが押されたらAアクションをキャンセルして、
ABアクションに移行してしまう、でいいんじゃない?
キャンセルの仕方は作ってるプログラムによるので一概には言えない。
マウスの3ボタンエミュレーションみたいにAアクションの発動を遅延させてBが入力される
かどうかを待つという方法もあるが、レスポンス悪くなるしね。
>>412 なるほど。
ゲームというかコントローラを使ったランチャー的な物を作成しようとしているので
どちらかというと後者の発想の方がしっくり来そうです。
しかしながら、16ボタンのすべての組み合わせをチェックするとかは現実的では
無いため、どうしようかなと思案中です。
簡単に実装するなら、
・ボタン押下イベント発生したら一定時間待って
・その間に発生したイベントがあるかチェックして、あるなら読み出して
・最終的に押されたボタンの組み合わせのアプリを起動する
あたりでOKじゃないかな?
必ず遅延が発生するってのが気持ち悪いなら、もう少し工夫する必要アリ。
議論白熱中のところお邪魔します
この度アクション系ゲームを作ろうと思い立ちました
これまではボード系ゲームのリアルタイム性の少ないプログラムしかしたことのないため
複数のキャラが同時に動いて判定をする、そんな仕組みの作り方に戸惑いを覚えています
そこで質問なのですが、開発環境の関係からこのプログラムにC言語を使っています
メモリ管理が不十分な動作環境なのでに動的なメモリの確保、開放を行うと
意図しない領域へのメモリアクセスが起こりハングする可能性を考えて
オブジェクト指向の言語を使わないようにしています
しかし、このようなオブジェクトが多いプログラムの場合
やはり各キャラ毎にオブジェクトを作成しながら出ないと、個々の動作制御や
判定、動作制限などの関連付けが上手くできません
なにか良い方法、教科書、参考書などありましたらお教えください
「動的なメモリの確保、開放を行う」と
「意図しない領域へのメモリアクセスが起こりハングする」は
関係ないだろ。
オブジェクト指向の言語を使わないってのも意味不明
C++で開発できるのにC使うのはアホらしい
>>415 ぜひJavaで
>意図しない領域へのメモリアクセスが起こりハングする
プログラムを書いてみてください。
提出期限はおとといということでお願いします。
419 :
415:03/11/15 19:30 ID:JXJsuPxy
>416
説明が不十分でしたね
動的なメモリの確保を行うと使用しているメモリ総量、位置が確実に算出できないため
実装していないメモリ領域への確保が起こりハングアップするということです
>417
たとえC++であってもNew演算子等動的なメモリ確保命令を使用しないのであれば
C言語で十分ではないかとおもいC言語を使用することにしました
>418
可能ならJavaでの開発をしたいのですが
使用したいCPU用のクロスコンパイラが手に入らないのと
OSによって保護されてない環境でのプログラムなので
動的なメモリ確保、開放をプログラマ側で監視、調整しないといけません
このような用途には不向きな言語だと思い使用を断念しました
プログラム自身は簡単です
実装メモリ以上の領域を確保すればよいだけですので
そんなプログラムでもいいのでしょうか?
421 :
415:03/11/15 19:57 ID:JXJsuPxy
>420
>メモリ管理が不十分な動作環境なのでに動的なメモリの確保、開放を行うと
これでは説明不足でしたか^^;
具体的にターゲットとするOSとハード構成を記せ。
Windowsなのか、GBAなのか、MacOSなのか、Linuxなのか、それ以外か、
プラットフォームは何なのかハッキリさせろと言っているのだけど。
424 :
415:03/11/15 20:04 ID:JXJsuPxy
>>422 質問の回答に必要な情報とは思えなかったので
特に明記しませんでした
OSというものは存在しません
あるらしいのですが使うつもりはありません
ハードウエアはかなり昔に生産中止となったドリームキャストです
次はコンパイラの製品名とミドルウエアの詳細を記せ。
426 :
415:03/11/15 20:36 ID:JXJsuPxy
>425
質問に答えれば回答が得られるのでしょうか?
コンパイラはフリーのgccのSH4クロスコンパイラを使っています
ミドルウエアと呼べるようなものはありません
機器の制御関係はすべて自分で作ることになります
秋葉原のラオックスBOOK館一新されてるけど
やねうら某の本がゲームプログラミングコーナーから一掃されてた(笑
>使用したいCPU用のクロスコンパイラが手に入らないのと
Javaゼンゼン分かってない。
>たとえC++であってもNew演算子等動的なメモリ確保命令を使用しないのであれば
>C言語で十分ではないかとおもいC言語を使用することにしました
C++もゼンゼン分かってない。
勉強しなおせ。
動的なメモリー管理での問題が気になるのなら、
newをオーバライドして自前でヒープ管理すればいいだけの話です。
ゲームをちゃんとデザインすれば、出てくるオブジェクトの最大数くらい算出できるだろ。
その最大数が実機のメモリ量を超えるようなら、当然デザイン的な意思決定が必要になる。
つまり、
・最大数を抑えるように設計しなおす
・あらかじめ決めた最大数を超えたら、特別な処理をするようにする
(余分なオブジェクトを消す、とか、それ以上オブジェクトが出現しないようにするとか)
などだ(オブジェクトの種類によってそれぞれ最大数を決めるというのも良い手だ)。
いずれにせよ、どのようなゲームを作るかに強く依存する話なので、一般的な話としての
参考書は存在しないだろうね。ただ、アロケータについて論じた本や論文とかは有ると思う
から、そういうのが参考になるかも?このへんは、マ板の人のほうが詳しいか。
というか、本当に悩んでるなら、問題ない程度に詳しくココで晒してみたら?
> 実装していないメモリ領域への確保が起こりハングアップするということです
mallocを、とりあえず正しく動作するように置き換えろ。
それができないようなら、「機器の制御関係はすべて自分で作る」なんて無理。
433 :
415:03/11/16 02:57 ID:2l7gzWNA
>428
>Javaゼンゼン分かってない
>C++もゼンゼン分かってない
プログラムを専門に勉強したことがないため
十分に理解してるとは言えないので何か思い違いをしているのでしょうか?
どの部分がどのような理解不足をしているのか勉強のためにお教えください
>429
>432
new、mallocをオーバーライドするって考えは思いつきませんでした
確保したメモリアドレスを随時監視して未実装メモリの場合
エラーとして返すようにすればいいのですね
ちょっと考えてみます
>430
簡単にいえばそうなのですが
いつもはOSやコンパイラのメモリ管理に頼り切ってるので
オブジェクトに必要なメモリ量、その配置が実際どうなってるのか知らないのです
434 :
415:03/11/16 02:58 ID:2l7gzWNA
続き
少し前に同じような質問をプログラム板でもしたのですが
「メモリ管理機構を自前で作れ」という答えで終わってしまいました
数年前流行っていた時期に作ってみたときには用意するオブジェクト数が少なく
完璧とはいえませんが、何とかプログラマ側で管理しきれていました。
しかし、今回の企画にあわせてオブジェクトの数を増やしていくにしたがって
「どの状況下でどの程度の量がどの部分に配置されて使用されるのか」
が、把握できなくなってしまいました
そこで、ゲーム系プログラムならこのような多数のオブジェクトを使用する例が多いため
自分の知らない「ちょっとしたテクニック」であえて動的にオブジェクトを量産しなくても
静的、もしくは準静的な確保によって乗り越えることができるのでは?
はたまたオブジェクトを量産することなく動作させる方法があるのでは?
と思い質問してみた次第です
やはり根本的にコンパイラ自身を書き換えて問題のないメモリ確保の方法を確立する
といった考え方のほうがスマートだという意見ばかりですので
こちらの方向で考えてみようと思います
> どの部分がどのような理解不足をしているのか勉強のためにお教えください
とりあえず、Javaの動作原理、CとC++の思想的な違い、あとは自分で調べろよ。
> やはり根本的にコンパイラ自身を書き換えて問題のないメモリ確保の方法を確立する
> といった考え方のほうがスマートだという意見ばかりですので
だれもコンパイラを書き換えるなんていってないだろ。
>>434 >自分の知らない「ちょっとしたテクニック」であえて動的にオブジェクトを量産しなくても
>静的、もしくは準静的な確保によって乗り越えることができるのでは?
>はたまたオブジェクトを量産することなく動作させる方法があるのでは?
>と思い質問してみた次第です
そんなものは無い(きっぱり)。
普通のプログラミングでも行うように、そのソフトに最適なメモリ管理を行うだけ。
んで、「最適なメモリ管理」はどういうソフトなのかに強く依存するので一概には言えない。
以上。終わり。
>>434 あんまり時代とズレてて浦島太郎と話してるみたいな気にさせるね。
結論から言うとそんな部分に力を入れる意味はまったくないね。
くだらないこと考えるのやめてさっさと組めよ。
>>414 遅レスすみません。
>・ボタン押下イベント発生したら一定時間待って
>・その間に発生したイベントがあるかチェックして、あるなら読み出して
>・最終的に押されたボタンの組み合わせのアプリを起動する
どこを安定とするのかが微妙なんです。
安定とは?
440 :
415:03/11/16 12:57 ID:2l7gzWNA
>>435 コンパイラを書き換えるという表現はよくなかったですね^^;
gccをつかっているとオープンソースであることの利点でコンパイラやライブラリ
今回の場合だとLibcあたりを簡単に書き換えれるのでオーバーライドするよりも
直接書き換えるほうが面倒がすく問題点がわかり易いので、そんな風に考えていました
>436
その最適なメモリ管理の方法を教えてもらいたかったのです
どういうソフトか?はオブジェクトをメモリ一杯まで量産するようなタイプって事なのですが
>437
たしかに今のOSとCPUとコンパイラに守られてかつメモリが豊富にある
現在の開発環境の状況からみれば、動的なメモリ管理自身をを疑って
あえて静的な方法を取ろうとする事は、時代に逆行しているような意見かもしれません
しかし、必要なオブジェクトを作成しようとして正常に動作せず
その原因がメモリが足りず実装外のアドレスに確保している
などということがあるため
この部分が解決されないとメモリ不足で動かないのか
それともバグで動かないのか把握できません
すくなくとも最低限の規則を作らないとダメなのではないでしょうか?
もっと簡単に質問するならば
みなさんは動的なメモリ確保で問題がでたとき
たとえばNew演算子を使った場合にエラーがでたとき
どのように対処しているのでしょうか?
441 :
415:03/11/16 13:05 ID:2l7gzWNA
>435
JAVAもインタプリタ、コンパイラ、JavaVMがそのCPUに対応していないと
動かないと思うのですが、それとも自分の知らない別のJAVA言語があるのでしょうか?
C++とC言語の根本的な違いはクラスオブジェクトを使用するオブジェクト指向型言語に
進化していると言うことだと理解していたのですが?
それとも、オブジェクト指向型言語はオブジェクト自身の完成度が高ければ
用意したオブジェクトを動的に追加,開放することで
コードの簡易化、開発効率の向上が見込めるが
生成されるオブジェクトにとって十分なメモリ領域が必要である
といった認識がまちがっているのでしょうか?
こちらはスレ違いなので・・・スルーしてもらってもよいです
>>415 自分で作ったメモリの動的確保なの?違うでしょ?
それなのに、そのメモリの動的確保がおかしいなんて言ってるのが房っぽい。
そもそもドリキャスで使える前提の物なのかな?
PS2だってee-gccって専用のコンパイラがあるのに、まさか普通のgcc使って
ドリキャスで上手く行かないって騒いでるの?
その開発が正規の手続きで不正な方法を使用してないならSEGAに相談すれば良いだろ。
仕事なら当然だろ。
443 :
437:03/11/16 14:28 ID:X2F6x4IR
>>440 >しかし、必要なオブジェクトを作成しようとして正常に動作せず
>その原因がメモリが足りず実装外のアドレスに確保している
>などということがあるため
>この部分が解決されないとメモリ不足で動かないのか
>それともバグで動かないのか把握できません
なにこれ?どうして全然関係ない問題を絡めて考えてるの?
この状態でどうしてメモリ管理なんて自分でやろうというきになるのか全く理解できない。
冷静に考えてみて、こんなことがごちゃまぜになってること自体が問題でしょ。
だいたい一度溢れるまでロードしないとオブジェクトが正しくロードできてるか
どうかもわからないプログラムってどうよ?
>この度アクション系ゲームを作ろうと思い立ちました
>これまではボード系ゲームのリアルタイム性の少ないプログラムしかしたことのないため
>複数のキャラが同時に動いて判定をする、そんな仕組みの作り方に戸惑いを覚えています
この時点で、その辺のゲー専の生徒レベル。
環境の所為にしてるが
大方、自分の頭の中で壮大な考え違いや
全然間違ってる可能性が高いと考えるのが普通。
いるだろ?コンパイラのバグだ、標準関数のバグだってスグ騒ぐ奴がさ…
>>441 お前は
>可能ならJavaでの開発をしたいのですが
>使用したいCPU用のクロスコンパイラが手に入らないのと
と言ってる。必要なのはクロスコンパイラじゃなく、その環境用のJavaVMだ。
446 :
415:03/11/16 15:02 ID:2l7gzWNA
>442
使用しているCPUが汎用のSH4ですのでsh4のgccノクロスコンパイラを使用しています
node,メモリ確保の方法malloc等はそのまま使えるもの(言語付属のもの?)を使っています
不正かどうかはまだはっきりしていませんが、正規の手続きでないので
SEGAに相談のはもってのほか、開発環境を明らかにするのもためらいます
もちろん、趣味でやってるだけなので仕事なわけではありません
>443
全然関係ない問題といわれる意味がわかりません
みなさんのメモリ管理の意識はどうなっているのでしょう?
OSによってメモリ領域が保護されている場合ならともかく
>ロードしないとオブジェクトが正しくロードできてるか どうかもわからない
は普通に起こりえる事態だと思うのですが、なにが間違ってるのでしょうか?
>444
べつに環境のせいやコンパイラのバグで騒いでいるわけではありません
問題がでるので別の回避方法を模索しているだけです
問題なく動くのであれば理論が判らなくて言語がなんでも気にしません
>445
専門に勉強していないので表現が正しくなく混乱を招くのは申し訳ないです
クロスコンパイラが必要というはその動作環境で動くように動作設定することと
大雑把に括って表現しました
JavaでいうのであればもちろんそのCPU用のJavaVMが必要なので
ということです
447 :
名前は開発中のものです。:03/11/16 15:15 ID:X2F6x4IR
>>446 変な部分だけピックアップするね。
>ロードしないとオブジェクトが正しくロードできてるかどうかもわからない
じゃなくて、
俺は
>>一度溢れるまでロードしないとオブジェクトが正しくロードできてるか
>>どうかもわからないプログラムってどうよ?
って言ったんだけどどうよ?
はじめの部分重要だよ。変な風に曲げないでよ。
全然意味が違っちゃってて笑っちゃったよ。
ヘルプ正しく読めてるかどうかも不安になるでしょ。
まったくスレの流れを見ずに言ってみるけど
メモリの状態なんてコアダンプを吐いて読めばいいだけじゃないの?
449 :
415:03/11/16 15:27 ID:2l7gzWNA
すこし、話題がズレてきてしまっているので
もう一度整理しなおして質問しようと思います
OS等によってメモリ領域が管理されていない
かなり特殊な動作環境でのプログラムをしています
そのためメモリの確保、開放については
プログラム側で常に注意しないといけないと思っています
特にコード的には確保できる領域も実際には
実装されていない事も考慮にいれないといけません
静的なメモリ確保方法ではコンパイル時に確保位置が把握できるため
問題をみつけることが簡単です
しかし、動的なメモリ確保では変動するメモリ状況にあわせて
確保位置,量が変化するためプログラム側で逐次チェックするのが難しいです
つづく
450 :
415:03/11/16 15:27 ID:2l7gzWNA
現在考えている企画はシューティングゲームのような
同時制御するキャラの多いプログラムです
各キャラを一つのオブジェクトとして構築したため
多種多なオブジェクトを量産する必要がでてしまいました
このときオブジェクトの生成によって確保された動的メモリの
状況把握が十分できない為コンパイル時には問題がなさそうでも
実際動かしてみるとメモリ状況によって動作しない事があります
このような場合、問題なく動かすためには
どのような仕組みを最低限用意しないといけないのでしょう?
現状では動的メモリの確保時に成功、失敗にかかわらずエラーは起きませんが
エラーであることを示すように改良することが可能かもしれません
が、できればその仕組みを作らなくても良い方法を教えていただきたいです
使用してるコンパイラはgccのSH4用クロスコンパイラです
Q.
動的に確保したいメモリの量が不確定なので有限なメモリ上では
足りない場合があります。どうすればいいでしょうか?
A.
確保したい量を確定しなさい
こういう話じゃねーの?
452 :
415:03/11/16 15:29 ID:2l7gzWNA
>447
すみません、なぜ重要なのかが判りません
「一度溢れるまで」にはどのような意味が含まれているのでしょうか?
>>415 話を聞いてると、その症状自体が疑わしい。
その動的メモリ確保はシステムコールなのか?
OS無いって言ってが、その状況で
>確保された動的メモリの 状況把握が十分できない
で、どうやって動的メモリ確保してるの?
環境は全部把握出来てるのか?
自分のバグで動かないのを、メモリの所為にしてるとしか感じられん。
454 :
447:03/11/16 15:58 ID:X2F6x4IR
>>452 じゃあ、逆に聞くけど
>しかし、必要なオブジェクトを作成しようとして正常に動作せず
>その原因がメモリが足りず実装外のアドレスに確保している
>などということがあるため
>この部分が解決されないとメモリ不足で動かないのか
>それともバグで動かないのか把握できません
どうして
・メモリが足りない問題
と
・オブジェクトが正常に動作しない問題
がわからなくなるのかわからない。
メモリに余裕がある状態で単一のオブジェクトの動作をチェックできる環境はないの?
その前にオブジェクト指向言語と動的メモリの確保に、何の関係があるのか説明が欲しい。
言ってる事がめちゃくちゃで頓珍漢なんだよな。
”OSなしで既存の動的確保がバグる”ってしか取れないんだけど。
では、その動的確保はその状況下で使用する前提の物なのか?
そもそも、OSないならヒープもスタックも自分で管理、構築する以外に無いと思うんだけど。
人が用意してないら。
メモリマップとハードのメモリ使用の仕様は知ってるのか?
根本的にOS無いのに作る事自体が間違ってるレベルだと思う。
458 :
415:03/11/16 17:05 ID:2l7gzWNA
議論が「メモリ確保が失敗するわけがない」というその一点に絞られているようですが
どうやら、OSの無い状況下でのプログラムというのが
理解してもらえないようですね^^;
携帯電話、炊飯器などの組み込み機器などようなイメージで捕らえて貰えると
わかりやすいかと思います
>453
OSが存在しないのでメモリを確保するのにAPI等は使用しません
自由にメモリを使える反面、エラーが起きているのかも判断できません
自分で勝手に確保して勝手に開放します
正確にはmallocを定義しているLibcのコードにしたがって確保開放を行います
>454
オブジェクトはコードとデータの集合体という理解は間違ってないですよね?
「オブジェクトを量産する」という表現に誤解があるようですね
これは同じインスタンスのコピーを作るということです
一つ目のオブジェクトは仮にロードすることが出来たとしましょう
一つだけなら問題なく動作することが確認できます
次に、このオブジェクトを量産することにします
このオブジェクトに含まれるコード部分は共有できますが
含まれるデータについてはその独立性を保たないといけないので共有できません
そこでオブジェクトを量産するためには、追加されたオブジェクト用に
逐次動的にメモリを確保していくことになると思います
しかし今回の環境のような場合動的なメモリを確保できなかった場合に
成功したのか失敗したのかがわかりません
とりあえず確保成功したことにして動作を開始しますが
実は不確定なエリアのメモリを確保していたりすると正常に動作しません
専門用語についての知識が薄く表現が曖昧で申し訳ありません
459 :
415:03/11/16 17:15 ID:2l7gzWNA
>457
まったくおっしゃる通りでこのまま作成するのは無理のある状況だと思います
しかし、無理を承知でなんとかこじつけながら作成していこうと考えています
プログラム自身が単純でメモリの残量についてあまり考慮しなくていい場合は
難しいメモリアロケートの心配などせずに、まさに適当に勝手に確保することで
それなりのモノが作れました
が、それでは上手くいかない事態に陥ったので、みなさんの知恵をかりにきた次第です
メモリとハードの仕様は不完全ながらも、使える程度には理解しているつもりです
>>415 ああ、君のレベルが理解出来たよ。
システムコールって分る?
>自分で勝手に確保して勝手に開放します
それがバグと言うか、決定的な間違い。
じぁ、メモリが実アドレス以外を確保するのは
”自分のバグじゃん”
そのバグ直せよ。
一般的なプラットフォームの場合、mallocだって最終的には、メモリ確保のAPIなりシステムコールなりを呼び出すと思うんだが、ということは、そのAPIやらシステムコールが無効なアドレスを返してくるってこと?
それとも、mallocがAPIもシステムコールも使ってないのなら、どういう基準で確保可能領域を割り当てるんだろうか?
メモリ確保可能な領域を知っているコードはどこかに在るの?
もし、存在しなくて、手元にメモリマップの資料も無いならどうしようもないと思うんだけど。
462 :
名前は開発中のものです。:03/11/16 17:37 ID:sJV9ESEo
みんな良くこんな電波君に長々付き合ってるな…
暇なのか?
今まで自分がどんなに頓珍漢な事言ってたか、
バカな実装してたか、アホな考えだったか、
を画面に向かって恥じてれば、まだ遅くはないレベルかと…
464 :
415:03/11/16 17:53 ID:2l7gzWNA
>460
あまりレベルの高い話でなくてすみません
「システムコール」は
MS-DOSでいうシステムコール
WindowsシリーズでいうWin16、Win32API
もっとローレベルでいうならBIOSコールのことだと推察したのですが?
違っていたのでしょうか?
OSが存在せずメモリ確保のためにシステム側から用意された関数が無い場合
自分でメモリを確保しないといけないと思います
そのメモリ確保方式に問題があり、異常の原因となることは理解しているのですが
そのための良い解決方法が見つからないので相談にきました
>461
メモリ確保の方法についてはgccのmallocをそのまま使用しているので
gccのNewlib内のlibcのなかにmallocのコードがあるのでソレを参考にしてください
メモリマップ自身は不完全ながら資料としてあるので
「ほんとに使えない領域なのか」は判りませんが「問題なく使える領域」は判ります
「どういう基準で確保可能領域を割り当てるんだろうか?」
まったく同じ疑問をもっています
この環境においての動的なメモリ確保については完全に信頼できないと考えています
そこで動的なメモリ確保をすることなく、オブジェクトを量産したいのです
一番初めの投稿の形にもどってしまいましが^^;
>>415 OSが無いのにライブラリのmallocを使ってるのがありえない。
>まったく同じ疑問をもっています
>この環境においての動的なメモリ確保については完全に信頼できないと考えています
完全に自分に責任がある部分でこの発言では
君には無理だからプログラムを辞めなよ。趣味だろうがねってしか言えない。
ていうか、組み込み系の得意な人に聞いた方がいいんじゃねぇか?
>>458 >そこでオブジェクトを量産するためには、追加されたオブジェクト用に
>逐次動的にメモリを確保していくことになると思います
C++なら必要とされる最大量を静的に確保すればいいだけの話。
クラスだろうが構造体だろうが、データの置き方に変わりはない。
オブジェクト指向とは何の関係もない。
それでオブジェクト指向言語と動的メモリの確保に、何の関係があるのか説明はまだなの?
469 :
415:03/11/16 18:18 ID:2l7gzWNA
>465
mallocの実装自身にOSは関係ないと思います
mallocの性能には関係するとおもいますが
一番単純な実装は指定された量確保してポインタをずらすだけですから
大雑把にいって今つかっているmallocのコードはそうなっています
「ありえない、出来ない、出来るようにしろ」の議論ばかりで
「問題を回避するためにどう工夫したらよいのか?」については意見がもらえないようですね
どうも、OSのない環境でのプログラムについての議論はここでは出来ないようなので
どこか別のスレッドを探して質問してみることにします
お騒がせしました
だいたい、OSは、KOSを使ってるんじゃないの?
>>469 >一番単純な実装は指定された量確保してポインタをずらすだけですから
ええと、じゃ、newlib環境では、どうやって「確保」してるの?
それが分かってれば、確保してはいけないところまで確保してしまうことは避けられるでしょ?
>mallocの実装自身にOSは関係ないと思います
システムコールのbrk()を使ってるだろ。
>「問題を回避するためにどう工夫したらよいのか?」については意見がもらえないようですね
だからさ、間違った前提の上の解決を求めるな、根本的な間違いを直せって理解出来ない?
…この先、一生出来ないと思うよ。
なにはともあれ、去ってくれてよかったよかった。
なんで、あんなに偉そうなんだろうねぇ?
まぁ、自分の質問が理解できないのはこのスレの奴らがレベル低いからだ、とか思ってるんだろうな…
じっさいには、まったくその逆なんだけどね。
もしかして「いや、ですから」とか書きたかったのかな?w
駄目な奴ほどプライドだけはなぜか高い。
プライドチキンってやつだな。
(⌒\ ノノノノ
\ヽ( ゚∋゚)
(m ⌒\
ノ / /
( ∧ ∧
ミヘ丿 ∩∀`;)
(ヽ_ノゝ475ノ
477 :
名前は開発中のものです。:03/11/17 10:55 ID:Dih7ip87
まったく、議論になってないな
少なくとも相談に答えてやれよ
メモリ環境は対応プラットフォームによって違うんだから
そんなこと議論しててもしょうがないだろ?
Q,動的メモリ確保をなるべく使用せずにクラスを構築するコツを教えてください
A,なら、クラス宣言において使用する変数の量を減らしなさい
大容量のメモリが必要な場合はクラスの外側に変数おいて
自分で管理するようにしなさい
Q,インスタンスをコピーしすぎてメモリ不足になったときの対処方法について教えてください
A,各インスタンスに優先度をつけてメモリが足りなくなったら優先度のやつから開放できる
仕組みを考えなさい
組み込み機器のプログラムしたことあれば、こんなの即答でおわりじゃねーか
>>477 というか、(同じ答えではないが)そう答えてるだろ?
句点がないあたり、本人じゃないかとエスパーしてみる。
モンスターの行動ルーチンを作るにはずばりどんな関数を作成すればよいのでしょうか?
【例】FF3 魔王ザンデのケース
ターン1 メテオ
ターン2 ライブラ
ターン3 ほのお
ターン4 ライブラ
ターン5 地震
ターン6 ライブラ
ターン7 メテオ
・・・のループです。
鬼才たる能力を持つこのスレの皆様、どうかお力をお貸しください!
>>481 モンスターの行動ルーチン以外の部分はどうなってるの?
それが分からないと答えようが無いと思うんだが…
>>481 if(ターン数%7 == 1) メテオ
if(ターン数%7 == 2) ライブラ
以下略
ぐらいが簡単でいーんじゃない?
484 :
名前は開発中のものです。:03/11/17 19:20 ID:0/Zp/7+M
ターン1 メテオ
ターン2 ライブラ
ターン3 ほのお
ターン4 ライブラ
ターン5 地震
ターン6 ライブラ
ターン7 メテオ
・・・のループです。
それだけなら配列で管理する
485 :
名前は開発中のものです。:03/11/17 19:24 ID:VAoWFetB
>>477 あのさ、よく基地外の言ってる事を読みなよ。
>大容量のメモリが必要な場合はクラスの外側に変数おいて
>自分で管理するようにしなさい
OSがないので自分で管理しなくてはいけないが
その管理が全く信用出来ないので、その部分を触らずに違うところで回避したい。
>各インスタンスに優先度をつけてメモリが足りなくなったら優先度のやつから開放できる
>仕組みを考えなさい
OSないので、自分でgccのライブラリのmallocを仕様してるが
それが信用ならないので、その部分以外を直す以外で良い方法を教えて。
こんな感じの内容を言ってるんだよ。
挙句、アンタとほぼ同じ内容のレスもあるのに
全然答えてくれない話に為らないから、もうこねーよって言ってるんだぞ。
うまく話が読み取れないのはオレだけですか?
>OSがないので自分で管理しなくてはいけないが
>その管理が全く信用出来ないので、その部分を触らずに違うところで回避したい。
「その」がかかっている部分が「自分で管理」なんだけど、
自分で管理すること自体が信用できなかったらどうにもならないと思うんだが。
>OSないので、自分でgccのライブラリのmallocを仕様してるが
だから動的ではなく、静的に空の領域を大きくとって、それを割り当てればいいだけの話。
静的メモリまで信用できなければ、そもそも身動きがとれずプログラムなど組めないことになる。
それと基地外は結局、
>オブジェクト指向言語と動的メモリの確保に、何の関係があるのか説明
をしないで逃げた。
つまりメモリーの扱いについてまったく理解していないまま、
頓珍漢なことをわめき散らしているわけなんだが。
「銀の弾丸」だけを求めたがる奴っているんだよな。
そういう奴と話してもはっきり言って時間の無駄だから、さっさとメタな方向にもってって、
終わらせるのが吉。
//これで正解ですかね?
#include <stdio.h>
typedef struct {char flg; void (*func)(void);} FUNCAD;//コマンド一覧
typedef struct {int count; int size; int *cm;} CMPG;
void func1(void); void func2(void); void func3(void); void func4(void);
void zanteAT(FUNCAD*, CMPG*);
FUNCAD fncAD[4] = {{'a',func4},{'b',func3},{'c',func2},{'d',func1}};
int cm[4] = {3, 2, 1, 0}; CMPG cmpg = {0, 4, cm};//コマンドプログラム
main(){
int i; char c;
printf(">コマンド入力(a,b,c,d)\n");
while(1){
c = getchar(); if('a'== c||'b'== c||'c'== c||'d' == c)break;
else if(c=='\n'); else printf(">a,b,c,dのどれかでお願い\n");
}
printf("\n(自ターン)\n");
for(i=0;i<4;i++)if(fncAD[i].flg == c)fncAD[i].func();
printf("\n>残手の攻撃\n");
printf("\n(1ターン)\n"); zanteAT(fncAD,&cmpg);
printf("\n(2ターン)\n"); zanteAT(fncAD,&cmpg);
printf("\n(3ターン)\n"); zanteAT(fncAD,&cmpg);
printf("\n(4ターン)\n"); zanteAT(fncAD,&cmpg);//次の呼び出しでループする
return 0;
}
void zanteAT(FUNCAD* hoge,CMPG *hogege){
hoge[hogege->cm[hogege->count]].func();
hogege->count++; if(hogege->count>=hogege->size)hogege->count = 0;
}
void func1(void){printf("メテオ\n");} void func2(void){printf("ポーション\n");}
void func3(void){printf("目潰し\n");} void func4(void){printf("逃げる\n");}
>>490 大体あってると思ふ しかし何故目潰し?
「クチバシ」にしようかと悩みました
死人にクチバシ
まぁまぁ
2chで他人が偉そうに見えるのは、自分の心が弱いからさ
ムキになるほど自分の弱い心を隠したがってる
ただ、強く・・・
最近新しいノートパソコンを買うことになったので
家に余っている【ThinkPad A20m】を3台(一台は汚れていますが・・
MDコンポ1台を無料で譲ります。欲しい方居ましたら貰ってやって下さい
Googleから【副収入徹底攻略まにゅある】と検索してサイトまで訪れて下さい。
あの手この手
新しいノートを買うのと、MDコンポを譲るのになんの関係があるんだろう。
それから無料で譲るという使い方はおかしい。
無料なら差し上げますとしなければならない。
500 :
名前は開発中のものです。:03/11/21 15:24 ID:umwRRSHD
500Get!
501 :
名前は開発中のものです。:03/11/21 23:43 ID:pGOQg9QV
厨房の質問ですが、ゲームをJAVAで作るってどうなんですか?
重いですよね。C++のほうが絶対速いですよね。
ユーザーのほとんどはWindowsなわけだし、C++のほうがいいですよね
VisualC++6.0でDirect3Dを使ったゲームを作ってみたいと思い
DirectX9 SDKをダウンロードしてインストールしたのですが
VisualC++でDirect3D8のクラスや関数の引数などの入力候補の表示がされず
使いにくく困っています。
何が原因なんでしょうか?
ヘルプ見りゃいいじゃん。
504 :
名前は開発中のものです。:03/11/22 00:53 ID:LbsHJKcQ
>>503 駄目だそんな状態じゃプログラム組めない。
>>502 プロジェクトにC:\DXSDK\Includeに入ってるファイル(DirectX8関係だけの方がいいか?)をすべて突っ込んで保存。
そのあとVCを終了する。
拡張子がdswのファイルと同じフォルダにある拡張子がncbのファイルを削除する。
ここでVCを起動する。
ビルドかけたあと、また、C:\DXSDK\Includeのファイルをプロジェクトからはずす。
って手順じゃ駄目かな(未確認)。
「組めない」のは重傷だな…
506 :
名前は開発中のものです。:03/11/22 11:49 ID:V+srHBX5
507 :
502:03/11/22 18:26 ID:AYzmgC7c
>>504 そのやり方で出来ました
ありがとうございます。
やっぱりあるのとないのじゃかなり違いますね
これからがんばってみます。
次のプログラムはどのように作ればよいのでしょうか?
@あるキャラクターを作成する(変数名cha)
Aある武器を作成する(変数名wep)
Bキャラクターの攻撃力を初期化(初期値は20)
C武器の攻撃力を初期化(初期値は12)
Dキャラクターが武器を装備したら攻撃力が変化(20+12で32になる)
私はヘタレで作ることができません 頭の良い皆さんどうかお願いいたします
あとこのプログラムはCかC++でお願いします
509 :
名前は開発中のものです。:03/11/22 23:48 ID:LbsHJKcQ
>>508 まずゲーム作ることを一旦やめることをお勧めする。
基礎能力がまるで足りない。
この状態だと、今はおそらくどんなアドバイスをしても駄目だと思う。
C/C++の入門書をたくさん読むことが先だと思う。
(とにかく基本的なプログラムをたくさん写してみることが大事だと思う。)
「できなくてもやらなくちゃいけないんです」とかそういう状況なら
もう、間違いなく逃げろ。どうせ何もできない。
人生レベルの長いスパンでみれば戦略的撤退よ。
>>508 502 に禿同
でも一応。
@あるキャラクターを作成する(変数名cha)
clase C_Cha {
...キャラの内容...
};
C_Cha *cha;
Aある武器を作成する(変数名wep)
clase C_Wep {
...武器の内容...
};
C_Wep *wap;
Bキャラクターの攻撃力を初期化(初期値は20)
cha = new C_Chr(20);
C武器の攻撃力を初期化(初期値は12)
wap = new C_Wap(12);
Dキャラクターが武器を装備したら攻撃力が変化(20+12で32になる)
int pow = cha->getPow(ken);
一例だが(chr、wepはポインタにしなくてもいいけど)
みす ×502 ○509
みすみす.... クソ ×int pow = cha->getPow(ken);
○int pow = cha->getPow(wap);
class CHero{
int cha_id; // キャラのID
int strength; // キャラの力
CWeapon* pWeapon; // 装備武器
void setAttack(const CWeapon* p){ pWeapon = p; } // 武器を装備する
int getAttack() const{ return strength + pWeapon->attack; } // 攻撃力を返す
};
class CWeapon{
int wep_id; // 武器のID
int attack; // 武器の攻撃力
};
…いろいろ突っ込みどころ満載だけどこんな感じで。。。
514 :
510:03/11/23 02:37 ID:81yBiszZ
まだミスしてた --; 脳内コンパイラはミスだらけだ・・・・合体して動くの出すよ
#include <iostream>
using namespace std;// <---これいらないかも
class CWeapon{// 武器のクラス
public:
int attack;// 武器の攻撃力
CWeapon(int pow) { attack=pow; }
};
class CHero{// キャラのクラス
int strength;// キャラの力
public:
CWeapon * pWeapon; // 装備武器
CHero(int pow) { strength=pow; }
void setAttack(CWeapon * p){ pWeapon = p; } // 武器を装備する
int getAttack() const{ return strength + pWeapon->attack; } // 攻撃力を返す
};
int main(int argc, char * argv[])
{
CWeapon wep(12);// 初期値12の武器を作成
CHero chr(20);// 初期値20の伽羅を作成
chr.setAttack(&wep);// キャラに武器を持たせる
cout << "chr は攻撃した " << chr.getAttack() << "のダメージを与えた!" << endl;
cout << "何か入力で終了します。" << endl;
char win[200];
cin >> win;
return 0;
}
ちなみに何も装備しないで(素手で)攻撃するとエラーでるよ
あれだ…発売当時のRPGツクール2003のバグ…。
エラー出ないようにするにはどうすればいいのか考えてみてね。
(・∀・)イイ!じゃなくてとっとと(・∀・)ヤレ!
>>517 とっとと(・∀・)ヤレ!
とは、エラー処理か?、簡単すぎて下らん。
やりたいんなら、おまえがやれ!
エラーももちらんだが次は敵を作成して(・∀・)ヤレ!
521 :
:03/11/24 00:05 ID:P4JvmJJc
放物線を描きたいのですが
最も処理が軽くて簡単な方法は何ですか?
522 :
521:03/11/24 00:07 ID:P4JvmJJc
あ。整数のみの処理でです。
だれか514の続きをしてやれ
526 :
偽524:03/11/24 10:53 ID:rvwKDc/0
ふぉぉぉぉ!!
ベストだーー!!
ベストエフォートです
今時整数のみとかいってるなんてプゲラッチョすぎてもうダメポ
ゲームだし結局は整数が最速だろ?(プゲラウヒハムヒョー
放物線なら三角関数で描けるよ。
>>530 まあ三角関数(cosかなんかを0まわりで)を二次近似したらそんな項が出てくるから
間違っては無いけど、なぜx^2でいかんのかと・・。
528はヘボプログラマーかな?
画像でも音でも浮動小数使う時代だしなー
>>531 三角関数云々は由緒あるネタなので、あまり気にするな。
535 :
名前は開発中のものです。 :03/11/26 05:08 ID:+cuEUmib
質問。
浮動少数のゼロ割チェックってどうしてる?
たとえば長さがゼロのベクトルを正規化する
ときなんかに長さを求めてゼロであればエラーでとめたりしてるの?
536 :
名前は開発中のものです。:03/11/26 08:47 ID:ueZRq0X0
>>535 ゼロだったらじゃ駄目だろ?
ゼロ付近(かなりあいまいだが)を調べなきゃ。
537 :
名前は開発中のものです。:03/11/26 09:48 ID:txivx5Le
タスクシステムとはいったい何なんでしょうか
ぐぐってもいまいちわかりません
情報工学にでてくるプリエンプティブなマルチタスクとも違うようですし
どういういったものか教えてください
今の理解では関数ポインタを持つ線形リストなのではないかと思っているのですが……
538 :
名前は開発中のものです。:03/11/26 10:47 ID:ueZRq0X0
>>537 そんなもの必要ないから知らなくていいよ。
ゲーム制作者がいってるタスクってのは
擬似タスクとか誰かがつけた奴だな。(まぎわらしいしはずかしいからやめてほしい)
>今の理解では関数ポインタを持つ線形リストなのではないかと思っているのですが……
ああ、そんな感じ、そんな感じ。
もういい加減糞設計だって気づいてほしい今日このごろ。
539 :
名前は開発中のものです。:03/11/26 11:21 ID:RsfevxOF
てか、JAVAで携帯のシムシティ風ゲームつーか、シムシティ作りたいんだけどね、今のJAVAでつくれるのかと。どうでしょうか。
>538
単にstateパターンでいいんでない?
541 :
名前は開発中のものです。:03/11/26 12:08 ID:ueZRq0X0
542 :
541:03/11/26 12:11 ID:ueZRq0X0
541はタスクの話と繋がるまでちと長めの補間がいるかも。
Stateパターンだけの話ね。
543 :
名前は開発中のものです。:03/11/26 14:46 ID:Weo6peER
JavaのSwingか何か使ってNetHack風のゲーム作ってみませんか?
544 :
名前は開発中のものです。:03/11/26 14:56 ID:gp+Vdr2Y
>>538 >もういい加減糞設計だって気づいてほしい今日このごろ。
設計の善し悪しは気付いたり感じたりするもんじゃねぇんだ。ヴォケ。
おまえが無益性を論じて証明してみせろ。
545 :
名前は開発中のものです。:03/11/26 16:44 ID:ueZRq0X0
>>544 >設計の善し悪しは気付いたり感じたりするもんじゃねぇんだ。
いや、設計はそういうもんだよ。
直感でわかりやすくなければその時点で破棄して間違いない。
546 :
名前は開発中のものです。:03/11/26 16:49 ID:TJpicHgi
>>544 >>545 もしもこの二人が分かり合えたら、
イスラエル - アラブ間での長年の抗争を解決する銀の弾丸が見えてくるような気がする
547 :
名前は開発中のものです。:03/11/26 17:07 ID:gp+Vdr2Y
>>545 直感で、というのはいったい誰の直感で?
ある設計に直面したときに誰もが同じ直感を得ると思ってる?
548 :
名前は開発中のものです。:03/11/26 17:20 ID:ueZRq0X0
>>547 >誰の直感で?
自分のでいい。
>誰もが同じ直感を得ると
なんで誰もが同じでなければいけないの?
大事なのは「わかりやすい」ということかどうかだ。
同じである必要はない。
また、オブジェクト指向に基づいているかどうかというのも判断材料の一つだ。
この板のOOスレでやってるようなMだかVだか処理でわけるようなのは
そもそもオブジェクト指向がわかっていない(この場合は論外だ)。
他の人にはわからないけど自分だけにはわかりやすい設計なのですか?
550 :
名前は開発中のものです。:03/11/26 17:35 ID:ueZRq0X0
>>549 ちがうな。
そもそもオブジェクト指向自体
「現実に則したものにのっとって設計すればみんなだいたい同じになってわかりやすいんじゃね?」
みたいないい加減なものなんだから、これにのっとって組む限り
どうあがいたってキャパシティはこんなもんだろ?
逆にこれを超えようと努力するな。
余計複雑になってる奴多いぞ。
551 :
名前は開発中のものです。:03/11/26 17:56 ID:gp+Vdr2Y
>>550 脱力しちゃって突っ込む気もおきないよ…
頼むから、せめて初心者も見ているこういう場所でだけは
そういういい加減なことを自信満々で書き込むのは我慢できないか?
他ではやっても構わんから。
550=OOスレの48 とみた。
俺は、
>>550は、
まともな事いってると思うけどな。
MだかVだか言ってる奴の方が脱力するわ。
むかしアイボのソースみたら、case文の羅列で萎えたことがあるなぁ。
たくさんのcase文と、たくさんのclass、どちらが幸せなんだろう。
MVCモデルも、いわゆる「最近の」ゲームには向かないだけなので、
一概に否定するのはどうかと思う。
まぁ、一般的にゲームは、業務系プログラムよりは「保守」を考える必要が無いからね。
だから、書きっぱなしに特化した方法論が有効だというのもうなずける。
純粋にコストの問題だけどね。
>>555 いつもこの類の発言が出るが、比べる事自体が無意味。
一般的に業務系プログラムは、ゲームプログラムと違って
パッチ当てたりバージョンアップしたりして何度もコードいじれるから
「保守」の名目のもと、バグがあっても直せるって感じで作るからね。
だから、ゲーム見たく発売後は修正は無理だからって徹底的にバグチェックしないしね。
純粋にコーディング姿勢の問題だけどね。
って言われも気が付かない?
プログラムだからって何でも比べる無意味に。
>>556 ええと…、
>>555は
>>556が言っていることを否定しているように読めましたか?
比べてるって言うか、その分野にはその分野のやり方があるっていう
>>556と
同じことを言ってるんだけど…
……どうも最近、勝手に脳内で仮想敵を作り上げて
それに見下すように反論する性癖のヤツが常駐している気がするよな。OOスレもそうだが。
「ゲーム」「プログラマ」とそういう香具師が集まりやすい板のテーマだからね。。。
自戒自戒っと
自我崩壊
list<VE*>brain;
brain.push_front(static_cast<VE*>(558));
pSoNet* = new SoNet2;
pSoNet->Destructor();
void SoNet::Destructor(){Attack(brain)}
ゲームでもネトゲの場合だと、後々までの機能追加や修正に耐えられるような姿勢が求められるけどね。
それこそ途中でPGや開発会社が替わっても保守できるようにプログラムの整理やドキュメント化といった作業が必要になるし、
DB(ユーザーのデータ)が絡んでくる都合上、最初の設計段階でかなりキチンとしてないと、いずれ破綻するしね。
ネトゲ開発はゲームの知識に加えて、業務系の高度な知識も要求される、かなり難易度の高い分野だと思うぞ。
そういう意味じゃ、
ネトゲ開発>>>>業務>>>>コンシューマ>>>>携帯アプリ
(ま、煽りだけどな)
ネットゲの方がバグだらけでも、パッチで継ぎ接ぎできる。
失敗したら再パッチ。
そういう意味ではプログラマに緊張感がない。
>ゲームでもネトゲの場合だと、後々までの機能追加や修正に耐えられるような姿勢が求められるけどね。
ついでにいうと、継続的に運営し、かつアップデートすることも求められるね。
大変すぎ。
>失敗したら再パッチ。
>そういう意味ではプログラマに緊張感がない。
そうかねぇ?ビッグネーム以外は、それやると速攻で寂れると思うんだが…
>>554 おそらくswitch文の羅列の方がコンパクトで速く動くよ
組み込みだしね
見た目がオブジェクト指向してるけどw
ホンダの二足歩行ロボのソースも、case文の羅列が何十画面も続いていたぞ。
まさか制御系の常識なんてことはないだろうが。
>>565 ネットゲーのパッチ当てほど緊張感を要するものはないと思うよ。
俺がJavaアプレットのゲームくらいしか経験ないけど、
下手なことしたら、二次災害で一挙に全プレイヤーのデータがおかしくなるから。
アルゴリズム関連になるけど、いいですか?
縦シューティングゲームを作ろうと思うんですけど
リプレイを記録するには如何すれば良い?
自分ではコントローラーから入力された信号を
そのまま記録してtxtファイルにでも出力すれば良いと思ったんだけど、
それでは処理落ちの時やら
ゲーム内での自機の動作に関わらずランダムに動作する敵の行動が把握できない。
それで敵機自機弾辺り判定等の動作を記録するとなると
それだけで重くなるしリプレイデータがでかくなる。
その辺りは
アーケードとか同人のリプレイ機能のついた縦シューではどうなってるんでしょうか?
ランダムは本当にランダムなわけではないのだから、記録するときに何の障害にもならない。
ついでに入力そのものではなく、それをどう処理したかを記録すればいいだけの話。
>>ランダムは本当にランダムなわけではないのだから、記録するときに何の障害にもならない。
それは何故ですか?
ランダム=規則性がない → リプレイが表現できない
になるんじゃないでしょうか?
何か間違ってます?
逆にソフトのみで規則性の無い乱数を
作成する方法があったら教えてほしい。
574 :
名前は開発中のものです。:03/11/30 01:26 ID:N9tcc+S+
>>572 現状の乱数ルーチンは、ランダムのシードが同じなら乱数ルーチンを呼び出した回数ごとに値は常に同じ値になる。
(例外があるかは知らん。メルセンヌツイスター辺りは違うんだっけ?)
なので、ゲームを開始した時点で特定の値をシードに設定しておけば、基本的にはまったく同じ乱数が発生するので問題ない。
逆に、毎回違う値を出したい場合はシードに日付や時間を設定してやる。
コンシュ−マなんかでタイマーが無い場合は、タイトル画面などのユーザー入力を伴う部分で毎フレーム乱数を発生させておくことで
乱数に変化を持たせるようにしたりします(毎回まったく同じフレーム数でボタンを押せる人はいないので)
リプレイが必要なゲームでは、ランダムシードも一緒に保存しておくので、
再現できます。
処理落ち:
描画も入力も全て処理落ちするのが原則なので、CPUにとっては処理落ちは無視できます。
人間が見たときに処理落ちしているように見えるだけ。
ま、おかしな作り方されてれば処理落ちでリプレイ狂うこともあるだろうが、それは設計を見直せ。
フレームレート固定のゲーム(シューティング、アクション)でリプレイつけました。
・再現性のある乱数を使う
・キー入力の記録
だけでできます。
例えフレームレート固定でなくても、
更新時間とかdtも一緒に記録しておけば問題ないはず。
FPSのネットゲーでリプレイ記録できのは、あれはどうやってるのかな。
ネットワークで受信したコマンドを全部記録?
>>574 メルセンヌはシードの桁がものすごく大きい(=周期がものすごく長い)だけで
普通の乱数と同じだよ。(あれは乱数の「質」のほうが本質)
PCで作成しているのですが、リプレイデータの保存はどうするのが
一般的なのでしょうか?
プレイ毎にデータ長が違ってくるので、現在、プレイ開始時に
ファイルを追加モードで開いて、プレイデータを直接ファイルに
書き込んでいき、プレイ終了時にファイルを閉じるという方法を
取っていますが、方法としてはどうなのでしょう。今のところ
トラブルはないんですが…。
ファイルに書き出しながらってのはパフォーマンス的によくなさそう。
・いっぱいリプレイ用のメモリを確保しておいて、足りなくなったら記録打ち切り
・ある程度のメモリを確保しておいて、足りなくなったら新たに確保していく。
確保したメモリはリストなどにして管理する。
で、プレイが終わったら一気にファイル保存(+開放)、あたりかな?
580 :
578:03/12/01 17:09 ID:k4JdNCPO
>>579 ありがとうございます。
幸い、パフォーマンスの面でも特に問題はなかったのですが、実行環境
によって大きな差が出るようだと困るなと考えていました。メモリを
リストで管理する案がいいですね、無駄も少なく済みそうですし。
こちらを採用しようと思います。
参考になりました。
すみません
任意で処理落ちさせたいときはどうすればいいんでしょうか?
main(){
for(;;){
game(){ //ゲーム実行部分
if(処理落ちさせたい状況) return 0; // 処理落ち部分
// コマンド入力受付やら衝突判定等の処理
// 結果出力
}
}
}
だいたいはこんな感じなのでしょうか?
システムによりけり
うちのだと、処理が遅い場合に描画を飛ばすので、
単に待つわけにいかない。
FPS管理させているオブジェクトに、FPSの変更を要求する感じ。
583 :
名前は開発中のものです。:03/12/03 13:14 ID:xnKuHohi
質問。
ゲームのBGMをMIDIでやってるんですが、
繰り返し再生の為に頭出しをして再生させると、
再生した直後に1秒ほど固まります。
これって何が原因なんでしょう?
言語はVC++で、MIDIはmciを使用して鳴らしてます。
こんな感じ。
<再生>
mciSendString("open test.mid alias music",NULL,0,NULL);
mciSendString("play music NOTIFY",NULL,0,hwnd);
<頭出し>
mciSendString("seek music to start",NULL,0,hwnd);
mciSendString("play music NOTIFY",NULL,0,hwnd);
>>583 ・mciSendCommand(...)を使えば改善されるかも。
・自前のMIDI解析ルーチンを書いてmidiOut系APIで演奏。
・MIDIをやめてoggなどの波形データを演奏。
MIDIデバイスドライバ側の問題だと自前で組んでもどうしようもならない気がするけど。
処理が止まるのはデバイスドライバの問題だが、
デバイスドライバを初期化する際に固まるだけなので、
自前で組んでどうしようもないということにはならない。
MCIは必要もないのにご丁寧に初期化を入れる。
自前で組んでループ時にデバイスを初期化しなければいいだけの話。
>>583 >>585の言うとおり自前で組めば問題はないっての聞いたことあるけど、
「自前ぇ〜?え〜、面倒臭ぇ〜」
っていうときは
BGMに使うmidiファイルをあらかじめ糞長いファイルにしておくといいかも。
頭出しを含む30分ぐらいの長い曲にしておくとか・・・。
よほどのものを求めない限りこれで足りた。駄目?
長いmidiほど初期化に時間が掛かる気がする
mciを使わず midiOut するのが俺の結論
ま、今は、ogg vorbisに切り替えたけどな
>>584 >>585 >>586 >>587 レス感謝。
mciとかデバイスドライバが原因とは思ってましたが、
やはりそうでしたか。
midiOutで何とか頑張ってみます。
ちなみに、
・mciSendCommandは同じでした。
・oggは考えたけど出来るだけ容量削減したかったのでmidiを使ってます
・30分くらいの長い曲てのは想定外でした。面倒だったらこうしようかな。
お客からみれば、MIDIってだけで萎えないか?
ほとんどの人はいい音源持ってないわけだし。
>>582 それってリプレイの見た目も実プレイ時に左右されるってことだよね?
遅い環境ではまともに再生できない気もする。
たとえば、FPSやゲーム全体を制御しているマスタータイマー
(システムでもCPUクロックでも何でも)を基準にすれば
描画はその時点での最高状態で、動作はプレイ時に忠実に再現されるんじゃないの?
言葉は少し違うけど、同じ事いってない?
毎回全座標のデーターを記憶させるだけじゃダメ?
>>590 何言ってるのかわからん とりあえず組め
582では、描画処理を飛ばすと書いているけど、
描画処理以外はフレームレート固定処理だったりします。
とはいえ、
>>590は何いってるかわからん
595 :
名前は開発中のものです。:03/12/08 03:49 ID:NMX1XHQq
STGの敵キャラの出現タイミングなどを記述した簡易スクリプトの実行方法について。
1. 実行時にifでキャラクタ名を判定してnew CEnemy1。
2. 1を発展させキャラクタをnewするファクトリクラスをキャラクタ名をキーとしたハッシュリストに突っ込んでおいて、
実行時にハッシュリストからファクトリクラスを得て間接的にpEnemy1Factory->NewInstance()。
3. キャラクタIDと個々のファクトリクラスの対応関係を示す定義ファイルを読み込み、その対応間を元に配列にファクトリクラスを
突っ込んでおく。スクリプトのキャラクタ名をキャラクタIDに置き換えるなどして予めコンパイルしておき、
キャラクタIDを添え字として配列からファクトリクラスを得てpEnemy1Factory->NewInstance()。
どれもいまいちな気がしてここ2週間ばかり悩んでます。
みなさんならどんな実装します?
時間とキャラ名とパラメータが書いてあるだけのスクリプトなら、
それらとファクトリクラスをまとめて敵出現リストを作るってのは?
俺はめんどくさいので2.だが。
よくハッシュハッシュ聞くけどふつーのリストとどう違うの?
連想配列と配列の違い。
厳密には、リストと配列も違うけど。
Down板に行くと、クレクレ君がハッシュハッシュと騒いでます。
申し訳ないのだが 画像の出力の仕方を教えてくれないだろうか
ファミコン程度の画像でいいから誰か教えてくれう
C++でお願い
602 :
名前は開発中のものです。:03/12/09 18:23 ID:t6oW0f2A
|| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|| 国内最強のロムサイトリンク集。mameもあるぞ!
||
||
ttp://eia3.hp.infoseek.co.jp/cgi-bin/emubookmark.cgi ||
||. Λ_Λ
||.. \ (´∀` )
||__________________⊂⊂ |
∧ ∧ ∧ ∧ ∧ ∧ | ̄ ̄ ̄ ̄|
( ∧ ∧ ( ∧ ∧ ( ∧ ∧ | .|
〜(_( ∧ ∧ __( ∧ ∧__( ∧ ∧  ̄ ̄ ̄ ̄
〜(_( ∧ ∧_( ∧ ∧_( ∧ ∧
〜(_( ,,)〜(_( ,,)〜(_( ,,)<割れ厨氏ねよ
〜(___ノ 〜(___ノ 〜(___ノ
604 :
600:03/12/10 18:12 ID:eJ544RAW
>>541 吐き気するコードだな
そんなもん見るな、いや見せるな
606 :
名前は開発中のものです。:03/12/11 21:00 ID:GP77MA8t
プログラム書いたんで、コンパイルすて軌道したらエラー(´・ω・`)
どこが変とかわかるようなのないでつか?(つД`;)
エラーをよく読む。
608 :
名前は開発中のものです。:03/12/11 22:57 ID:YX3Hip/p
>>606 エラーメッセージは慣れないとわからない場合が多いからね。
ある程度英語が読めなければ、慣れる以前の問題だけど。
とりあえずスペルミスと、半角スペース・全角スペースをチェックしてみたら?
あと、作業環境を書かないと。
610 :
名前は開発中のものです。:03/12/13 01:35 ID:vZuyHI4l
ゲームブックをブラウザで楽しめるようにHTMLに移植したいのですが、
せっかくパソコンで遊ぶのでアドベンチャーシートの更新は自動化したいですよね。
ゲームブックプレイに特化したアプリを開発すれば簡単なのですが、
あえてNN、IEのような一般的なブラウザだけでプレイできるようにしたいのです。
HTML、CSS、javascriptといったクライアント技術だけで実現できますでしょうか?
CGI、SSIは、借りてるサーバが対応してないので・・・
Flashで良いのでないかと
ノベルツールとかでは出来ないかな?
苦労するだけ?
613 :
610:03/12/13 02:45 ID:vZuyHI4l
>>611 Flashは高くて手が出ません。
テキストエディタだけで作りたいんです。
>>612 ブラウザだけでプレイできるようにしたいんです。
やっぱり無茶かなあ・・・
>613
簡単なFlashファイルを作成するフリーのツールがあったはず
名前は忘れた
Javaアプレットは?
>>610 >HTML、CSS、javascriptといったクライアント技術だけで実現できますでしょうか?
IE専用でいいなら出来ると思うよ。
NNにも対応となると…こっちはわからん。
>>617 ActionScriptもちゃんとかけるんだね>ming
なかなか凄いかも。
>>610 ゲームブックってなによ?
と思ってぐぐったら 結構ヒットしたことにびっくり
TRPG (トークアールピージー) のことかな
もしくは昔あった 小説とゲーム性をからめた
剣をふるなら → p135 へ
盾で防御するなら → p75 へ
みたいなやつのことかな
個人の趣味でやる程度なら 多少の知識でできるかもしれんけど
複数人まじえてやるんなら 人数に応じた知識が必要に
なるんでないかなと。
Flash でアドベンチャー作ったところがあったとは聞いたことあるが、
それ以降の話は聞いてないね。
620 :
610:03/12/13 20:26 ID:Lg0RzSGy
>>619 みたいなやつのことです。
パラグラフごとにhtmlファイルを作成し、<a href="">タグで分岐を実現するだけのプロジェクト。
ただこれだけでは芸がないので、アドベンチャーシートの更新もブラウザの機能だけで自動化できないかと悩んでいます。
>>617 それは凄そうですね。MXしか知らなかたーよ。
>>616 IE専用ならできる方法といえば、VBscriptですか?
一瞬、火吹き山の魔法使いを作ろうと思ったが
既に携帯のアプリでありやがった。
>622
>火吹山の魔法使い
なつかしー。昔何回もやったなぁ。まだ本棚にある、はず。
iアプリになってるんだね
>>610 JavaScript使えばいいじゃん。
・NN系でも閲覧可能
・パラメータなんかはCookieで保存
・計算なんかもできる。乱数も作れる。
・テキストエディタだけで開発できる
・クライアントで実行されるんで、サーバー側に特別な設定不要
他に要望は?
>>624 >せっかくパソコンで遊ぶのでアドベンチャーシートの更新は自動化したいですよね。
一番難しいのは ここかなと。
実際にプレイしている最中に データの書き換えなんか発生すると
選択肢が増えたり、減ったり、はたまた 絶対に通れない道が
できあがってしまうがネックじゃないかな
後 書かれていないけど、誰がアドベンチャーシートの更新を行うのか。
ユーザーでもできるのか、一人だけしかできないのか
まぁ多分 後者だと思うけど。
626 :
名前は開発中のものです。:03/12/14 11:03 ID:OSN5M1Al
>>622 なついな。
漏れはソーサリーシリーズをやりまくったよ。
下手なゲームより遥かに面白かったな。
627 :
名前は開発中のものです。:03/12/14 14:26 ID:/IfdCHPv
>>846 「支払督促」は以前は「支払命令」と呼ばれていました。
ネットで「支払命令」で検索すれば、方法は書いてあると思います。
相手が2週間以内に異議申立をしなければ債務名義が取れ、差押え等ができますが、
反対に異議の申し立てがあった場合は裁判になってしまう両刃の剣です。
ただ実際に異議申立をする人はほとんどいないので、有効な方法ではあります。
また、督促状を出す際も、内容証明郵便の用紙を使い、「〜日までに返済頂けない
場合は裁判となります」と書いたものを、普通郵便+配達証明で出しますと、
内容証明郵便と勘違いして慌てて返済してくる人もいます。
■2chバトル〜これって゛罪゛じゃないの?■
http://school.2ch.net/test/read.cgi/shikaku/1049444532/l50
>>625 だから、Cookie使えよと言っている。
アドベンチャーシートは、それぞれページを見たマシンのハードディスクに保存される。
データ破損については、データ消去用ページでも作っとけばいいのでは。
>>628 ><a href="">タグで分岐を実現するだけの
これはクリアーできるのか?
630 :
名前は開発中のものです。:03/12/14 21:04 ID:/L/FeOc2
質問なんですが、同人のゲームファイルはどうして
一つのEXEファイルにまとまってないんでしょうか?
やっぱり修正パッチの関係ですか?
それとも何か別に理由が有るの?
>>630 普通、商業ゲームもexe一つでまとまってませんが何か?
633 :
名前は開発中のものです。:03/12/14 22:30 ID:zQ7NPUST
質問なんだけど、ダブルバッファリングしたときって
自分でv_sinc待ちする必要はないですか?
今更なことだけど、質スレで質問者相手に高説たれる人ってカッコ悪いよね
>>628>>631>>632>>634とかさ
本人が自覚してないともう最低
こいつらにリアルで何か聞いたら不機嫌そうに答えるんだろうなぁ
そういう人を見かけたら可哀想な目で見てあげることにしてるよ
まぁ俺にゃぁ関係無いけどぉ、フフ
>>635 あーいるいる。
「そんなの調べれば分かるだろ!?いちいち聞くなよ!」とか言うお人。
自分を客観的に見れないんだろうな。傍目で見るとひく。
もっと周りからどういう目で見られてるか意識した方がいいかと。
637 :
610:03/12/14 23:38 ID:e7E+Ph1V
>>635-636 いや、レスくれるだけありがたいんすけどね。
というわけでjavascriptとクッキーでがんばってみます。
flash技術はそんなに身近だとおもわなかったんですぐには無理っぽい。
レスくれた方ありがとうでした。
635=636は自演して説教ですか…いいご身分ですね。
>>635 なんていうか…2chのノリを理解できないあなたの方が哀れです。
現実では孤立しているんでしょうね…。
他の掲示板へ行かれることをお薦めしますよ。
640 :
名前は開発中のものです。:03/12/15 00:01 ID:gVuZsoC0
>>639 2chのノリにどっぷり浸かっているお前も哀れだけどそれ以上にキモいね。
そして俺も・・・。
641 :
639:03/12/15 00:09 ID:p8fXx1+p
>>640 それは言えてるな…。
まぁ、635とか636とか馬鹿真面目(?)な方には2chには馴染めないだろう。
閑散としたこの板で煽りが入るだけありがたいんだけどね…。
>>630 1MB のexeファイルを実行するには 1MB メモリに読みこむ必要がある。
10MBのexeファイルを実行するには 10MB メモリに読みこむ必要がある。
実際開発すれば分かるけど、開発中は 何回も修正するから
相手に渡すときはやっぱり データは小さくするのが礼儀としてあるし、
小さい方が 効率がいい。
修正のたびに10MBのメールを送るのはしんどい
でも修正のたびに変わるのはexeファイルのみがほとんどで
画像データなんかは修正されない
だから exe ファイルのみを作って、画像データや音楽データなど
あまり変更がないものは 別ファイルとして必要な時だけ使う。
>>642 >1MB のexeファイルを実行するには 1MB メモリに読みこむ必要がある。
>10MBのexeファイルを実行するには 10MB メモリに読みこむ必要がある。
んなわけない、windowsのページングについて勉強しなおして来い。
>>643 なにがどう違うのだ?
説明できないなら意味ないぞ
みなさん、3Dモデリングツール何使ってます?
やっぱりShadeとかLWとか買ってるんでしょうか?
metaseqというシェアウェアもあるんですが、
ゲームで使うモデル作成はこういうシェアウェアでも十分なんでしょうか?
>>644 言葉通りだが?
10Mバイトのexeファイルだからといって10MBのメモリが必要とは限らないということだ。
ページング不可とされない限り、そのセクションは必要になるまでロードされないし
ロードされた後でもメモリから追い出される可能性がある。
647 :
633:03/12/15 01:49 ID:cBvIei7N
で、通常ダブルバッファ使った場合、v-sync待ちする必要はあるんですか?
>>646 >読みこむ必要がある
日本語勉強してこい
まぁ実行ファイルで100Mなんてまずないだろうけど
仮にそんなのがあって実行時にすべて読みこんだら時間かかるし効率悪いからね…。
>>647 …ネタかな…?
催促すると余計答えてくれなくなるぞ。
じっくり待たれよ。
651 :
名前は開発中のものです。:03/12/15 05:36 ID:NbuZeeoi
ファイル数が多すぎるとセクタサイズの関係でHD容量が無駄になるし、
エクスプローラーで表示するとき遅くなるよ。
DirectXは自動的にv-sync待ちしてくれるのでは?
>630
Windowsではプログラムを実行する際、まずEXEファイル全体をそのまま
論理メモリ空間に読み込みます。
まず、でかいプログラムだと多くのメモリ空間が必要になり起動も遅くなります。
そして、プログラムというのはどんなソフトでも大抵他のプログラムと
共通化出来る部分というのがあり、そういう部分はDLLとして分離しておき、
他のプログラムと共有して使うのが一般的になっています。
そうすることで使用するメモリ量を減らすことが出来ます。
(VBのランタイムDLLなどがこの顕著な例)
ちなみに、論理メモリ空間というのは仮想メモリによって実現されてる
仮想的なメモリ空間で、一般的には物理メモリと同じではなく、
32bit Windowsの場合、どのプログラム(プロセス)も4GBのアドレス空間を
持っています。
物理メモリは当然4GBも無いPCが普通なので、部分的に物理アドレス空間に
マッピングし、いわばのぞき窓を切り替えていくことによって、広大なメモリ空間を
使えるようにしています。
しかし、物理メモリ空間ではないからでかいプログラムでも問題ないかというと
そうではなく、実際は使用しているメモリ空間が大きく分散しているほど、
キャッシュミスにつながる傾向が多くなり、その分パフォーマンスが落ちることになります。
でかい単一のEXEでプログラムを提供することによるメリットは
実際ほとんどありませんが、あるとすれば緊密な結合レベルによって
不整合が発生するのを抑えられるというくらいでしょうか。
>Windowsではプログラムを実行する際、まずEXEファイル全体をそのまま
>論理メモリ空間に読み込みます。
そんな仕組みだったら100MBオーバーのOSのサービスパックの展開で大変なことになっちゃうね。
ナワケナイダロ、アホ
>>654をもっとわかりやすくいうと自己解凍形式の圧縮ファイルはどーすんだよって話だな。
xx_sdk.exe(1.3GB)とかいう場合だな。
ぼくんちのメモリは512MBしかないから解凍できないの?っていうとそういうわけでもない。
馬鹿な質問ですまないのだが 次のプログラムをうpしてくれないか
@RPGで敵に対してひたすら物理攻撃だけを行う関数
A敵との会話から戦闘に突入する関数
皆さんよろしくお願いしまつ
>>656 とりあえずうpしとく。心して使ってくれ。
(1) while(Enemy){PhysicalAttack();}
(2) void Talk(void){longjmp(Battle);}
・・・こうやってまた一人、マルチプロセス(or スレッド)を
言語がサポートしていなければ、まともなゲームが作れない
厨房が増えていく。うれしいな♥
>>661 リソースは必要になるまでメモリー上には読み出されない。
適当にでかいリソースを埋め込んで、プログラムを作ってみれば分かる話。
いい加減、恥の上塗りはやめた方がいい。
質問です
ゲームを作るのに役立つサイトは無いでしょうか?
C++であればうれしいです。
>>663 教えてくれ。一体何が分からないんだ?
もし、自分も「何が分からないのか」よく分かっていないなら、
自分が手がけているソースを全て晒してから質問するとよいと思う。
665 :
664:03/12/15 21:21 ID:6dJEJxG9
>>663 というのは、いわゆる「教えて君」という輩は
大体設計の根幹から間違っているというのが殆どだから・・・
そういう場合、細かなテクニックだけを教えられても
何の役にも立たず、いつまでも「教えて君」状態のまま
となってしまう。
>>663 何が作りたいんだ?(どんなのが作りたいの?)
既存のゲームで近いものを挙げてみれ。
教えて君は、「何がわからないか分からない」んですよ。真性君は、だけど。
そういう人は、見所がある。
しかし、多いのは、「ラクしたい。人に聴けばいいか…」とかいう奴。
作る前から思考停止してて、最悪。
ゲーム作りたいからどうやれば作れるか自分で考え
それには 何が必要が どうすればよいか考え
また、どうやっていけば作れるのか
そこらへんを自分で考えない子供が増えてきたのかねぇ
ゲームが作りたい! ならどうすれば良いか?
自問自答できる そんな奴が欲しい
自分で作った、考えた でもダメだった
だから人の助けを借りる、相談する それなら分かるが
なんというか、全然ダメなんだよな
>>663 チミはググッた上でそのレスだよなぁ?
ま、釣りならこんなところでやっても虚しいだけだし、大量に釣れような板でやってくれよん。
>670 名前:名前は開発中のものです。[あああああああああ] 投稿日:03/12/15 21:46 ID:7eJHUoAK
まぁ、こいつは結構前から居る荒らしだって事は、わかってたことだけどね!
>>670(あああああああああ)
・・・終わったな。
次からメアド欄は変えたほうがいいぞ。
674 :
名前は開発中のものです。:03/12/15 22:09 ID:Qi7EsK3U
orakurutore
676 :
名前は開発中のものです。:03/12/16 20:23 ID:8FFvwtjF
ファイナルファイトみたいな2D横スクロールアクションをC++で作りたいと思ってます。
そこで、DirectXの本で初心者に易しい本ありましたら教えてください。
本屋に行ってみたのですが、3Dに関しての記述が半分以上ある本が大半で、
2Dのみに触れている本がありませんでした。
当方、仕事でプログラマしてまして、VBを3年、最近VB.NETを使ってます。
オブジェクト指向は理解できてるようなできてないようなって状態。
C++の入門本は購入済みです。
よろしくお願いします。
678 :
だい:03/12/16 20:32 ID:uWNLli7J
横スクロールのゲーム作ってるんだけど二段ジャンプやダッシュってどうやって作るんですか?
プログラムの話なら、
ジャンプ状態であるうちにジャンプ入力を受け取ったら二段ジャンプにすればいい
連続入力の検出なら、ウインドウズのWM_*BUTTONDBLCLKの動作を観察するといい。
680 :
676:03/12/16 22:16 ID:8FFvwtjF
ん?677のVBで作れって煽りですか?
それともスレ違いってことですか??
>>680 VBでもDirectXは使えますよ。 天下のMSの言語だから安心だし。
MSの手先のオフェラ豚め
あらかじめ用意したBMPファイルやTXTファイルを読みこんで、
プレイするゲームをつくっているのですが
このBMPファイルやTXTファイルを一つにまとめる方法はないでしょうか?
まとめたければ自分で勝手にフォーマットを決めてまとめればいいだけ。
>>684 TXTファイル、BMPファイル、他全てのファイルを一つのバイナリファイルに書き込めって事でしょうか?
それってファイルフォーマットについて知ってないと出来ない技ですよね。たぶん。
なんとかなるかな・・
>>685 連結してインデックスを先頭につけるか、別ファイルで吐かせるツールでも作ればいいんじゃないの?
非常に簡単な構造でいいなら。
まとめられたファイル一つ一つの先端アドレスとサイズが分かっていれば
(それを定義している場所が
>>686の言うインデックス)
ファイルフォーマットの知識が全く無くてもなんとかなると思うが。
>>687 でも、
Load(const char *filename);
みたいな関数使ってて尚且つ関数の中身が見れない構造になってたらピンチじゃね?
Load(const char *filename, int index);
690 :
688:03/12/19 01:09 ID:9IM61/VD
>>689 いや、だから、プラットフォームSDKのLoadBitmapみたいな関数に頼ってた場合って
ファイルまとめたら今度はLoadBitmapの代わりになるようなものを作らなきゃいけないじゃん。
ってことじゃないの?
>>685の言いたいことって。
>>690 ???
よく分からないや・・・・・・・・・寝よう・・・
>>692 スマートじゃないとか美しくないというレスが付く!
そういうときは一度RAM DISKにテンポラリを書き出してから
読み直せば良いのだ。う〜ん、俺って冴えてる。
クッ
冴えてると思ったのに先を越された。
しかしRAMDISKとなるとファイルフォーマットよりも
ファイルシステムに精通してないとならんな…。
696 :
名前は開発中のものです。:03/12/19 02:23 ID:9IM61/VD
ネタだといってよバーニィー
ネタを練った
lzhやzipでいいじゃん
圧縮もきくし資料も豊富、DLLが提供されているので新たにコードを書く必要もない
701 :
685:03/12/19 17:01 ID:Uwe5ZE6F
>>686〜699
色々な意見に感謝です。はい。
とりあえず、連結してインデックスを先頭につける方法から試して行こうと思います。
ところで、
「リソースファイルに全部まとめたらLoadBitmap関数もそのまま使えるじゃん!」
と、今さっき思いついた僕も冴えてますよね?
才能ありますよね?
自分で思いつけたのならOK。褒めて欲しそうなそぶりはNG。
ちょっと待て、
質問したのは俺なのに何故あんたが話をまとめるんだよ
こっちは今出てきた語句を必死でググってる最中なんだから、
まとめるのは俺が理解した後にからにして下さいよ
>>703 まとめたいお年頃、えらぶりたいお年頃なんだから、スルーしてやれ。
元々の質問が、まとめるにはどうするかって話だからねえ
オチがよろしいようで
いま、PS2で動的型情報を自前で作るかそれともtype_infoに頼るかで迷ってるんだけど、
だれかPS2でtype_infoに頼った設計をした人いない?
どれだけメモリを圧迫するものなのか知りたい。
OOスレで訊いたんだけど、こっちに誘導されたので
708 :
707:03/12/20 10:30 ID:rIwyOINw
ちなみにコンパイラはCW。多分gccでのケースでも大差はない(CWでもgcc用のライブラリを
つかってるからtype_infoの形式は共通だろう、と予測)と思うので、どっちの話でもいいから
聞きたいです。
709 :
名前は開発中のものです。:03/12/20 11:01 ID:z6nXo3Ik
>>709 マジですか・・・
VCでメインループに使ってる・・・_| ̄|○
ま、CPUごり押しでいきますか・・・ははは
712 :
名前は開発中のものです。:03/12/20 11:23 ID:z6nXo3Ik
>>710 メインループなんて別に速度要求されないんじゃ?
例えばスプライトを使ったシュ−ティングゲームの
敵がやられたときの爆発するエフェクトを再現したいんだけど、
「弾と敵機の当たり判定があり、
当たってれば爆発するエフェクトを起こす」というのは判ってる。
そして、当たり判定処理等と描画処理を一緒に書きたくない、
後で一斉に描画処理をしたい時はどんな処理をすれば良いの?
「エフェクトを起こす」という処理をスタックして順番に描画すれば良いと思うけど、
他に良い方法はないですか?
この方法だとスタック出きる数に限界があるし、
チェインファイルをつかって動的にスタックしていっても動作が遅くなるし、
他に良い方法はないですか?
>>713 いろいろやり方あると思うけど
それを考えるのが楽しいんだよねぇ。
>スタック出きる数に限界があるし
昔のPCならいざ知らず今のPCなら気にしなくていいんでは?
>チェインファイルをつかって動的にスタックしていっても動作が遅くなるし
これがよー分からん???
とりあえずドバッと最も多く必要となる分+α確保してしまうのはどうなのか?
エフェクトの処理自体がランダムなわけではないのだから、
現在進行中のエフェクトカウントが一つあれば、途中経過をスタックする必要はない。
ドバッと最も多く必要となる分+α確保する
Q メモリがもったいないじゃん!
A 画像をメモリに確保することに比べれば僅かだ
Q 速度は遅くならないの?
A ならんならん(w
>>713 >そして、当たり判定処理等と描画処理を一緒に書きたくない、
>後で一斉に描画処理をしたい時はどんな処理をすれば良いの?
当たったときに爆発オブジェクトを生成して、画面上のキャラを管理しているリストに追加。
んで、描画処理はリストを順にたどって追加されている各オブジェクトの描画処理を呼び
出すんで、自動的に爆発オブジェクトの描画処理も呼ばれる。
とかそんな感じでやってるよ。
描画を分けてるとフレームスキップとか簡単に出来ていいね。
サンクス。
自分はゲームプログラミング始めて間も無いので、
こういう初歩的な事が判ってないのが辛いです。
ほとんどがネットで調べて来た事なんで間違ってたり誤解してたりな事が多々あるんですが、
レスを参考にしてなんとかがんばってもうちょっと良い方法が無いか考えてみます。
719 :
707:03/12/20 23:26 ID:rIwyOINw
>>709 dクス
>どうやら、小さいプロジェクトならあまり差はないようです。逆に大きいプロジェクトの場合、
>数%程度の増加は気にならないでしょう。
どうやら大丈夫そうですな
DirectGraphicsでカメラの前進・後退・左右回転・上下回転をさせたいのですが
上下回転させると視点のzも変えなければ真上や真下を向けないのでzをマイナスしてyを+してます。
でもそうするとzが変わるので上や下を見たまま前進・後退すると移動量が減ってしまいます。
何か良い方法無いでしょうか。
>上下回転させると視点のzも変えなければ真上や真下を向けないので
カメラの中心位置が間違っているか、行列をかける順番の誤り。
>>721 カメラの中心位置とはカメラ自体の座標でしょうか?
D3DXVECTOR3(0.0f, 2.0f, -10.0f)を初期位置として前進・後退のたびにzとxを
それぞれ向いてる角度のsin・cos分をプラスしていってます。
この方法に問題あるでしょうか?
カメラの中心を(0,0,0)の状態で回転をかけた後に、
移動させないと、当然正常に回転できない。
>>723 レス遅くなって申し訳ありません。あと言葉足らずでしたが、
カメラの回転はカメラ位置は固定で視点を左右上下に移動させるものの事です。
D3DXMatrixLookAtLH()関数の第3引数の部分の計算です。
ですからカメラ位置(D3DXMatrixLookAtLH()の第2引数)は特に問題ないと思ったのですが、
全く別の事でしょうか?
カメラの方向を変更する処理は、
D3DXMatrixLookAtLHでいちいち視点の設定をするのではなく、
最初に作った行列に対して、回転行列等をかけて求めれば無駄な苦労無い。
>>725 ふむふむ。そんな方法がありましたか。
ポリゴンの移動(D3DXMatrixRotation()関数)みたいな感覚をカメラでやれば良いのかな?
とりあえず今書いてる方法からその方法に変えてやってみます。
また疑問出たら質問に来ます。ありがとうございました。
727 :
名前は開発中のものです。:03/12/23 01:53 ID:Dt0+LLSw
何か役立ちそうなツールを作ろうかと思うんだけど、
ツールの概念って何ですか?
何かの役に立つ物。
729 :
名前は開発中のものです。:03/12/23 21:42 ID:5t0z2s2o
当たり判定のプログラムが書けん。
当たってるかどうかを判定するプログラムは分かるが、
当たっていたら前に進めないとか落ちないとか、そのへんが分からん。
普通、壁とかブロックとかの当たり判定ってどうやってるの。
当たってたら直前の座標に戻すとか
731 :
729:03/12/23 22:02 ID:5t0z2s2o
でも、それだと移動速度が速いときに壁と自キャラとの間に空間が出てしまうので
もっといい方法ありませんか?
732 :
729:03/12/23 22:02 ID:5t0z2s2o
733 :
名前は開発中のものです。:03/12/23 22:16 ID:E3QeV1IX
>>731 当たったんだから当たったときの場所に戻せはいいじゃん。
まあ、結構難しいけど。
まずは平面と直線の交点から地道にやってくしかないんじゃないのー。
俺もいい方法キボン。
>>729=731
1.一回の計算での移動距離に上限を付ける。
それ以上の距離を一フレームで移動する場合、
途中の点でも衝突判定をする。
2.移動ベクトルと物体との交点を探す。
>壁と自キャラとの間に空間が出てしまうので
というのを綺麗に処理するのなら、2.のベクトル方式かな。
735 :
734:03/12/23 22:19 ID:zvmW175r
ゲームは作ったことないのだけど、
シミュレーションで衝突判定をしたことがある。
その時は三次元だったし、素直にベクトルで計算した。
ついでにいうと、
ベクトルを使う場合にも移動距離に上限がある方がいいらしい。
736 :
729:03/12/23 22:25 ID:5t0z2s2o
>>734 スマソ、ベクトルとか、よく分からない。
教科書を読んでみたが、向きと長さを表すための数?
やっぱり、ゲームプログラミングでは、この辺の知識って重要なのでしょうか。
で、どういうプログラムを書いたらいいのですか?
壁ぴったりの位置に補正さればいいんじゃないの?
738 :
729:03/12/23 22:45 ID:5t0z2s2o
>>737 それも考えてみたんですけど、うまくいきませんでした。
もしかして、こういう壁との当たり判定って王道はないの?
>それも考えてみたんですけど、うまくいきませんでした。
何がどううまくいかなかったのか書かずに、他人に理解してもらえると思っているのか?
740 :
名前は開発中のものです。:03/12/23 23:57 ID:yXOe9rbq
素直に
>>734の1.の方法でいいじゃん。
無駄な計算が発生するけど、一番単純。
妥協をしないんなら、
1.各オブジェクトが現在の速度で衝突なしで移動できる時間のうち、最も短い時間を算出
2.その時間分だけすべてのオブジェクトを移動
3.そのタイミングでの衝突に対するリアクション
これを、1フレーム分時間が進むまで繰り返す。
最近のマシンなら、これくらいまじめにやっても意外とゲームに支障が無いかもしれない。
移動ベクトルとの交点を求めればいいだけなのに、
なんでわざわざ判定を細かくする必要があるの?
>妥協をしないんなら、
すさまじいほど妥協の固まり。
743 :
名前は開発中のものです。:03/12/24 01:29 ID:LQ2+WnwS
まじめに物理シミュをしたい場合なんかは必要だね。
単純な例だとビリヤードとか。
速度が速いものの当り判定でいかに突き抜けないか?ってのは俺も悩んだ時があったよ。
結局、速度を10分の1にして、1サイクルで10回計算する方法で乗り切った。
そうすれば、直前に戻す場合、カベとの隙間は今までの10分の1になる。
ただ、計算量が多い場合はダメだが。
745 :
744:03/12/24 09:33 ID:4RuabZKq
すまん、訂正。そういえば22回ぐらいにしたんだった。
計算回数でスピード調整できるから後で変更したんだった。
746 :
729:03/12/24 10:19 ID:URj7Zjll
>>742 俺ベクトルとか良く分からないんですけど
具体的に、どういうプログラムを書いたらいいんですか?
判定に使うベクトルは移動量でクリッピングされた一本の線。
それを使って障害物との交点を出すだけ。
>>746 ぐぐれ。
もしくはジェムズ買え。ゲームのための数学本もたくさん出てるぞ。
中学で習う連立方程式で解けるから、数学本をみるほどでもないよ。
分からんなら書けるわけねぇだろ アホ
判定を細かくしてるやつらに聞きたい
レーザーとかマシンガンとかそういうものの判定はどうしてるんだ?
もしかして1ドット単位で計算するのか?
あふぉらし。
中学生のときに二本の線の交点を求めただろ?
続きは「線分どうしの交点を求める」スレでどうぞ
753 :
729:03/12/24 15:07 ID:URj7Zjll
いろいろ調べてみたが、全然分からん。
たのむ、プログラムを晒してくれ。
いやだ
当たっているかどうかの判定はできてるんでしょ?
原始的というかへぼい方法でいいなら、当たらなくなるまで逆方向にちょっとづつ戻す、ってのでどうさ。
というか、質問が変わっていて、線分の交差判定とかやりたいなら「線分交差」などの
単語でググル先生で調べるとか。単語を変えてみるとか。
もう少し、根気よく調べてはどうか?
ベクトルの説明もしたし、交点は連立方程式で解けるともいった。
分からないところなど残っていないはずなのだが、結局何が分からないの?
757 :
729:03/12/24 15:53 ID:URj7Zjll
>>755 線分の交差判定のプログラムは見つけることが出来たが理解できなかった。
あきらめます。
>>742 レスが遅くなりましたが。
> 移動ベクトルとの交点を求めればいいだけなのに、
> なんでわざわざ判定を細かくする必要があるの?
衝突によるリアクションで移動ベクトルが変化し、
元の移動ベクトルでは発生しなかった衝突が発生したり、
元の移動ベクトルでは発生していたはずの衝突が発生しなかったりするからです。
ベクトルが分からない
二次連立方程式も解けない
そんなあなたに ハードコーディング
背伸びせずに自分の知識で実現できる物を作れ
761 :
729:03/12/24 16:58 ID:URj7Zjll
本当に、ベクトルが分からないとアクションゲーム作れないのですか?
マリオとか、普通のアクションゲームはおづいう処理やっているのですか。
>>729 もう少し前提条件を書きなよ。
マリオタイプなら背景の判定がセル単位になるからセルの位置にまで戻す。
不定形なら、
>当たらなくなるまで逆方向にちょっとづつ戻す
これでできないかい?
ベクトルは知らなくても、概念はいつの間にか使っているはず。
小難しく考えない方がいいかも。
763 :
名前は開発中のものです。:03/12/24 17:19 ID:JEYstVzG
>>761 別に無理じゃないかもしんないけど。
ベクトルだってわざわざ難しくするためにあるんじゃなくて
ベクトルとして表すと楽だから存在するわけだからベクトルを使わないで
やるっていったらそれだけの手間がいるよ。
2Dにしても3Dにしてもマリオは結構難しいかもよ。
(色々とフリーでマリオをパクッたようなゲームが落ちてるけどそのどれもが動きを表現しきれてないじゃん。)
紙に図を書きながらならベクトルと意識させずに教えることはできるだろうけど、
掲示板だとベクトルがわからないとちょっとしたことを教えるのに非常に手間がかかる。
知るかアホ
テメーはテメーの靴でも磨いてろ
RPGの会話は1個1個関数にしておくのがベストなのかね
いちいちメインで書くとややこしくなるし
アドバイスお願いしますよ
766 :
名前は開発中のものです。:03/12/24 17:38 ID:JEYstVzG
メッセージはファイルなりリソースなりから読み出すようにする。
ごく小規模なプログラムでないのなら、プログラム中に直接記述すべきではない。
>>765 プログラミング言語を理解していてもシステムが組めるワケではない
正直ゲームを作るとか以前のレベルと思われ
デザパタ本でも買えばどうよ?
>>761 ベクトルを知らなくても作れるよ。
昔のベーマガの投稿で小学生や中学生はいたしね。
とりえあずベクトルを使わずに工夫してやってみれば?
>>765 私はイベント処理用にバイトコードベースの仮想マシン作って
会話もその中で処理しているよ。たとえば、1番のメッセージ
を表示、というイベントを作るなら
0x40 01
(0x40は後続1バイトをメッセージ番号とみなすメッセージ表示コード)
というバイト列をイベントコードとして持たせておく。
イベントの情報はこんな感じで持たせる。
typedef struct { /* イベント情報構造体 */
int iChrNo; /* 表示キャラクタ */
int iType; /* 進入タイプ */
/* コード配列 */
BYTE abyCode[64];
} EVENTDATA;
あとはこのイベント情報をマップの大きさに対応した配列に
入れておいて、移動処理のたびに移動先にイベントがあるか
調べ、あればイベントを処理する、という流れ。
>>770 会話の内容の部分はどこにある?
また別に コードと対応する配列を用意してるとか?
>>771 会話などの文字列データは、文字列テーブル(65536バイトのバッファ
を256分割して割り当て)に配置。イベントでは他にグラフィックも
出そうかと思っているけど、これはどうしたものか・・・。
>>772 256byte(半角255文字)のストックが256個あるってこと?
俺もよー分からん。
いや、だから65536バイトのバッファを取っておいてそれを
256分割してポインタに分配しているということ
/* 文字列テーブル用バッファ確保 */
g_lpStringTable = (char *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 256 * 256);
/* 文字列テーブル用バッファを分配 */
for (i = 0;i < 256;i++) {
g_alpszString[i] = g_lpStringTable + i * 256;
}
こんな感じで。
>>775 文字通りバッファ(シーン毎にファイルから読み込んでスプールしておく?)
なのは置いておいて、
>>770が聞いてるのは実データの格納場所じゃなかろうか。
かなり好意的な解釈だが。
>>776 今は実データの場所は、各種グラフィックやマップ・文字列、
イベント、敵などの各種データなどを収めたシナリオファイル
内だね。最初にこのシナリオファイルを読み込んで、その中の
文字列をバッファに格納しておく。
まあ、文字列はプログラムの実行中にバッファにあればよい
から、別にコードで設定しようが、ネットから読み込もうが
どこにあっても良いんだけど。
778 :
名前は開発中のものです。:03/12/26 11:30 ID:FaDIMQyf
質問 (。・_・。)ノ
DirectPlayの利点が良くわからん。Socketで独自AP層実装するのに比べて何が良いの?
それがサクっとできる人には無用の長物かと。
780 :
名前は開発中のものです。:03/12/26 13:39 ID:FaDIMQyf
>>RPG開発中
で、それが
>>765 に対するアドバイスなのか?
>>778 WindowsやUnixに強度に依存させないために用意されてるんじゃないの?
DirectXにさえ対応していれば、BSDソケットをサポートしてない環境でも開発できるように。
もちろん、事実上そんなプラットフォームは存在しないんだけど
ワロタ
XBOX...
>>769 小学生でもベクトルと言う言葉を知らなくても概念的なものは
カンのようなもので理解してたと思う
そのあたりは算数、数学のセンスなのかもしれない
ちょうど方程式と概念的には変わらない「○+3=5 さて○には何が入る?」
っていう問題が小学校の算数ですでに出るような、そんな感じ
みなさん聞いてください
ロールプレイングで敵と味方が戦って敵か味方のHPが0になったら
終了させたいのだが これはクラスを使って処理させたほうが賢明なのだろうか?
皆さんのこういったときどんなことをするのですか? ぜひ極意を教えてくれたらなぁ
と思います
駄文ですまん
あああああああああはやめたの?
786 名前:名前は開発中のものです。[hこpれkごpkspzkj] 投稿日:03/12/27 14:04 ID:/LeFILZK
みなさん聞いてください
788 :
名前は開発中のものです。:03/12/28 17:40 ID:bDUHUyQ0
dairectinputでキーを押している間○○の処理をする・・
ってなことできるんでしょうかもしあるんだったら教えてください。
おねがいします。
もう少し質問をわかりやすくお願いします。
>>788 メインループで
キーチェック()
if(キーが押されている) 処理()
>>789 >>790 すいませんわかりにくくて、
例えば
キーチェック()
if(キーが押されている)処理()だと
キーを連打してるみたいになると思うんですが
それだとなんかやりにくいので
if(キーが押されてる間)
押されている間のループ処理()
キーがはなれたときbreak
実際これだとできないんですが
これっぽいやり方があるなら教えてほしいと言いたかったのです。
しってたらおしえてくださいー。
スレッドを作ればいくらでもできるだろ。
>>791 while(キーチェック() == 押されてる){
やりたい処理()
}
これだとそれっぽいけど、
キーをチェックする間隔がやりたい処理に依存するよ。
ゲームならメインループをまわしておくんだろうから
前回のキー状態を保存しておいて、押された・押されたまま・離されたを
チェックするのがいいと思う。
char key押された;
char key押されっぱなし;
キーチェック() {
if (key押された = キー状態)
key押された = キー状態;
795 :
794:03/12/29 00:36 ID:FUYmq8vt
途中で書き込んでしまった・・・。
char key押された;
char key押されっぱなし;
キーチェック() {
if (key押された == キー状態) {
key押されっぱなし = キー状態;
} else {
key押されっぱなし = 0;
}
key押された = キー状態;
return;
}
メインループ() {
if (key押されっぱなし) {
押されっぱなし時の処理();
} eise
if (key押された) {
一回押されただけ時の処理();
}
}
796 :
788:03/12/29 00:49 ID:EhxFp05R
>>794 参考になります。ありがとうございました。
797 :
788:03/12/29 01:09 ID:EhxFp05R
>>794 またまたすみません。
上のプログラム参考にして考えてみたのですが
キーが離れたときの判定の仕方はどうすればいいのでしょうか?
//宣言
BOOL PushKey[256];
//Set
WM_KEYDOWN:PushKey[wParam]=TRUE;break;
WM_KEYUP:PushKey[wParam]=FALSE;break;
//条件
if(PushKey[VK_何たら]){
処理;
}
一つ前の状態を覚えておいて前回が押しで今回が離しなら条件成立。
でいいんでないかい?
っていうかこの状態ですでに聞きまくりだと、後で困るよ。
聞く前にまず何通りかの方法を自分で考えてみたほうがいい。
800 :
788:03/12/29 02:40 ID:EhxFp05R
そういうやり方があったんですか。さっそくやってみますね。
色々ご指導ありがとうございましたー。
ON
___| ̄ ̄ ̄|__
OFF
てな感じで、紙に書いてどんなタイミングだと、
「押した瞬間」や「離した瞬間」と判断できるか、シミュレートしてみるといいよ
状態用意しなくても
GetAsyncKeyStateでいいやん
>802
え?状態用意しなくても過去のキー情報か離した瞬間を検知するものがあるん?
GetKeyboardStateもいいよね〜
>>803 要件は「押している間」だけだろ?
その瞬間を検知する必要があるわけではない。
さらに
>>791とか見てもキー押下イベントを受け取りたいわけじゃなくて
状態をポーリングしてるんだからKeyState系のAPIだけで十分。
新米プログラマ「キーが押されている状態をチェックする方法は分かったんだ。
だけど、今度はキーが押されていない状態のチェックする方法がないんだ!」
新日プログラマ「キーが押されている状態の逆をやればいいんだよ」
新米プログラマ「逆?」
押されているならば、その状態を変数に記録、
押されていないならば、変数を調べて押されていたか知ればいい
こんな感じで
bool key;
...
if(GetKeyCheck() == true){ // GetSKeyCheck() : キーが押されているか? 押されているならtrue、押されていないならfalseを返す
key = true;
}
else{
if(key == true){
// ここにキーが離された時に処理するコードを記述
...
key = false;
}
}
>>807 BlackBoxキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
キーボードは大気にふれている限り、気圧によって圧されているのだよ。
IDまで圧されたかw
813 :
名前は開発中のものです。:03/12/30 19:03 ID:8NY1Jixm
質問させて下さい!
javaapplet でうまくキーが取れない… というか同時押しを認知してくれないんで、とても使いづらいんで、キャラクターがバリバリ動いてくれないんで、なにか妙案はないでしょうか?
んでんでんで
いんで、いんで、いんで
>>813 3年前に組んだコードで残ってた。動くか覚えてないけど、
こんな感じでやってみたら?
publicclassC_Keyboardimplements KeyListener{
publicstaticfinalintMAX_KEY= 256;
publicbooleankey[] = new boolean[MAX_KEY];
publicvoidClear(){
for(int i = 0; i < MAX_KEY; i++)
key[i] = false;
};
publicvoidkeyTyped(KeyEvent e){
};
publicvoidkeyPressed(KeyEvent e){
key[e.getKeyCode()] = true;
};
publicvoidkeyReleased(KeyEvent e){
key[e.getKeyCode()] = false;
};
};
多分リスナーに登録して、後は必要な時に調べたいキーコードを使って
C_Keyboard keyInstance;
AddListener(keyInstance); //???たしかappletで
if(keyInstance.key[VK_SPACE] && keyInstance.key[VK_LEFT]); //VKだっけ?
こんな感じで使ったような……
817 :
名前は開発中のものです。:03/12/31 02:12 ID:Fl7cRe53
ゲームなどで使われている独自文字入力欄[日本語対応]を作りたいのですが、、
どうやって実現してるのか謎です。DirectXでできるのかな?
誰か情報お持ちの方、些細なことでもけっこうですので教えて下さい。
>>817 Immなんたらっていう名前のIMEを制御するAPIあった気がするけど、それが役に立つんじゃないのか?
>>817 ふざけんなお前
検索すればすぐ出てくるだろう
ワロタ
>>808 おいおい
GetKeyCheck() != true
なんじゃないのか?
822 :
813:03/12/31 13:10 ID:S0g1wDUS
>>816 遅くなってゴメンナサイ、おかげさまでキャラクターがバリバリ動きます!
ありがとうございました。
追記、"key[VK_SPACE]" と書くとエラーみたいでした。
MIDIを使ってキーマニみたいなの作りたいんだけど、
何か参考になるページとかない?
825 :
名前は開発中のものです。:04/01/03 14:56 ID:UZ7OEUkf
よくタイマースレッドって言葉を聞くんですが、
これってビジーループしてタイマーを監視しつづけ、
変化があればメインスレッドに通知するスレッドのことですか?
これだとCPU使用率が100%になる気もするんですが、
それでいいもんでしょうか?
100%で構わない。
Nスク作者もその方法を薦めている。
そいや、smfを解析するための公開ソースって無かったっけ?
829 :
名前は開発中のものです。:04/01/04 00:42 ID:3jP9OI5L
>>828 Nスクの作者にたてつくつもり?
やめといたほうがいいよ、その道の権威なんだからさ。
ボコボコにされちゃうのが見えてる(藁
Nスクって何ですか?
Nステなら知ってるよ
834 :
名前は開発中のものです。:04/01/04 02:28 ID:ttqUyCpj
突然申し訳ありません
レスを読んできたところ、WIN32API環境において、
標準のキースキャンの方法は、いまだ分かりません。
directxを用いた方法は多分有効だと思いますが、
WIN32APを用いて、Iもしくはそれに準じた形の標準的なキースキャンの方法はあるのでしょうか?
私はMS-DOS時代、割込禁止設定、割込ベクタトラップ、MS-DOSキーバッファ潰し、
で生き延びてきました。
WINDOWS-NT環境初心者ですが何か良い解決方法があればレスお願いします。
コールバック関数でWindowsメッセージが送られてくるので、
そのうちWM_KEYDOWNとかそんな感じのメッセージを処理すれば
良かったんだと思う。
所謂標準のSDKでは。
836 :
名前は開発中のものです。:04/01/04 03:24 ID:ttqUyCpj
>>835 レスありがとうございます。
でもそれでは、左矢印キーを押しながら、右矢印キーを短時間押すだけで
停止する処理系になってしまうと思います。
PORT 9 (PC98)監視に準じたWIN32APIの処理系を再現したいと考えております。
何か良いアイデアは無いでしょうか?
いや停止はいないでしょ。
なんでそんな処理系になってしまうかわからん。
普通にキーの状態を取得するAPIとしては
GetAsyncKeyStateとかがあるけど。
838 :
名前は開発中のものです。:04/01/04 05:14 ID:vNXDyGpd
>>837 再びレスありがとうございます。
GetAsyncKeyStateの関数は以前から目を付けていくつかテストしておりましたが、
winmm.libとの絡みの問題と踏んでおりました。
while(1){}内のタイマ関数を少し見直してキースキャンプログラムを組みなおしてみます。
レス上の指摘どおり処理系の停止は無いとの前提で、
メインループの時間優先のコーディングと、
WM_イベントにおける時間差を考慮して組みなおしてみます。
良レスありがとうございました。
釣りなのか本気なのか区別つかん。
Nスクの作者?
葱板でボコボコに叩かれてたじゃん
Nスクは日本のスクール水着ってことだよ
>>838 だからメインループでろくにも変更されない変数を監視するなって言ってるんだよ
タイマー使いたかったらWM_TIMERをチェック
何?タイマーの精度が気に入らない?
OSの選択をそもそも間違っている
しかも他アプリケーションに迷惑かけるので、誰も使わんよ
せめてマルチメディアタイマーを使うか、
マルチメディアタイマーのコールバックだとデバッグしづらいのであれば、
マルチメディアタイマーでイベントシグナルを発生させるかすれば、
おおよそ1ms程度の精度は得られる。
> しかも他アプリケーションに迷惑かけるので、誰も使わんよ
そういうの神経質に言う人たまにいるけど、CPU100%使うゲームで迷惑喰ったことないな
裏でどんなアプリ走らせながらゲームやってんの?
それか電力消費の気になる携帯機とかの話してる?
>>844 > 裏でどんなアプリ走らせながらゲームやってんの?
ブラウザで Web の攻略ページ見てたり、メッセンジャーで話してたり。
Nスク作者様の登場だ。
皆、もてなすように。
>>845 ゲームがフォアグラウンドのままブラウザ使ったりしないよな?
インアクティブになったときにビジーループ止めればいいだけじゃん
Windows標準添付アプリのピンボールだってそうやってるぞ
メッセンジャーは使ったことないから知らん
ピンボールと併用して何か障害出るのか試してみてくれ
障害があろうが無かろうが、あまり人に勧めるもんじゃないと思うが。
>CPU100%使うゲームで迷惑喰ったことないな
俺は実際これで迷惑被ってる
CPU100%占有するアプリは迷惑この上ない。
Nスクってマジでそうなの?
>インアクティブになったときにビジーループ止めればいいだけじゃん
ちなみにNスクはこれをちゃんとやってるの?
> 障害があろうが無かろうが、あまり人に勧めるもんじゃないと思うが。
そう思うのはあんたの勝手。俺は
> しかも他アプリケーションに迷惑かけるので、誰も使わんよ
と書いてあったから、誰も使わなくなるほどの迷惑というのがどういうものか教えて欲しいだけ
>>847 > インアクティブになったときにビジーループ止めればいいだけじゃん
それもどうかと思うなぁ。ウィンドウがアクティブでないときでも動かしておきたい
処理もあるが、そっちだけイベントドリブンにすると話が面倒になる。
> インアクティブになったときにビジーループ止めればいいだけじゃん
だから、裏で起動してるブラウザとか IRC とか。IRC なんかは、ほかのユーザが
書き込んでくるのを眺めてたりするから、非アクティブ状態でも、スムーズに動いて
いてほしいのよ。
追記。WM_TIMER は優先度低すぎてアレだが、マルチメディアタイマと
PostMessage(), あるいは Sleep() 組み合わせて使うと、それなりの結果
が得られるぞ。
> それもどうかと思うなぁ。ウィンドウがアクティブでないときでも動かしておきたい
> 処理もあるが、そっちだけイベントドリブンにすると話が面倒になる。
あー、よくわかった
ゲーム自体を環境として動かすような、アップルタウン物語みたいなやつを言ってるのか
リアルタイムアクション系ゲームのことしか考えてなかったスマソ
> PostMessage(), あるいは Sleep() 組み合わせて使うと、それなりの結果
そうそう、とりあえずビジーループの中でSleep(0)呼んで残りタイムスライス放棄しとけば充分
ケイス・バイ・ケイス
まったく、死ねよ坊や達
> >インアクティブになったときにビジーループ止めればいいだけじゃん
> ちなみにNスクはこれをちゃんとやってるの?
長年にわたる研究の結果、ビジーループが最も効果的であるとの
結論に至ったため、Nスクはビジーループを採用しております。
これについての反論は受け付けません。
なんか必死に燃料を投下してるヤツがいるな……
CPU100%使うかどうかは、ゲームによりけりだろ。
俺の基準だと、フルスクリーンのゲームは100%でOK、
ウインドウで遊ぶゲームはNG。
例えば、さっくりブラウザ上で遊ぶゲームはNG、
本腰入れて遊ぶようなシューティングゲームはOK。
ま、でも、実際のところ、CPU100%でいい場合でも、
時間があまったらOSに返すような作り方にしてるけどな。
(フレームレート固定なゲーム作っとるのでな)
>>857 なんか知らんが勉強になりそうなスレだw
一番イイのはユーザーがCPU占有率決められるものだね。
実際にそういうゲーム結構あるし。
DirectShowが内部で用いている、
マルチメディアタイマーのイベントシグナルとスレッド併用が最も安定しているんだけど、
仕組みを解説している情報がWEB上に存在しないため、話題に挙げてもらえない。
863 :
842:04/01/05 01:22 ID:YhoVU3wu
自分の無知を棚にあげて言葉は一人前なんてどうしようもないな
エロゲーユーザーとその周りには分からんか 動けばいいもんね
恥ずかしくてレスもできんな
アホすぎて相手にもしたくない
高校生であることを祈る・・・
そこまで言うなら実例晒してくれよ。
842も言葉だけ一人前じゃないよな?
上ですでに書かれてますが何か?
>>865 書いたのは 842 じゃないし、俺は CPU 使用率 100% に見えても Sleep(0)
しとけばいちおー許せるんじゃないの、という程度の意見だが。
もっとも、CPU の発熱がきつくなってきて動的に CPU クロック制御が入ったり、
ノート PC みたいな環境を前提とすると辛いのは確か。
IRCの例を出してるから分かってるもんだと思ったよ
>>847 ピンボール見てみたけどこれ処理軽いなー
タスクマネージャーでCPU使用率見てるとごくまれに
2%になることあるけどほどんど0%表示だよ。
このソフトみたいに必要な分だけCPU使うでいいじゃない。
UDやSETIみたいなCPUパワーを提供するソフトを動かしてる人もいるだろうし
無理にCPU使用率を上げることも無いと思うけど。
オハヨー
>>868 そう? 俺、Athlon1.3G+Win2Kで試したけど完全に100%に張り付くよ
別バージョンがあるのかな。何で試した?
必要な分だけCPUをつかう、それ以上は使わない、でいいじゃん
Sleep挟んだって結局はなにもしないのにCPUつかってるにはかわりねえんだろ?
HLT発行までやるのかい。至れり尽くせりだな〜。
まあ、そういうことですな
・・・OSがやるけど。
Windows98ならあるいは意味があるかもしれん。
ソフトウェアクーラーなんてのが出るくらいだしな。
>>860 ユーザーが決めるって、
結局windowsのタイマー系のAPIで時間を取得して
その後Sleepで空けているだけだから
Sleep精度に依存し、精度の維持なんてできるもんじゃないと思うんだが。
875 :
868:04/01/05 14:08 ID:oyfGmKof
>>869 ウチのは Pen4 2.2G + WinXP SP1
プレイ中だろうが非アクティブ時だろうが
常に0%になってる。(ということは0.5%未満?)
ウチのWin2k+SP4付属のピンボールもも0%だ。
877 :
869:04/01/05 15:15 ID:yNwoTOXR
>>875-876 俺だけか? 試しにメーカー製PC(LogitecのP4 2.66G+Win2KSP3 素のまま)でやってみたけどやっぱ100%。。。何が違うんだろ
>>877 とりあえずそんな環境のマシンでこの話題に入ってくるのは
やめたほうがいいと思う。
原因はビデオカードくさいけど。
垂直同期待ちでドライバ側の処理が、CPUを全力で使い切るか否か。
いまだにそんなドライバ作ってるメーカーあるのか。
でもとりあえずピンボール起動してもらって
くそボードの判別はできるな。
881 :
877:04/01/05 17:57 ID:yNwoTOXR
くそボードって・・・845にIntel純正ドライバなんだが
純正だろうがそうじゃなかろうがだめなものはだめだろ
オンボードは一部のゲフォやラデなんかを除くとオンボロボード。
特にIntelは最悪の部類。
884 :
880:04/01/05 18:42 ID:lWiXwM6T
どもです
今RPGを作っていて
マップ画面に主人公をテクテク歩かせるとこまで出来たんですけど
町の人を歩かせる方法はどうしようかと悩んでます
主人公を歩かせる処理の間制御が返ってこないので
町人は別スレッドで処理した方がいいのでしょうか?
皆さんはどうしてますか?
一応、歩行処理のソース載せときます
while(マウスクリックされた場所 != 主人公が今いる場所){
// 障害物が無いかをチェックして一歩進む関数です ↓コレ
vido 主人公歩く(マウスクリックされた場所, &主人公が今いる場所);
}
今なら言える!
RPG作るのはまだ早すぎる!
制御返せよ!
RPGどころか、単純なアクションゲームも無理であろう。
890 :
886:04/01/05 22:16 ID:lFA9gtSZ
>>RPG作るのはまだ早すぎる!
でも作ります
>>制御返せよ!
気合で頑張ります! ;;
危うくスレッドに逃げ込むとこでした
別スレッド作らなくても制御返す方法があって
なんとか出来るんですよね?
888さん、ありがとう御座いました。方法探してみます
891 :
886:04/01/05 22:20 ID:lFA9gtSZ
>>RPGどころか、単純なアクションゲームも無理であろう。
酷っ!
なんでwhile()やねん
893 :
名前は開発中のものです。:04/01/05 22:57 ID:Pq1/G+f8
スレッドでいいじゃん。
タスク、ゲームで検索汁
セルフフェラ?
WindowsのバージョンによってのSleepやタイマの精度は検索すればすぐ出てくるよ。
とりあえず
>>886に足りないのは知識だね。
これが足りないうちはどんなに気合入れたって駄目さ。
ところで初心者スレで気軽に「まず作ってみろ」とかいう奴いるけど
駄目だろ実際。
どうやって作るかしらねぇんだから。
大抵は
>>886みたいな状況になるって。
#読めばキャラの移動ぐらいさくっと作れるサイトってもしかしてないのか?
>>886 町の人の動かし方はドラクエ型とトルネコ型ある。数値は例だが、
前者はユーザーの移動の入力に関係なく1秒毎に10%の確率でどれかの方向に移動する。
後者はユーザーが移動の入力した時25%の確率でどれかの方向に移動する。
後、主人公の移動をマウスで行うの?カーソルやテンキーの方が動かしやすいが。
>>900 いや、なんか的外れじゃねん?
>>886はまず「ゲームのメインループ」を理解するところからはじめなきゃいけないんだから。
902 :
900:04/01/06 07:19 ID:fKPJ/8Aq
>>901 スレッドとか専門用語を使っているから
>>886氏は理解していると思ったのだけど、
どっちなんだろう。勉強の入り方が違うのかな。自分はprintf、scanfから
入っていく本だったから、マウスイベントもスレッドも何年かたってから知った。
どこまで理解して無いのか判らない人に説明するのって難しいな。
904 :
900:04/01/06 09:22 ID:fKPJ/8Aq
>>902 いや、こんなもんでいちいちスレッドなんか作る必要なんかないでしょ。
まあ使うにしても、まず、スレッドなしでどういう仕組みで動かせばいいのか
知らないとバグが多くて苦労するだろうし。
キャラクターごとにスレッドを使うと、タイミングを制御するだけで凄まじい苦労をすることになる。
まさに骨折り損のくたびれもうけ。
しかも複数のスレッドが制御を返さずに10msのタイムスライスを使い切ると、OSクラッシャーと呼ばれることであろう。
907 :
900:04/01/06 10:36 ID:fKPJ/8Aq
>>903 でも始めは知っている事と知らない事がはっきりしているから
しょうがないとも言える。自分もスレッドを使った事が無かった事で、
文章に使っていたのを見て結構暦があるのかなと思った。
>>904 NscはEscに訂正。
>>905 なるほど。そういう意味ででね。
>>906 逆にスレッドを使わないと乗り切れない場面ってある?
自分はまだないからスレッドを試す機会が無い。
ある
無いと思うならそれでいいんじゃね?
909 :
900:04/01/06 11:16 ID:fKPJ/8Aq
>>908 まーそうだけど・・。どうもです。
組む時、意識して使えるか考えてみたりして理解しようと思います。
>>909 曲や声のストリーミング再生とか
なうろーでぃんぐの文字を表示するときぐらいじゃねーの?
スレッドなんて使うときって。
あと、データの先読みとかもそうなのかなぁ。(まあ、そんときになったらで十分だな)
911 :
900:04/01/06 15:21 ID:fKPJ/8Aq
>>909 なるほど。処理の流れが大きく違う時に使うのですか。
なら、対戦ゲーのCONの思考とかの時にも使うのに有利かも。
そういえばビープ音を再生するプログラムを作っていて質問した時、
マルチバッファで作ると言った時、スレッドを使うと良いと言われた事があった。
その時はよく意味が分からなかったが、曲を流す部分を作るために
使うのではなく、曲を流す部分と曲の再生、停止、曲を選ぶ等のその他の部分とを
分けるために使えという意味だったのかも。
たいていはタスクシステムでなんとかなるからねぇ>アクションゲーム
俺は擬似タスク使わない主義だな。
どっちかっていうと複雑になるのは色んなオブジェクトが影響しあう部分だから
この場合擬似タスクはあんまり役に立たないどころか返って複雑にしてしまうかもしれないね。
細かいが CON じゃなくて COM な computer
検索したらスペルミスが山ほど沸いてきた
製作技術とはちょっと異なるかも知れませんが、質問させて下さい。
あるRPGで、
攻撃力に関するステータスの「STR」と「武器の攻撃力」の2つの要素から、
キャラの攻撃力が決まるのですが、その過程となる計算式がどうしても特定できないので、
その手のことに詳しい方を探しています。
ここのスレで質問してもよろしいでしょうか?
スレ違いでしたら誘導お願いいたします。
>>917 コルムオンランというネットゲームです。
ttp://www.corum.jp/ (力、武器攻撃力、キャラ攻撃力)のサンプルとなるデータを
沢山集めて特定しようと思ったのですが、
どうも計算式の中に力の2乗が含まれているようで苦戦中。
(グラフ描いてみたら力と攻撃力の関係が曲線になってしまって…)
「俺にまかせろ」「とりあえず見せろ」という方がいらっしゃいましたら、集めたデータを晒します。
スレ違いならすいません。
非公開な内部パラメータとか使ってる事もあると思うが。
>>918 ありゃりゃメンテ中だ(w。どんなゲームなんだろう。
ひとまず「とりあえず見せろ」を発動します。
>>919 分かりにくいのはとことん隠そうとする傾向にあるからね。
ネトゲの解析はネトゲ板でやれば?
見た感じチートと個人晒しくらいしかスレ建ってなかったが。。。
ダメージは変わるかもしれませんが、
ステータス画面に表示されるキャラの攻撃力がそうコロコロ変わることは無いと思いますので、
計算式を探っています。
あと、対象が一応ネットゲームなのですが、
内容がパケ解析などとは異なるので、こちらで質問させて頂きました。
どっちにしろ板違い
926 :
919:04/01/07 14:12 ID:+5UXFvcP
>>916 武器の攻撃力のサンプルが足りない。
STRは30未満はないのか。
キャラクタの他の公開パラメータも教えれ。
レベルや職種(スキル)があると専用の補正があるかもしれない。
とか色々とありますが。
正直出せないと思うけど。
結局何がしたいのかわからん。
スレ違い
>>921 小数が多く混じっていてかなり難しそうな計算式。
エクセルファイルは無いから見れん・・。
>>922-923 過疎板だしむしろタネになって良いとも思うけど、確かにネトゲを
長い事やって感覚をつかまないと計算式を検討する事は難しいからね。
>>924 あれだけ難しい計算式を使ったゲームを作った人はここの板には
あまりいなさそう。それに隠すために複雑にしていると思われるから、
知っていても教えてくれないかも。自分のゲームは簡単な計算式だから、
逆に難しいのに興味があるのだけど。
スレ違い、板違いの指摘が多いので、
ネットゲーム板のコルムスレに行ってきます。
どうもお手数かけました。
難しい計算式なんて使ったっていいことないだろ。
解析って言ったのは別にパケットを読むわけじゃなくて
ダメージ算出方法なども含めてなのだが、分析と書いたほうが適切だったか。
ラグナロクオンラインのように人が多ければそれなりに情報集まる
んだろうけどねぇ。
複雑にして時間稼ぐタイプのRPGだな
殴る相手の防御値が計算式に入ってない
ボーナスダメージの存在
エクセル読めない
ランダム要素の存在
属性もあるかもしれん
>>931 ちょっと汚くなってしまいましたが、HTMLでも用意しました。
今回特定したいのは、キャラのステータス画面に表示される値で、
実際に敵に対して与えるダメージではないので、
ボーナスダメージの存在、殴る相手の防御値、に関しては考慮していません。
なんでこんなに複雑なのか。。。_| ̄|○
自己中消えろ
どうしてそういうことを言うの?
板違いだというのにいつまでもやってるからだろ
せめて雑談スレでやてくれ。
って、総合雑談スレッドって無いんだね、この板。
なんでこの板こんなに廃れているんだろう…。
916が心配で理系全般板から来たんだが・・・酷い有様だな。
どうしても板違いと言い張るのなら彼にはこっちに戻ってもらうがよろしいか?
言い張るも何も、
>>916の話題が板違い・スレ違いでなければなんだというのだ。
板違いじゃなくて、スレ違いだろ。
他のスレ行ってこい。
本人がコルムスレに行くと言ってるのだから
この話題はもう終了でいいでしょ。
ちょっと遅いががんがれ900ヽ(`Д´)ノ
944 :
名前は開発中のものです。:04/01/09 11:06 ID:7QXNfJ34
回転した長方形同士の当たり判定はどうすればいいでしょうか?
シューティングゲームなんですけど回転させたはいいが当たり判定が
わからなくなって困っています
一応、当たり判定を円にして凌いでますが正方形ではなく長方形のキャラや
大きなサイズのキャラではおかしくなってしまうのでキッチリ調べたいです
片方が回転しない場合はうまくできるのですが・・・
よろしくお願いします
フィーリングで答えるけど、多角形同士で判定すればいいような気がする。
一方の多角形の各頂点が、もう一方の多角形の中にあるかどうかチェック。
多角形の内外判定についてはぐぐってちょ。
BGアニメーションについてなんですが、一般的にはどんな手法で行われて
いるのでしょう。
アニメーションのパターンを描いたマップ(1画面サイズ)を幾つか
用意して、パラパラ漫画のようにマップを切替えているんでしょうか。
それともチップ単位で切替えているんでしょうか。
キャンパスに絵を描くことについてなのですが、一般的にはどんな手法で行われているのでしょうか?
油絵でしょうか。
それとも水彩でしょうか。
そろそろ次スレ立てたほうが良くない?
>>949 回りくどくて申し訳ありません
知りたかったのはゲーム用ハードで言うところの、バック
グラウンド画面でのアニメーションについてで、私が想像するに
・アニメーションの対象となるチップ(セル)の位置
・どのチップと交換するか (パターン数分必要)
・交換のタイミング
などのデータをどこかに持たなければならないと思いますが、
業務用ゲームなどのプログラムでは、そのようなデータが
どこでどのような形式(フォーマット)で管理されているのだろう
と思ったのです。
>>951 統一規格があるわけでもないし、一般なんていわれるようなフォーマットは無いだろ
そもそも最近のハードはスプライト搭載してないのが一般的で
バックグラウンドとその他のイメージに区別がない
>>950 辺と辺の交差だと、一方が完全に他方の中にあるときにアウトかと。
長方形の頂点がもう一つの長方形の中にあるかどうか(逆も調べる)、でいいのかなぁ。
各頂点と各辺で外積とって。
955 :
954:04/01/10 15:45 ID:ybYip7bn
と、書き込んだ途端に検出できない状態を思いついた……。
お勧めの擬似乱数を教えてください。
rand()
MT乱数
シフトレジスタ法
960 :
956:04/01/11 02:06 ID:zs1Esb13
>>957,958,959
ありがとうございます。調べてみます。
ところで
for (int i = 0; i < 3; i++)
{
r = rand() % 4;
if ( r == 0 ) x[i] += 0.3f;
if ( r == 1 ) x[i] -= 0.3f;
if ( r == 2 ) y[i] += 0.3f;
if ( r == 3 ) y[i] -= 0.3f;
pDC->SetPixel(x[i], y[i], c[i]);
}
というコードでテストをしたところ、こんなものが
http://wind.prohosting.com/osentaku/cgi-bin/clip/img/147.png 擬似乱数ってこんなもんなんですね。
>>960 rand()の質は環境によってものすごく違う。
まともな奴でもある程度の周期性があるけど、
本当にひどい奴だと下位1桁は01010101......とか。
とにかく速度が必要というのでもなければ
>>958のMT法(正式名称はMersenne Twister)で安定。
剰余は乱数の性質を大きく損なうから除算にしろって
963 :
956:04/01/11 12:05 ID:zs1Esb13
イギーの呪いだ
>>966 ホントだ!!!(((( ;゚Д゚)))ガクガクブルブル
968 :
名前は開発中のものです。:04/01/16 04:22 ID:rec3Qj4n
やねうらおのCMicroThreadって
ローカル変数へのポインタを外に渡したらだめぽ?
実行中のマイクロスレッド以外のスタックは別のところに行っちゃってるんだよね?
どうなんでしょうか?
やねうら某