Arduboyで固定小数点を扱う その1
固定小数点を使うことがあるかもしれないので、テスト。
符号1ビット、整数部7ビット、小数部8ビットにした。
整数部は7ビットなので-128〜127まで扱えるが、この値を単純に表示座標として使用すると、画面右の外側にキャラクタを置けない。
そこで、下駄を履かせて画面の中心(64, 32)を原点として考えることにした。
#include <Arduboy2.h> Arduboy2 arduboy; #define SCREEN_CENTER_X 64 #define SCREEN_CENTER_Y 32 #define SCREEN_TOP -32 #define SCREEN_BOTTOM 31 #define SCREEN_LEFT -64 #define SCREEN_RIGHT 63 void setup() { arduboy.begin(); arduboy.setFrameRate(60); arduboy.clear(); } void loop() { if (!arduboy.nextFrame()) return; arduboy.clear(); static int16_t x, y; if (arduboy.pressed(LEFT_BUTTON)) { x -= 1 << 8; if (x >> 8 < SCREEN_LEFT) x = SCREEN_LEFT << 8; } else if (arduboy.pressed(RIGHT_BUTTON)) { x += 1 << 8; if (SCREEN_RIGHT < x >> 8) x = SCREEN_RIGHT << 8; } if (arduboy.pressed(UP_BUTTON)) { y -= 1 << 8; if (y >> 8 < SCREEN_TOP) y = SCREEN_TOP << 8; } else if (arduboy.pressed(DOWN_BUTTON)) { y += 1 << 8; if (SCREEN_BOTTOM < y >> 8) y = SCREEN_BOTTOM << 8; } arduboy.fillCircle((x >> 8) + SCREEN_CENTER_X, (y >> 8) + SCREEN_CENTER_Y, 5, WHITE); arduboy.print("X="); arduboy.print(x >> 8); arduboy.print("\n"); arduboy.print("Y="); arduboy.print(y >> 8); arduboy.print("\n"); arduboy.display(); }