プレイ日記
だにえる haru2016nen
【処理速度の質問】 基本的にDEFを使うとき、 ローカル変数を使うのが望ましいですよね。 現在制作中のSTGでは(画像)のように CALLで処理をしています。 毎フレーム何十回もこんなことをする場合は、 VARでローカル変数を使って毎回宣言する よりも、グローバル変数を使って宣言の手間を 省いた方が早いのでしょうか?
8そうだね
プレイ済み
返信[1]
親投稿
だにえる haru2016nen
今はVARを付けてません。 & DEFの実際の処理はもう少し複雑です。
1そうだね
プレイ済み
返信[2]
親投稿
ナツキ natukin1978
「処理速度」という視点でのアドバイスではないのですが、セオリーから言うと(DEF)関数の場合、ローカル変数を使うのが望ましいです。何故かというと関数単体でのテストがやりやすいからです。 グローバル変数やシステム変数、その他外部の状態に依存する関数の場合、結果が異なるのでテストが難しくなります。 まずは処理速度よりも正確に動いてテストがやりやすい関数を作り、もし速度に問題が出た時に速く動作する関数に改良しましょう。
3そうだね
プレイ済み
返信[3]
親投稿
のり cb_FlyingFox
SPOFS ID OUT X,Y で位置を取得、 座標値の加工後、SPOFS ID,X,Y で移動 が高速です。意外と。
2そうだね
プレイ済み
返信[4]
親投稿
みむ*mim hidemimtp
処理速度は変数用のメモリを確保しない分若干速いです。ただ速さを求めるなら、GOSUBでもSPFUNCできるしCALLIDXで取得もできるので、GOSUBにしちゃえばいいと思います。FUNCは元々メインに書くべき処理を楽に分岐できるようにしているだけなので、GOSUBで問題ないはず。 初心者の方向けに一応書きますが、一般的に関数内からグローバル変数を参照するのはあまり推奨されません。むしろ他の言語を仕事などで使う方はキレるくらい否定されます。 が、BASICのサブルーチンはもともと「GOSUB」であって、DEFはその上位互換的(パラメーターが使え、戻り値が設定で、ローカル変数が使える)なだけなので、個人的には「プチコンに限っては関数内からグローバル変数の使用はアリ」(分かりやすいように工夫はすべき)だと思っています。
4そうだね
プレイ済み
返信[5]
親投稿
BlackSoft BlackSoft.mkII3g
空DEF、空GOSUBを定義してベンチマークを作ってみるとよく分かると思いますが、DEFはGOSUBに比べて遥かに遅いです。ローカル変数や戻り値を処理するためのオーバーヘッドが発生するためだと思います。 STG,アクション等、高fpsを要求するようなものはGOSUBで。ツールやパズル等、fpsはそれほど重要ではなく「何か操作したらその時に複雑な処理が発生する」ような場合はDEF関数を利用する という感じで使い分けても良いかもしれませんね。
1そうだね
プレイ済み
返信[6]
親投稿
だにえる haru2016nen
*SPOFS OUTを使わないのは整数の返り だからです。数学的な軌跡にする場合は 小数を使ったほうがいいハズです。 *MIKIさんの投稿にGOSUBよりも DEFの方が早い。と、あったような気が するんですが…
0そうだね
プレイ済み
返信[7]
親投稿
のり cb_FlyingFox
> *SPOFS OUTを使わないのは整数の返りだからです。 およ? 浮動小数点数で取得, 設定できますよ。
0そうだね
プレイ済み
返信[8]
親投稿
MIKI ifconfig
あれ、私も spofs は整数だと思ってましたが、今確認したら単精度浮動小数点数っぽいですね。以前からこうだったのかな??? gosub より def が早いとか書いたことないですよ??? repeat until より goto が遅いの間違いでは?? みむさん> def は gosub の上位互換的 全然違うでしょう。 def は fortran や algol 由来ですね。 basic はそれらより遅いのに gosub なんてものしか用意しなかった。 ローカル変数についてはナツキさんに完全同意します。 プログラムはさっさと動くものを作るのが一番です。 とにもかくにも動くの作らなかったら速度の評価もできないわけですから。
3そうだね
プレイ済み