アカウント名:
パスワード:
そもそも15FPSはどこの話なのかが問題。描画処理の話しなら入力とは別だから全く無関係。mainループが15FPSになるように調整しているなら関係してくるが。例えば昔のPCゲームとかするとFPS限界を設定してないのがあったりして、PCスペックの限界までFPSが上がってしまうのがある。200FPSとかでたりで。で、そういうゲームにFPSリミットをかけて60FPSにしたからって内部的には処理速度が大幅に余裕があるので制限掛ける前の200FPSで回ってたりする。ただ、描画部分だけは60FPSで回るように同期をとって表示するだけで。
ついでに必ずしも入力待ちをしている時に入力をするといったこともないので連打は早ければ早いだけ良い。
ファミコンだとVRAMのバスをCPUとPPUで奪い合うので、CPU側からVRAMに書き込めるのは垂直帰線の間だけ。DMAなんてイキなものもなく、横1ラインぐらいのBG書き換えが限度だった筈。
なのでゲームの作りもV-Syncで描画→次フレーム作成→ブランキング待ちのパターンがセオリーだったな。次のブランキングまでにフレーム作成が終わらない場合が、いわゆる「処理落ち」。
> 横1ラインぐらいのBG書き換えが限度だった筈
というかファミコン世代はそもそもラインバッファ方式ですから、横1ラインずつしか書き換えないハードウェアですね。これは水平帰線時間内の話なのでその間に書き換えきれない場合スプライトの描画が消えたりする。
ファミコンはPPUのポートにアドレスを叩き、あとはデータを叩く毎に勝手にアドレスがインクリメントされる単純なPIOですな。加算値は縦用に+32にも設定できた筈。これを垂直帰線の間に「できるだけ」やる感じ。垂直帰線内でスプライトDMAとどっちを優先するかは実装によるだろうけれど、普通はスプライトDMAでしょう。
水平帰線内はなんもやらない。0番スプライトの衝突を使って1フレーム1回なら拾えなくはないけれど。スプライトが8キャラ分以下しか横並びできないのはハードウェアの制限。点滅するのは、上記の場合に消えたままになるスプライトが出ないように、フレーム毎に描画するスプライトを変更しているため。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
サンプリングの問題 (スコア:2)
必要なのは正確さで、ちょっとでもタイミングがずれると抜けが出ますし、秒間16連射とか秒間17連射だとどんなに正確でも同期が取れなくなって所々抜けます。
そういう抜けが出ないような、16回押したら16回と認識されるような実装を作り込んだという制作秘話が面白そうです。
Re: (スコア:2, 興味深い)
そもそも15FPSはどこの話なのかが問題。
描画処理の話しなら入力とは別だから全く無関係。
mainループが15FPSになるように調整しているなら関係してくるが。
例えば昔のPCゲームとかするとFPS限界を設定してないのがあったりして、PCスペックの限界までFPSが上がってしまうのがある。
200FPSとかでたりで。
で、そういうゲームにFPSリミットをかけて60FPSにしたからって内部的には処理速度が大幅に余裕があるので制限掛ける前の200FPSで回ってたりする。
ただ、描画部分だけは60FPSで回るように同期をとって表示するだけで。
ついでに必ずしも入力待ちをしている時に入力をするといったこともないので
連打は早ければ早いだけ良い。
それはPCの話 (スコア:1)
ファミコンだとVRAMのバスをCPUとPPUで奪い合うので、CPU側からVRAMに書き込めるのは垂直帰線の間だけ。
DMAなんてイキなものもなく、横1ラインぐらいのBG書き換えが限度だった筈。
なのでゲームの作りもV-Syncで描画→次フレーム作成→ブランキング待ちのパターンがセオリーだったな。
次のブランキングまでにフレーム作成が終わらない場合が、いわゆる「処理落ち」。
Re:それはPCの話 (スコア:1)
> 横1ラインぐらいのBG書き換えが限度だった筈
というかファミコン世代はそもそもラインバッファ方式ですから、横1ラインずつしか書き換えないハードウェアですね。
これは水平帰線時間内の話なのでその間に書き換えきれない場合スプライトの描画が消えたりする。
Re:それはPCの話 (スコア:1)
ファミコンはPPUのポートにアドレスを叩き、あとはデータを叩く毎に勝手にアドレスがインクリメントされる単純なPIOですな。
加算値は縦用に+32にも設定できた筈。これを垂直帰線の間に「できるだけ」やる感じ。
垂直帰線内でスプライトDMAとどっちを優先するかは実装によるだろうけれど、普通はスプライトDMAでしょう。
水平帰線内はなんもやらない。0番スプライトの衝突を使って1フレーム1回なら拾えなくはないけれど。
スプライトが8キャラ分以下しか横並びできないのはハードウェアの制限。
点滅するのは、上記の場合に消えたままになるスプライトが出ないように、フレーム毎に描画するスプライトを変更しているため。