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

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

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

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

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

■前スレ
シューティングゲーム製作技術総合 2機目
http://pc5.2ch.net/test/read.cgi/gamedev/1073736474/
0027名前は開発中のものです。04/06/17 15:11ID:oW8I/UQn
洋物FPSのBOTがどんなロジックで動いてんのかは知らんが、
学習型にするというのも一つの手。
0028名前は開発中のものです。04/06/17 16:56ID:VHtkJJnp
学習アルゴリズムだけでコードの7割くらいになりそう
0029名前は開発中のものです。04/06/17 18:12ID:TJI/qepq
対戦格闘なら相手にして楽しめる程度のCPU組むのも比較的楽なんだが、
STGの、おそらく大部分が弾避けに属するようなのは、
実用で作れるんだろうか。今のところ議会制弾幕回避機関が先端か?

BOTをユーザーがプログラミングできるTSSクローンがあったとして、
それのCPUをまともに組めるかどうか。
原作の嘘避け連発があまり楽しくない、というところからこの問題はスタートしてるようだが…。

対戦格闘程度のCPUで十分楽しめるような対戦STGの仕様を組んだほうがいいか?
撃ちと避けが入る以上、かなり無理っぽい気がするが。
0030名前は開発中のものです。04/06/17 18:42ID:UsJOGb+R
対戦STGか
一応「ネットやろうぜ」の時にこれはというのがあったけど、
検索してもほとんど出てこん
0031名前は開発中のものです。04/06/18 01:27ID:pfXTMUD5
おたがい一度に1発しか撃てない対戦STG、というシステムなら、
対戦格闘のCPUと似たような作り方ができるかもな
それが面白いかはワカンネ
0032名前は開発中のものです。04/06/18 02:25ID:bbeJa3m8
ペンギンクンウォーズって対戦STG?
0033名前は開発中のものです。04/06/18 02:48ID:uyuJ/Q8r
オフコース
0034名前は開発中のものです。04/06/18 07:29ID:w3CPdfBj
何となく対戦グロブダーっぽい感じで想像してみるが、確かにうそ臭い回避だけなら比較的何とか
なりそうかもしれない。しかし、位置取りでオプション類を配置したりとか敵回避方向への
先読み弾の発射とかいった事になると、ちょっといい方法が思い浮かばない…
00352704/06/18 14:59ID:xHeZzj8T
>>34

