マシン語ゲームで小数が使われていたか否か語るスレ at I4004
[2ch|▼Menu]
69:ナイコンさん
20/12/07 18:29:24.85 .net
移動キャラが移動するために必要な情報は、現在位置と角度と速度。
ファミコンとかMSXとかPCエンジンの低解像度モードなら256あれば良いので、位置情報は2バイト。上位バイトが実数、下位バイトが小数にすれば処理は速い。スプライトの位置レジスタに設定するのは上位バイトのみ。
あとは360度を256段階で刻んだ1バイトの角度情報と、2バイト固定少数の速度情報がいる。
あとは2バイト×256個のSINCOSテーブルを用意。
角度からテーブルの三角関数値を得て、速度と乗算して現在の位置座標に加算する。
問題はZ80Aや6502 1.7MHzでは遅くて乗算がネックになること。仕方ないので速度を数段階にわけて、三角関数の値を調節したテーブルを数個持ち、乗算の部分を端折る。
速度を細かく分けるほどテーブルは肥大化するので、ケースバイケース。

70:ナイコンさん
20/12/07 21:35:13.82 .net
8文字でわかる要約
「ケースバイケース」

71:ナイコンさん
20/12/08 06:32:58.23 .net
sinテーブル(実際はcosテーブル)は0.0〜1.0の小数になるので、テーブルは小数部1バイトのみでいい
68k機で実数/小数各16bitの場合でもcosテーブルは小数のみ16bit
さらに「360度を256分割」はさすがに荒いので、ベクトルベースの演算が必要な場合は
「90度を256分割」、残りの象限は反転とXY入れ替えで対応できる
低解像度の2Dアクションやシューティング等でせいぜい32方向くらいなら、
sin/cosなど使わず最初から移動量ベースでテーブル化
まあ>>69はこの通り最適化も足りてないし、現役世代の経験談ではない薄っぺらい妄想、ということはわかる

72:ナイコンさん
20/12/08 06:35:09.33 .net
当時sin(cos)テーブルを作るのに、なぜかBASICの実数演算を使ってASCIIファイルに吐かせる…という謎な作業をした思い出
BASIC使ったのはそれが最後くらいだな

73:ナイコンさん
20/12/10 12:22:48.90 .net
XかYレジスタに角度が入っていればSINもCOS1命令で済む6502が最強

74:ナイコンさん
20/12/10 13:00:20.54 .net
>>73
レジスタ少なすぎ問題

75:ナイコンさん
20/12/11 01:42:58.25 .net
ゼロページって言ったっけ?、0〜ffhはレジスタ代わりに高速アクセスできるんでしょ。

76:ナイコンさん
21/01/01 15:25:05.30 .net
URLリンク(imgur.com)

77:ナイコンさん
21/01/01 18:45:30.97 .net
>>73
何か勘違いしてるな

78:ナイコンさん
21/01/02 07:29:25.96 .net
余程単純なゲームじゃなきゃsincosテーブルは必須。

79:ナイコンさん
21/01/03 09:04:44.49 .net
このスレの殿堂入りは、「角度は一度刻みで0から90の91段階」の>>43と、
sin/cosテーブルをわざわざ0しかない整数部まで持つと言った>>69が双璧かな
その前の>>68もまあ実経験のない薄っぺらい妄想丸出しが見て取れるので、>>69と同一人物だろう
新年初(嘲)笑いにどうぞ…

80:ナイコンさん
21/01/03 09:33:58.34 .net
角度と速度で持つわけないよ
dx,dyを毎割込みx,yに足す方式のほうが計算簡単だし
壁に当たってはねかえる(dxまたはdyをマイナスにする)放物線を描いてジャンプする(dyに毎割込み重力加速度を足す)といった動きが簡単に実現できる

81:ナイコンさん
21/01/03 12:34:35.03 .net
発射するときに必要

82:ナイコンさん
21/01/03 20:45:21.96 .net
発射するときだけな

83:ナイコンさん
21/01/03 20:49:48.97 .net
あと乗算に時間かかるのはその通りだが
x2→左シフト
x4→左シフト2回
x3→左シフト+元の数
x1.5→右シフト+元の数
のような高速な代用手段がよく使われる

84:ナイコンさん
21/01/03 23:11:28.04 .net
Z80なら左シフトよりADD A,AかADD HL,HLだな

85:ナイコンさん
21/01/04 11:06:20.48 .net
>>80
dx,dyを計算するのに必要。
複雑な動きをしないとか親子関係オブジェクトとか追尾とかない、至極単純なゲームなら構わないが。

86:ナイコンさん
21/01/04 11:07:50.74 .net
>>83
乗数が固定ならね。

87:ナイコンさん
21/01/04 22:39:33.21 .net
>>85
sinテーブルが必要じゃないと言ってるんじゃなく
>>69の言うようにオブジェクトのワークで(角度・スピード)の形で持つことはまずなく(dx,dy)の形がほとんどだと言ってる
またスピードの異なるsinテーブルも不要でひとつのテーブルからシフト演算でx1.5x1.25程度なら作れるので
自機と敵の弾程度の速度差だったらこれで十分

88:ナイコンさん
22/05/08 23:16:45 .net
ジャイアント馬場「アニメジャナイ」

89:ナイコンさん
22/12/04 09:46:53.00 .net
秋元康さんこんにちは(´・ω・`)っ


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

436日前に更新/21 KB
担当:undef