2018年2月8日木曜日

ゲームの進展処理13 ゲーム縮小モード

今回は、前回書いていたのとはちがって、ちょっと縮小モードについて数分考えたら、いい案が出たのでここで述べる。
アニマロッタでは、別ゲームに移動したときに、縮小された状態でゲームが表示される。
これを我もやりたい、と思ったわけだが…なんとなく無理そうな気配がする。

理論上は、任意の座標(x,y)に対して(ウディタではy座標が上から下に向かう方向に正となっていることに注意)どこの点にうつしたいかというと、縮小された枠に(できるだけ16:9を比率を保ったままで)同じ比率で移したい。つまりそっくりそのまま縮小したものを移動させたいわけである。

とりあえずこれはx,y座標がどれくらいの割合の場所かを知る必要がある。割合ならどの大きさの縮小でも変わらなく配置できる。
すると(x/1280,y/720)であることがわかる。さて、新しく作る縮小フレームをP×Qの枠であるとすると、(P!=Qでも可。ただしのびたりするが)やはり同じ割合分x,y座標が進んだところに配置するので、x,y座標それぞれにP,Qをかければよい。そして、ベクトルの考えと同じで、その縮小フレームの左上(もともと座標自体(0,0)を基準としてとっているので)の座標をたすことで移動後の座標を得る。
その座標はフレームの左端の座標を(X,Y)とすると、(X+(Px/1280),Y+(Qy/720))で与えられる。
いま、P=180、Q=150で、右下の枠に移すとすると、左上の座標が(1085,485)なので、結局
任意の座標(x,y)は(1085+(180x/1280),485+(150y/720))となる。

こうすれば理論上は何の問題もない…はずなのだが、(比率が違うとドロップの間に空きができたりするが)ここで問題となるのは解像度である。

ウディタでは1ピクセルを最小単位として扱い、たとえば0.1,0.2ピクセルとなった場合、切捨てされる点に注意。0.6や0.7であっても切捨てされるので、四捨五入するなら新たに「%」を用いてプログラムせねばならない。
…さて、もっとも注意すべきは座標の差がもっとも小さいであろうオッズ表などである。
オッズの文字はおよそ20×20ピクセルくらいである。
しかし、たとえばこの文字が(a,b)にあったとすると、どちらかというとy座標のほうが圧迫されるのでこちらを考える。その差は、(485+150(y+20)/720)-(485+(150y/720))=3000/720=(だいたい4)となる。
ということは、縮小するとオッズ表の数字はわずか隣とは4ピクセルしか違わないことになり、もはやこれだとほとんど読めない。
そして最大の問題は、これくらいになってくると、精密に指定したドロップなどの座標が、この小数点以下切捨ての扱いにより、上の考察から同じにはならないとしても、ずれが出る恐れがある、という点である。たとえば上の例では、本来は移動先の差は4.2ピクセル程度であるべきだが、実際は4でしか扱われない。ということは、文字間がたぶん0.2ピクセル空く。このように随所で問題が発生する。
なので、よほどの大画面を持ってこない限り、、この問題は解決されない。

よって後回し。

新しいアニマ系ゲームの作成に伴うブログ移転

https://zisakukarako.blogspot.com/ というブログで、今度は自作カラコロッタをつくってみようということにした。 今度は自作アニマロッタ風ゲームでの反省を生かす予定。 どこまで続くかは不明。 さらに、自作アニマロッタまで作ろうと試みている...