HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0913
ニルawaitの謎?6未解決


ニル

リンク

2008/9/13(Sat) 22:54:28|NO.19455

こんにちは。

3Dを使わない標準命令(効果音はプラグイン使用)のみでシューティングゲームを作っているのですが、
awaitを16にして使った方がいいよーと言うような事を聞いたので、
待ち時間をawait 16にしてやっていたのですがどうもFPSが60にならず
此方の環境では32になってしまいます。
しかも弾が時々一瞬早く進んだりして見栄えも悪いです・・・。

環境はXP 
Pen4 3.06GHz
6200 AGP
メモリ 1G
 
そして、待ち時間を色々変えてみたのですが、
17にすると、FPSは32のまま変化は無いのですが、一瞬早く進む現象が治ります。
15にすると、FPSはいきな64で安定し、滑らかに弾が進んでいきますが一瞬弾が早く進むのは治りません。
そして1にしても15と変わりはありませんでした。(FPS64安定、時々弾が一瞬進む)

この様に、1つ変えるしても15から16、16から17ではなぜ変化の様子が違うのでしょうか・・・?
そして待ち時間await 15でも問題は無いのでしょうか?16でFPS 60安定と言うのは無理なのでしょうか?
環境の問題で、ダイレクトXを利用したプラグインは使用できないので、出来るだけ標準命令のみでお願いします


ちなみに、FPSを求める方法は、

fp++ ;フレーム数を覚えておく変数
time=gettime(6) ;timeに現在の秒数を代入
if time!=time2 { ;timeとtime2が等しくなければ{}内の命令を行う
fpc=fp ;fpc(表示するFps数)にfp(現在のフレーム数)を代入
fp=0 } ;フレーム数をクリア
pos 440,440
color 255,100,255:mes " Fps "+fpc ;フレーム数の表示
time2=time ;time2に現在の秒数を代入(1秒ごとに比べる為)

これを使っています。



この記事に返信する


panda

リンク

2008/9/14(Sun) 00:22:37|NO.19456

私もその現象になやまされることがありました。

可変的に wait値 を変動させたり、高負荷時に wait を無効化するように
いろいろ試行錯誤してみました。

・・・が、結局安定せず…。

標準命令だけでは、FPS:60 チョッキシというのはおそらく厳しいかとおもいます。
(環境変異が大きいので)

高レベルな回答じゃなくて、申し訳ないです。



黒色迷彩

リンク

2008/9/14(Sun) 12:44:57|NO.19469

ども、こんちわ。
結論から言わせて貰うとawaitでFPSの固定は難しいでしょう。
個人的な意見ですがFPSにゲームの進行速度をあわせるという方法は無理ですか?
d3mのデモなんかみたいに。



natu

リンク

2008/9/14(Sun) 17:47:43|NO.19477

以前にFPSに関して取り上げた者です.
シューティングゲームなら以下のような方法はどうでしょうか.
#include "d3m.hsp"
#module #deffunc limfps int fps, int fmax wlim = 1000.0*fps/(fmax*fmax) + offset_time-d3timer() if wlim < 1 : wlim = 1 offset_time = wlim + d3timer() await wlim return #global repeat fps = d3getfps() limfps fps, 60 ; ; ゲームメイン ; title "" + fps loop
他にはこの掲示板で「固定FPS」と検索してみてください.
naznyark さんの方法がありますよ.



ニル

リンク

2008/9/14(Sun) 19:28:42|NO.19481

panda様、黒色迷彩様、natu様有難うございます。

アレから色々試して気が付いたことを。
弾が一瞬早く進む減少は一定のリズムで安定しております。

そしてnatu様のスクリプトをお借りして、ゲーム起動してみましたところ、60安定とまでは行きませんが、
大体60になりました!ですが、一瞬カクカクは依然として直りません・・・・
いろんなゲームソフトのSTGは弾が一瞬早くなったりはしないので悩んでいます・・・

natu様が教えてくださったnaznyark様のスクリプトを拝見いたしましたが、私には難しいようなので諦めました・・・すみません。



Aduken

リンク

2008/9/15(Mon) 22:11:46|NO.19500

初心者ですが参考にしてください。

たとえば、FPSが60未満であれば、awaitの時間を減らし、(待ち時間を減らす)
FPSが60以上であればawaitを長くする。
というかんじで、何とかできると思うのですが・・・・

説明下手ですみませんでした



natu

リンク

2008/9/16(Tue) 17:04:07|NO.19512

強引な方法ですがこんな感じでどうでしょ
#include "d3m.hsp"
#module #defcfunc framerate int fmax wlim = 0 + 1000.0*fps/(fmax*fmax) + offset_time-d3timer() if wlim < 1 : wlim = 1 offset_time = wlim + d3timer() await wlim ; ; sample title "wait:" + wlim + ", fps:" + fps ; t_fps = d3getfps() if ofstime == 0 : ofstime = d3timer() if time < 1000 { time = d3timer() - ofstime : fps = fmax return t_fps } fps = t_fps return fps #global repeat fps = framerate(30) //title ""+fps ; ; ゲームメイン ; boxf x, 100, x+10, 120 x += 5 loop
毎回ウェイト値を計算するので、スキップしすぎるような現象は少ないです.



ONION software Copyright 1997-2021(c) All rights reserved.