“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

127.HSPでゲームを作ろう:シューティングゲームっぽい何か その4

ここで余談を。

細胞を撃つと徐々に膨れて爆発するということを再現するために、弾が当たったら、今の拡大率を取得して、それに10%ずつ加算してやろうと考えていた。
実際に処理を作ってみたのだが、うまく行かない。

弾が当たった細胞スプライトの、現在の拡大率をes_getで取得して、その倍率に+10して es_setrotで新しい拡大率をセットするようにしてみた。

でも、一回目は拡大するものの、二回目以降は全く拡大されない。
110%はいいが、120%にならない。増分を100にして、200%ならできる。
マニュアルには、250%とか書いているから10%刻みも行けるはずなのに、なんだこれ?となった。
logmesしながら、何で値が変わらないの?と、デバッグウィンドウとにらめっこ。

HSP3使いの諸先輩たちは、ピンときたかもしれないが、HSP3の数値の扱いが、基本は整数なのを忘れていたのが原因だった。

es_getで取得する倍率、ESI_ZOOMXの値は、65536倍されているので、取得したあと、65536で割り、100を掛ける必要がある。ここが落とし穴だった。
ESI_ZOOMX/65536*100と計算していたが、割り算部分は値が整数になる。
だから、ESI_ZOOMXが110%だとすると、72089÷65536=1.1ではなく、1になってた…
いくら100倍して10足そうとも、110にしかならない。

int(double(ESI_ZOOMX)/65536*100)+10 のように、いったん実数で割り算しないと、120には永遠にならなかった。

ということで、無事10%刻みでもスプライトを拡大できるようになったんだけど、膨張したときの倍率を、あらかじめ配列に持つことにしたので、この苦労は報われないのであったww