Profile

アメリ

Author:アメリ
キャラ紹介

line
カテゴリ
AIR (1)
Pos (1)
Var (1)
FAQ (1)
line
不許カウンター
line
最新記事
line
最新コメント
line
最新トラックバック
line
月別アーカイブ
line
sub_line
カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
line
検索フォーム
line
リンク
line
RSSリンクの表示
line
QRコード
QR
line
ブロとも申請フォーム

この人とブロともになる

line
sub_line
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
line
ばぁー ねえ驚いた?ねえ驚いた?
 var、fvar等は変数と呼ばれていて数を保存しておく場所になっています。変数の型に依って保存できる範囲が決まっています。何かの値を保存して別の所から参照したい場合に使います。

var(n),fvar(n)
 kfmから差し替えて作りましょうとキャラ制作の方に書きましたが、varの説明はstate controllerの所とkfmのcnsの最初の方に書いてあったりします。読んでおいてください。
 型と言うのが解らない方はint型(整数型)とfloat型(浮動小数点型)についてぐぐれかす。

var(n)
 整数型、n=0~59で60個使える。-2^31~2^31まで。
fvar(n)
 浮動小数点型、n=0~39で40個使える。基本的に数字として使えるのは7桁までで8桁以上を使うと段々と誤差が生じる(正確には2進数なのでちょっと違いますが)。
桁数的にはとても大きな桁でも(100桁とか)扱えますが計算出来なくなるので使えません。

 varはp2statenoからのvarsetやtargetvarset、parentvarset等で変更される可能性がありますが通常はそんな事はしないので問題ありません。そもそも変数が使えなかったら困りますし・・。


sysvar(n),sysfvar(n)
 プレイヤーのシステム変数は相手から変更されません。
sysvar(n)
sysfvar(n)
 n=0~4で5個使える。型は通常の変数と同じ。

使用済みの変数
 var(0)はkfmが既に使っているので気を付けましょう。
 sysvar(0),sysvar(1)はcommon1.cnsで使われているので気を付けましょう。自分でcommon1.cnsを持っていない場合はdataフォルダにあるので見てみてください。
 var(59)はAI onに使われる事が多いみたいです。使うついでに変数の持ち越しをしましょう。
 相手側の状態を参照する様な仕組みを作る場合は両者から参照可能な様に特定の変数を使います。

varsetの記述はvar(1) = 1の様に行わないと検索できなくなるので不便です。

変数の持ち越し
 ラウンドが変わっても前のラウンドの値を持ち越したい場合はcnsファイルの[Data]項目に次の値を適切に設定する必要があります。

[Data]
IntPersistIndex = 60
FloatPersistIndex = 40

 kfmの説明を見るとわかりますがこの2つの値は変数を初期化する範囲となっています。
なのでラウンド開始時に初期化したくない変数は番号の大きい方から割り振る必要があります。
値を0にすると全ての変数を初期化せずにそのまま使うので不具合が出ない様に注意する必要があります。

 common1.cns の [statdef 5900] を見てください。必要であれば [statedef 0] に roundstate = 0 と prevstateno = 5900 をトリガーにした初期化処理を入れましょう。

 持ち越しの処理をする場合は常に実行される [statedef -2] に入れると良いでしょう。


変数の基本
「初期化」
 まず変数は必ず初期化します、通常はラウンドの開始に0になっているはずです。cnsの記述は結局の所プログラム作成なので基本的には一緒です。特に計算に一時的に使う等、そのフレームでしか使わない変数は必ず初期化しましょう。極端に言えばラウンドの開始時に相手に変更されている恐れもあります。

「入れる値の範囲を明確にしておく」
 初期値は0の筈ですがそれ以外に何を入れるかです。0か1かと言う場合でも誤って他の値が入る事もあるので0か(1か)そうでないかの方が安全ですし、これはバグを無くす方法でもあります。0から100までの値を使う場合でも0以上100以下と言う判定を最初にして、そうでない場合に初期化したり無視したりしておけば問題ありません。 基本は使う範囲と範囲外の値の扱いを明確にしておけば良いです。全く考慮されていない範囲があるのは好ましくありません。

 例えば0から1ずつ増えていって100で終わりと言う判定を作ると普通の人はvar(1)=100とすると思いますが、これだと101になってしまった場合や10000になってしまった場合に終了しませんしマイナスになってしまっても予期せぬ続行が行われます。この場合に考慮する範囲としては初期値の0、間の1-99、終了値の100、そしてそれ以外の0未満と100より大きい値と言う事になります。ここまで考えてあればバグの場合に暴走の可能性がないので安全ですが、安全性とは別に同じ変数を別の箇所で誤って使った場合にエラー表示が出ると嬉しいですね。実際はvar(1)>=100としておけば大丈夫でしょうけれど。
スポンサーサイト
line
line

line
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。