距離感の実験
遠近法の続き - 永字八法の続き。
結局、距離感の演出に角度を計算する必要はないことがわかった。つうか、考えた結果、そういう結論に。
プレイヤーの視点から、立ち絵までの距離を任意に設定する(たとえば、100。単位はよくわからんが)。この時、距離が2倍になれば、みかけの大きさは半分になり、3倍になれば3分の1になる。数式で表すと、
大きさへの修正(比率)=基本距離/距離
となる。
これを利用して、実験的にスクリプトを組んでみた。
00.txt
;mode800 *define mov %0,100 numalias cursor_x,%0:inc %0 numalias sp_x,%0:inc %0 numalias sp_y,%0:inc %0 numalias sp_width,%0:inc %0 numalias sp_height,%0:inc %0 numalias sp_mul,%0:inc %0 numalias sp_rl,%0:inc %0 numalias standard_distance,%0:inc %0 numalias distance,%0:inc %0 usewheel game *start saveoff caption "距離感の実験" ; スプライトのサイズを取得。 lsph 0,":a;t.bmp",0,0 getspsize 0,%sp_width,%sp_height csp 0 ; 初期設定 mov %standard_distance,100 ; 基準距離は100 mov %distance,100 ; 彼我の距離の初期値 ; スプライトを表示しておく。 lsp2 1,":a;t.bmp",0,0,100,100,0 lsp2 2,":a;t.bmp",0,0,100,100,0 *main ; 倍率を計算する。 mov %sp_mul,100*%standard_distance/%distance ; 位置を決定する。 mov %sp_x,600+%cursor_x*%sp_mul/100 mov %sp_y,600-%sp_height*%sp_mul/200 ; 表示する。 amsp2 1,%sp_x,%sp_y,%sp_mul,%sp_mul,0,255 amsp2 2,200,600-%sp_height/2,100,100,0,255 itoa2 $distance,%distance mov $0,":s/26,26,0;#FFFFFF彼我の距離:"+$distance lsp2 0,$0,400,26,100,100,0 print 1 ; ボタンモード btndef "" getcursor btnwait2 %0 ; 入力待ち if %0=-2 inc %distance if %0=-3 dec %distance if %0=-40 inc %distance if %0=-42 dec %distance if %0=-41 inc %cursor_x if %0=-43 dec %cursor_x if %distance<1 mov %distance,1 goto *main
説明
同じ立ち絵が二つ並ぶ。左は不変で、右はマウスホイールの上下やカーソルの上下によって仮想の距離を変更できる。距離を変更すると、大きさも変化する。
感想
理論は色々あるが、実際にプログラムにしてみると驚くほど簡単だったりするものだなあ。フックの法則みてー。