何手先までも読むシューターに追従するのは苦手であるが
例えば10秒間生き長らえるための安全領域探索木なら
それほど大きくはならないし、高速だよ。
00362504/06/18 15:00ID:xHeZzj8T
ワリ。私は>>27じゃなくて>>25
0037名前は開発中のものです。04/06/18 15:16ID:+waD84AQ
あまりベタな弾避けアルゴリズム組むと、常時ドット単位・フレーム単位の神避けとかされそう。
00382504/06/18 15:22ID:xHeZzj8T
>>37
濃密な弾幕の中から「回廊」を見つけ出し「すり抜け計画表」を立てるのは
なかなか骨が折れると思うよ。最初の頃は明らかに行き止まりの「死の回廊」を
見つけ出して得意げに突っ込んでいくから(苦笑
探索ステップに上限を設けるので調整によってはヤケッパチ行動になりやすい。
00392504/06/18 15:25ID:xHeZzj8T
ゴメ。補足すると上記の方法論は厳密には弾除けとは別の部分です。
大局的な振る舞いを決定するためのルーチンです。ボードゲーム的で
面白いよ。
0040名前は開発中のものです。04/06/18 16:22ID:GSQH9Ei4
>>34
普通の偏差撃ち(相手が等速直線運動を続けるという前提のやつ)
でない場合の話か。その辺になると予想(博打)撃ちの世界に入っちゃうんだよね。
#相手が回避できるエリア(円)に満遍なく撒く必殺射撃は除くw
俺がやったことあるのは、相手の回避方向(の癖)を記録してフィードバックする
という単純な方法。たぶん、発展させれば相手の回避曲線まで記録するカンジ
になるんだと思われ。まぁ、STGはモデルが単純化されまくってるからサンプリング
できる要素も少ないし。比較的組みやすいのでは。

>>38
>明らかに行き止まりの「死の回廊」を
>見つけ出して得意げに突っ込んでいく

ワロタ
0041名前は開発中のものです。04/06/19 03:15ID:LIZprrue
縦シューつくってるんだけど、パワーアップ削ろうか悩んでる。
パワーアップあってもあんま意味ないんだよな。
死んでもその場復活でパワーアップアイテム拾ってほぼ元通りになるし…。
0042名前は開発中のものです。04/06/19 03:18ID:MK2Z4Ehq
パワーアップが出ると「パパパパワーアップ」が聞ける!



それだけだけど
0043名前は開発中のものです。04/06/19 04:35ID:5+1QYWlO
パパパパウァアッッ(・∀・)ガイジンサーン
0044名前は開発中のものです。04/06/19 09:04ID:fs4N6NKG
最初からフルパワー状態で、やられてもパワーダウンしない方がいい
攻撃が激しい終盤でやられて、最弱な状態からプレイ汁というのは酷だ
フリーや同人、アーケードでパワーアップ制にしている所は猛省して欲しい
0045名前は開発中のものです。04/06/19 09:33ID:BsxkmCMW
グラディウスとかみたいにフルパワーノーミス前提で作られてるならいいけど
最近の一般人にはノーミスクリアが難しい弾幕シューだとあんまり意味ない気がする
死んですぐにパワーアップアイテム出るならそもそもパワーダウンしなきゃいいし
あとパワーアップなしなら敵の体力の調整をしやすいって利点もあるな
0046名前は開発中のものです。04/06/19 09:57ID:VrZX8wM9
ふと思いついた。
空中でうろついてるパワーアップアイテムが弾を防いだら面白そうだ。
何十発か当たると壊れるようにして、すぐ取るかぎりぎりまで盾にするかのジレンマが。
バランス取りは大変そうだけどな。
0047名前は開発中のものです。04/06/19 10:59ID:UDCH0lYH
最近のケイブとかのパワーアップって単に序盤の弱い状態が強くなるという満足感を
得るための演出なんじゃない? やられても2,3個アイテム出るし。

0048名前は開発中のものです。04/06/19 11:59ID:/MxA8wAn
パワーアップの効果が微々たるものでも、自機の攻撃の見た目の変化がちょっとした楽しみになったりはする
弱い装備でやれることが少ない状態でプレイヤーをシステムに慣れさせ、
本来の複雑なシステムへパワーアップで段階的に発展させてゆく、という方向もある

作りたいゲームの方向によってパワーアップの要不要は大きく変わるし、作っている間でも変わるだろう

シルバーガン、斑鳩、ボーダーダウン…
単純パワーアップを廃したシステムがわかりやすいのって他に何があるかな

>>46
ギミック系にならさほどバランス気にせず取り入れられるかもね
0049名前は開発中のものです。04/06/19 12:28ID:MK2Z4Ehq
式神2もパワーアップ無いよ
ケツイも無いに等しい(死んでも即時パパパパウアッだから)
0050名前は開発中のものです。04/06/19 14:15ID:vQYTTem5
システムがわかりやすかどうかは疑問だが、同人ならOOHかな
最初から特殊兵器てんこ盛り
0051名前は開発中のものです。04/06/19 15:50ID:3Ym24Nqp
最近の縦だと、俺が知ってる範囲ではアーケードSTGでもパワーアップに
意味があるなと思えるのって無いんだよなあ…。
0052名前は開発中のものです。04/06/19 18:02ID:aGErBpFp
パワーアップって昔はゲームを易しく(有利に)するフィーチャーだったけど、
それだと上手い人ほど有利になってしまう、というジレンマをなんとかしようと
した結果、事実上パワーアップの意味がなくなったんだろうな。

ちょっと前は、パワーアップすると難易度が上がるので、1段階で止めとけとか。
0053名前は開発中のものです。04/06/19 18:36ID:YWlxQVDJ
チマチマとした攻撃力で雑魚のショボイ攻撃にも恐々としながら
避けてかわして耐えに耐えてやっとこパワーアップし、
アリンコをゾウさんが踏み潰すがごとく、さっきまで必死にかわしてた
雑魚を一掃できたりするところに爽快感がある。気持ちイイのれす。
これパワーアップの醍醐味なり。
破壊力があがることで
ゲーム性は低下する。よってすくなからず難易度はあげる。これ定石。
しかし雷電はこれどうなのかね・・
0054名前は開発中のものです。04/06/19 18:52ID:3Ym24Nqp
>>53
なぜ雷電がここで出てくるのかわからんけど、少なくとも最近のゲームは
最初ヌルいのであまりそういう感じしないんだけどな…。
後半は死んでもパパパパウァアッッだし。だからこそパワーアップシステム導入の
是非を考えてるんだけど。
0055名前は開発中のものです。04/06/19 21:57ID:PPot1Dwu
ダライアスとか延々とパワーアップしていくやつは事実上残機無用
だったと思うけど、続編作る上で問題にはならなかったのかな?
0056名前は開発中のものです。04/06/19 22:19ID:3Ym24Nqp
初代はショットでもまだミサイル>レーザー>ウェーブ等とあって
パワーアップの意味があったけど、IIなんかは中盤で死んだら最後までいっても
フルパワーにならないというシステムだったな。
あんま深く考えてないと思われ。
0057名前は開発中のものです。04/06/19 22:44ID:4pm1S1OR
死んだらパワーが思いっきり奪われるということで、
上級者に刺激を与えているのではないかと。
0058名前は開発中のものです。04/06/19 22:46ID:Z2pn+NBC
いまさらな話題だが聞いてくれ。

俺の方法はB宗一派に入ると思うのだが、
int time_table[] = { 16, 17, 17 }; のようなテーブルを用意して、
タイマーを調べて delta_t >= time_table[count] のときに画面を更新している。

これと同じような方法を使っている例は見たことがないのだが、
2Dゲーを作る場合には、この方法でもいいのか?
0059名前は開発中のものです。04/06/19 23:18ID:KfSZI/tC
なんというかそれは非常にレベルの低い解法だな。
ぴったり60fpsにしたいというならもっと良い方法がある
0060名前は開発中のものです。04/06/20 00:16ID:xxsbIohI
サンクロとかボスで死ぬと思いっきり萎えたな。
最近はその辺に気を使ってるのかな。>その場復活のアイテム
0061名前は開発中のものです。04/06/20 00:23ID:NgwUMUOo
>>58
逝ッテヨシ。googleヲ用イテ自己解決セヨ。義務。

キーワード:

サンプリング周波数
ナイキスト周波数
aliasing-error
固定小数点演算
bresenham's algorithm
マルチスッドレ
0062名前は開発中のものです。04/06/20 00:43ID:NgwUMUOo
嘘。逝かなくて(・∀・)イイ
int time_table[] = { 16, 17, 17 };  ←下駄を履かせるとイイ
あとはスクロールのガタツキを改善するための工夫をすればイイ。
0063名前は開発中のものです。04/06/20 00:47ID:JrKJOMHs
ぶっちゃけ浮動小数点でやってる俺はまんどくさすぎな人間
0064名前は開発中のものです。04/06/20 00:49ID:NgwUMUOo
フルスクリーン等の環境ならほぼ確実にV-SYNC待ちが入るので
誤差蓄積は無いし、問題ないのでは。
006564訂正04/06/20 00:55ID:NgwUMUOo
V-SYNC待ちを指定する場合は誤差蓄積を容易く回避できるし。
0066名前は開発中のものです。04/06/20 01:18ID:zSzztZMs
>>57
上手くなってきて稼ぎとか始めた場合や、
普段死なないところでミスしたら捨てゲーすると思う…。
0067名前は開発中のものです。04/06/20 05:04ID:lH+yFIWz
>>66
死んだときに後になればなるほど高得点が入るようにするとか・・・。
この場合、ボス戦で死ぬのは駄目。道中で死ぬことによって点数増加。
この点数は、ラストの残機ボーナスより(最終面で死んだ場合は)多くなるようにするとか
んで、死ぬことによって1、2段階ずつパワーダウンしていく。

ドドンパチでこれを考えると
緋蜂戦に入る前にぎりぎりまで残機を減らしたほうがいいわけだが
それだと、全一を目指そうとすると、緋蜂発狂モードに未パワーアップ&残機数無しで相手しなければならない。

こんな感じで、安全をとるか、点数を取るか。
とかにしてみるのも面白いやも。
あとこれだと後半で死んでも捨てげーにならない、と、言う利点ができたりするわけですが・・・

どんなもんやろ?
0068名前は開発中のものです。04/06/20 05:16ID:zSzztZMs
そこまでしてパワーアップの必要性を作ることもないんじゃない?
そういったゲーム性はまた別の組み方があると思う。
0069名前は開発中のものです。04/06/20 05:18ID:cSwmhxCc
死んだら敵機よろしく得点アイテムを吐くわけな。自機が。
特定のポイントで死ねなかったら捨てゲー確定ですな(意味不明かもしれん)。
0070名前は開発中のものです。04/06/20 05:49ID:zSzztZMs
あと、あんまり高いリスク→高得点を詰め過ぎてプレイヤーにストレスばっか
与えると、根本的につまらんゲームになりかねん。
0071名前は開発中のものです。04/06/20 05:59ID:JrKJOMHs
残機潰したほうがスコアが稼げるというゲームは実際にあるわけだが
そして不評なわけだが
0072名前は開発中のものです。04/06/20 06:32ID:zSzztZMs
えーとガンネイルとか?
ちがったっけ
0073名前は開発中のものです。04/06/20 07:11ID:BlbgnF66
>>54
なんだろね?
雷電は結構、パワーアップ重要だったと思うけど(復活ゲーだし)
多分、ボス前のショット>レーザーのバランスの事とか?

、、そろそろ、2ヶ月あまり停滞していたSTG作りを再開します。と自分に言い聞かせ、、。
とりあえず、安易な縦シューサンプルが動く所までを目標に、、。
00745804/06/20 08:19ID:eF3refHy
>>59
そんなにいい方法があるのなら、ぜひ聞かせてほしいが…。

>>61
キーワードはググりました。
固定小数点使ってもある程度の誤差は免れないと思う。
俺の方法よりはマシですけど。

>下駄を履かせるとイイ
無駄足は踏まさせてます。
if(〜)
{
before_time = time_table[count] - delta_t + now_time;

>V-SYNC待ち
完璧にV-SYNCが取得できるなら苦労しませんが。
まぁオプションで指定してもらえれば作る側は楽だが、そんなのめんどうだし。

>>63
そうですかね?浮動小数点でも有効数字の範囲なら同じに見えますが。
0075名前は開発中のものです。04/06/20 10:55ID:RCj90FIX
>>59
自分も聞かせてほしいです…
0076名前は開発中のものです。04/06/20 16:05ID:I9qRqgm/
じゃあ簡単に解説

まずWin32タイマー精度が1000ms分解能
ほしい精度が1000/60ms=50/3ms分解能

dword time_prev_mul3; // ワンフレ前の時間
dword time_cur_mul3; // 現在の時間
dword time_remain_mul3; // 誤差蓄積時間

void FpsTimer60::wait(){
  while((time_cur_mul3 = timeGetTime()) *3 + time_remain_mul3 - time_prev_mul3 >= 50);
  time_remain_mul3 = time_cur_mul3 - time_prev_mul3 - 50;

}


remainが大きくなりすぎたら一旦remainを初期化したりする処理
連続49/3日稼動をまたぐ時の処理は省略

…という方法
これでうまく動いてるんだけどどうや!
0077名前は開発中のものです。04/06/20 16:07ID:I9qRqgm/
かってに送信された。一行追加

void FpsTimer60::wait(){
  while((time_cur_mul3 = timeGetTime()) *3 + time_remain_mul3 - time_prev_mul3 >= 50); // 松
  time_remain_mul3 = time_cur_mul3 - time_prev_mul3 - 50; // 誤差を記録
  time_prev = time_cur; // ワンプレ前の値として記録
}
0078名前は開発中のものです。04/06/20 16:23ID:9GKIat6R
QueryPerformanceCounter は使ってはいかんのか?
0079名前は開発中のものです。04/06/20 17:01ID:65EGUQxQ
別に構わんと思うけど、1回の呼び出しに1us位掛かった気もする。
0080名前は開発中のものです。04/06/20 17:11ID:NgwUMUOo
>>74
で、bresenham' algorithm は無視かよ。
0081名前は開発中のものです。04/06/20 17:12ID:NgwUMUOo
s/'/'s/
00825804/06/20 19:22ID:eF3refHy
>>76
ども。
3倍して誤差をなくしてるんだな。

>>78
いいんじゃね?
俺はQPCが嫌いだから使っていないだけ。

>>80
無視しているわけではない、使っていないだけ。
まぁ76のが応用だな。

76を参考にして作ってみたが、delta_tがdj。

DWORD before_time = timeGetTime(), now_time, delta_t = 0;

int wait_vsync()
{
    now_time = timeGetTime();
    delta_t = (now_time * 3) - (before_time * 3);
    if( delta_t >= 50)
    {
        before_time = now_time;
        return 0;
    }
    return 1;
}
で、
while(wait_vsync())
00835804/06/20 19:24ID:eF3refHy
追記、
今回は delta_t が使えないので誤差の蓄積は諦めた。

ちなみに>>74に書いたが、58のソースでも誤差の蓄積はしていた。
0084名前は開発中のものです。04/06/20 21:13ID:5pDtmEUg
76だけど
あのさぁ、わざわざ3倍してんのはremainに誤差を蓄積して後フレームで取り返すためにやってんのに
その処理なくしたら何のいみもねーだろ。
そもそもv_syncとか意(ry
0085名前は開発中のものです。04/06/20 21:14ID:DI+n1JlW
まだブレゼンハムとか言ってる人がいるのか。
タイマ周りなんて容赦なく浮動小数使えばいいのに。doubleで1=1秒で。
0086名前は開発中のものです。04/06/20 21:41ID:DI+n1JlW
const double FRAME_RATE = 60.0;
double gameTime = 0.0;
double gameDeltaTime = 1.0 / FRAME_RATE;

Boost::timer t;

while (true) {
  double currentTime = t.elapsed();

  if (gameTime > currentTime) {
    Sleep(gameTime - currentTime);
  }
  gameTime += gameDeltaTime;

  Update();
  Render();
}

こんなんでも基本に。
0087名前は開発中のものです。04/06/20 22:01ID:OU12cvDW
>>74
>完璧にV-SYNCが取得できるなら苦労しませんが。

んー。DirectX7以前ならフルスクリーンでは確実に同期できますが。
(できない珍種ビデオカード環境があるなら例をあげてみなさい)
 
更に、DirectX8以降に対応したドライバならウィンドウモードでも
確実に同期できますが。大抵はスキャンライン単位で情報得られます。
 
まさか、「CRT側のリフレッシュレートと同期できない環境」で
ノイズレスかつスムーズな2Dゲームプログラムを実現できるとお考えで?
 
>>83
>誤差の蓄積は諦めた。
 
まぁ、勉強中ということなら今回は諦めてもいいんじゃないか。
ただし、精度保証はちゃんとできるんで。数値計算の初歩本ぐらい
買うか借りるかして勉強したほうがいいと思うぞ。

>>85

いや、精度保証付きであれば何でも構わないわけだが。
話の流れ的にも整数演算のみでカタが付くことを58が
望んでる様子だからブレゼンハムって単語が飛び出たのであるし。
0088名前は開発中のものです。04/06/20 22:06ID:zSzztZMs
vsync同期前提で良いんじゃないかなあと俺は思ってんだけどね…。
綺麗だし。
00898804/06/20 22:09ID:zSzztZMs
あ、言葉足らなかった。
タイマはリフレッシュレートいじれない人用と考えて
そんな高精度じゃなくても良いんじゃないって話。
0090名前は開発中のものです。04/06/20 22:13ID:DOcz0XvB
ねーねー、誤差蓄積時間って書いてあるけど、
これって単なる前回誤差時間だよね?
0091名前は開発中のものです。04/06/20 22:55ID:ImnSjeb4
ウィンドウモードでVSyncに同期できるってのはどういうことですか?
例えば普段リフレッシュレートを85Hzに設定してる人が、
ゲームのウィンドウだけをVSyncに同期して60fpsで動かすことって不可能ですよね?
0092名前は開発中のものです。04/06/20 23:02ID:wt7FAzbI
>>91
私はA宗です。

B宗1派の苦労もB宗2派の不幸も知らないし知りたいとも思わない。
0093名前は開発中のものです。04/06/20 23:10ID:ImnSjeb4
A宗でしたかー。
009492=8704/06/20 23:13ID:wt7FAzbI
です。
0095名前は開発中のものです。04/06/20 23:40ID:JrKJOMHs
数値計算屋ならなおのことB宗にしそうだけどなあ。
#ゲームなんて超複雑な偏微分方程式みたいなもんだ
0096名前は開発中のものです。04/06/21 00:01ID:ufNKNDg5
でだ、俺B宗なんだけど、ちとA宗の人に質問。

このことを具体的にどう実装してるのか教えてくれ。
「同じ曲線軌道を取る弾を等間隔に連打して曲線を描く弾幕を作りたい」
もちろん軌道は微分形式で表されてる奴ね。

dt可変だと、連射弾の1つ1つの軌道が変わると思うのよ。直線弾ではなくて、曲線弾だから。
結局そんなもんは誤差の範囲ってことでごまかしてるわけかな?
(実際にプレイしてればそんなに気にならないだろうし、どうせ桁外れに小さい誤差だろうけれど)
00979604/06/21 00:04ID:ufNKNDg5
すまん、ちと要点がなんだかわからない文章だった。

要するにこれをA宗の実装方法でやるのに問題点は
「等時間間隔で発射すること」「全ての弾の曲線に同一軌道を持たせること」
の2つだと思うんだけど、実際どうしてるのかな、と。
009892=8704/06/21 00:13ID:LDPsXW0a
教義をよく読んだら、もすかすてA宗ってオブジェクトのパラメータ更新も
リフレッシュレートに同期させんと異端になるんか。私、原理過激派に抹殺されるかも(・∀・)

>>96
弾幕に関しては、お定まりのアニメーション再生ルーチンと同じでイケルぽ。
空間上のパラメトリック曲線上をナゾルっぺよ。Δtにあわせてスライダー上を
進むようなイメージだべよ。
009992=8704/06/21 00:23ID:LDPsXW0a
えーと、予定調和的な処理を簡素に作り上げるなら
ゲームワールドの更新に未知のΔtを使うのは嫌過ぎる。ってのは同意。
 
私は「滑らかな2Dゲーム、滑らかなスクロール」のために画面更新は
リフレッシュレートに同期させよう。というつもりでA宗だと思ってたプチ信徒ディス。
0100名前は開発中のものです。04/06/21 00:52ID:ufNKNDg5
>>98
アニメーション再生ルーチンってのが具体的にどういうもんだか分からないのだけれど…。
もしオブジェクトごとに非常に小さい固定dtの数値積分で求めているとしたらそれは本末転倒で、
初めからゲーム全体にクロックを与えて、そいつで駆動したほうが楽でよくない?
0101名前は開発中のものです。04/06/21 00:56ID:S8I9DCcV
>>98
よく、知ったかのゲーマーとかがバカの一つ覚えみたいに60fpsとかいうけど、
実際は59.97Hz前後だから、VSYNCに頼ったところで正確に60fpsにゃならないんだよ。
昔のゲームは、単に高速タイマがなくて、ターゲットのリフレッシュレートは固定だから、
タイミング取るのにVSYNC割り込み使ってたという単なる慣習だ。

PCだったら、タイマとトータルのフレーム数のカウンタを併用して、1/60fps相当で
必要な処理を通すようにゲームループ回して、絵の方をつじつまあわせりゃいい。
ちらつきが嫌ならVSYNC検出して、帰線期間に絵を書き換えりゃいいし、
そうじゃないなら洋ゲーみたいにフレームレート可変って感じで。
今のシューティングゲームは、負荷でスローが掛かる表現にしたって、ソフト的に
ウェイト入れてやるだけなんだから、無理してVSYNC使う必要はないんだよ。
0102名前は開発中のものです。04/06/21 01:05ID:p+RaFqmS
俺は敵の挙動を計算式で処理してないので
60FPS固定でやるしかない。
0103名前は開発中のものです。04/06/21 01:14ID:JKYmVFm9
ずいぶんと脱線をしている気がする。まあ、76と86が実用になることだけわかってれば問題ないよな。
リフレッシュレート85とかのCRTでのウィンドウモードで
伝統的57〜60FPSゲームを動かすのがお題目なんだし。
0104名前は開発中のものです。04/06/21 01:15ID:JKYmVFm9
あぁ、76-77と書いておかないと万一のとき大変だ。
010592=8704/06/21 01:30ID:LDPsXW0a
>>100
補足しようと思ったらかぶってしまった。

んーと、A宗原理過激派として実装するなら
弾幕に関しては予めシナリオが作られた打ち上げ花火なので
Δtを使った数値積分で軌道を決定する必要はないです。
Δtが未知なら避けるべきです。
010692=8704/06/21 01:31ID:LDPsXW0a
私はFLASH上で編集した弾幕を自作のエクスポーターで
出力させてるんですが、私のフォーマットは
座標値を補間パラメータとする空間上のベジェ曲線で軌道を表現しています。
この制御点には時間tなども入ってます。なぞるタイミングは、制御点間でtを
3次の多項式で補間しています。

ですので、Δtが例え未知の場合であっても弾の軌道が崩れることはありません。
010792=8704/06/21 01:40ID:LDPsXW0a
>>101
>実際は59.97Hz前後だから、VSYNCに頼ったところで正確に60fpsにゃならないんだよ。
 
おっしゃる通りです。
 
私はVSYNCに同期した画面更新なくして2Dゲームで滑らかスクロールは不可能
という立場を取りつづけますが、ゲームワールド更新に関してはその限りではありません。
0108名前は開発中のものです。04/06/21 01:54ID:CZlBnPbU
リフレッシュレートが59.97Hz前後なら同期で60fpsにならないの?
0109名前は開発中のものです。04/06/21 02:22ID:ufNKNDg5
アニメーションってソレね。ベジェ曲線は自由度は高いけれど実はそうでもないのよね。
要するに3次ベジェ曲線で表せるものしか表せないわけ。
俺が「微分形式で表したもの」って言ったのはちょっと表現的には間違いかも。
「微分形式でしか表せないもの」とか「積分がまんどk(ry」なもの。
計算屋なら数値積分がどんだけ楽か分かると思うんだけど、
それなのにA宗でパラメトリック曲線に頼るというのは、なんか変だなと思って突っ込んでみたのよ。
なんかリフレッシュレートっつーよりは数値積分のありがたみの話になっちゃったけど(笑)
0110名前は開発中のものです。04/06/21 03:16ID:3lNf6LDD
59.97HzはカラーNTSC放送の垂直同期周波数ってだけで、
PCがそうであるかどうかとは全然関係無いと思うんだがなぁ。
0111名前は開発中のものです。04/06/21 03:59ID:c2WK3wbx
>>110
厳密にリフレッシュレートを測定したことはないが
俺は一度、timeGetTime基準による「完全なる60Hz」で
V-SYNC完全シカト描画を行ったが、モニタ60Hz動作時
「前画面と新画面の境界線」がヌルヌルポ下がっていった。
0112名前は開発中のものです。04/06/21 04:38ID:3lNf6LDD
>>111
ガッ
それだとリフレッシュレートは60Hzより上という事ですな・・・。
0113名前は開発中のものです。04/06/21 08:20ID:KBm5y3SS
これからはデジタルディスプレイでいいんじゃ
0114名前は開発中のものです。04/06/21 08:22ID:HeiMivNg
最近の、書き込んである背景って、どう管理されてるか知ってる?
チップと一枚絵の中間という感じかな?
0115名前は開発中のものです。04/06/21 12:54ID:xW89oDgi
何を指して「管理」といってるのかよく分からんが
2、3人程度で趣味でやるなら難しい事考えずにチャランポランで平気だけどな。
例えば地上オブジェクト配置するときの命名規則とか。その程度だろ。

 1面.dat
 2面.dat
 3面.dat
 4面.dat

とかで、中身はレイヤー別に

 地上オブジェクトの配置情報
 地上静的構造物の配置情報
 背景ビットマップ
 
セコくやればレイヤー機能付きペイントツールさえあれば足りる。
0116名前は開発中のものです。04/06/21 12:55ID:xW89oDgi
s/地上オブジェクト/地上キャラ/
0117名前は開発中のものです。04/06/21 14:07ID:e++/Dzs/
絵の話?
書き込んである=2Dと解釈すると、ケイブだったら1画面くらいの大きさのチップ?を
並べてるんじゃないかなあ。あんまり同じ絵を並べてるようには見えないけど。
0118名前は開発中のものです。04/06/21 14:32ID:JKYmVFm9
作画のときにチップをいろんなかたちで並べて、データに落とすときに1枚絵にしてそう。もちろん複数レイヤー
0119名前は開発中のものです。04/06/21 16:18ID:Q8xwgw86
今はそういう力業というか、マシンパワーでごり押しみたいなのが平気で出来るように
なったからなぁ・・・。
16×16ドットでマップチップを作ってた時代が懐かしい。
まあそれでも、サウンドの容量に比べれば可愛いもんかも知れんが。
0120名前は開発中のものです。04/06/21 17:23ID:1qbJMgYw
RPGのレベルアップの意味もそのうち薄まってくるんかな。
0121名前は開発中のものです。04/06/21 17:59ID:3UEhFGgf
いやいや。
0122名前は開発中のものです。04/06/21 18:19ID:5Ni6y7O+
76のヤツって差が50以上開くまで待つんだから不等号逆じゃね?
このままだとprev_time_nul3が初期化されてなければ、
(now = n * 3) + (remain = 0) - (prev_time = 0)になって、
最初の呼び出しで永久ループだし、
ちょっと前にtimeGetTime()で初期化してたらwhile()で待たない。
01235804/06/21 19:11ID:xf+FXc2Y
俺の発言で誤解を招いてしまったが、俺はあくまでB宗一派。
>>84=76
3倍しているのは誤差蓄積の他に、俺の int time_table[] = { 16, 17, 17 }; のような
ばかテーブルを作成しないためでもあるのでは?
あと誤差蓄積を無視しているのではなく、delta_tが死んでいるので出来ないだけ。
そのうちソース修正する。
>>85=86
ソースupサンクス。参考にします。
>>87
いままでのソース読めば分かると思うがDirectXは使っていない。
> CRT側のリフレッシュレートと同期できない環境
それだからタイマ使うんじゃねーの。
実現は出来る。ある程度のマシン性能以上の環境ではな。
> 数値計算の初歩本
お薦めの本があるなら教えて欲しい。
安ければ洋書でも読む。
> 話の流れ
そういうことだが、拒みもしない。
>>88=89
> リフレッシュレートいじれない人
それが俺。
だから1000msぐらいは精度が出ないと困る。
timeGetTimeも微妙だけどな。
>>101
それはB宗だ。
>>111
興味深い。是非詳しく聞かせてほしい。
0124名前は開発中のものです。04/06/21 19:37ID:e++/Dzs/
正直もっと一般的な環境を前提に、一般的な環境で開発したほうが良いんじゃ…
0125名前は開発中のものです。04/06/21 19:54ID:xW89oDgi
>>123
だから、なんでDirectX使わないんだ?
0126名前は開発中のものです。04/06/21 21:02ID:LHnLYc3x
>>125
Macだからとかじゃない?
0127名前は開発中のものです。04/06/21 21:10ID:xW89oDgi
('∀`)
■ このスレッドは過去ログ倉庫に格納されています