戻る

画面表示

TinyScreenクラスがあるのでそれを使って画面を制御する。
画面を256色モードに設定して10x10のキャラクタを画面の真ん中に表示するサンプルプログラムです。
96*64バイトの画面の大きさと同じscreen_bufferを作成してその中に絵を描きTinyScreen::writeBufferで画面に転送している。

サンプルプログラム

#include <TinyScreen.h>

#define SCREEN_WIDTH  96
#define SCREEN_HEIGHT 64
#define BUFFER_SIZE   (SCREEN_WIDTH * SCREEN_HEIGHT)
#define COLOR8(r,g,b) ((b>>5)<<5|(g>>5)<<2|(r>>6))

TinyScreen tiny_screen = TinyScreen(TinyScreenPlus);
unsigned char screen_buffer[BUFFER_SIZE];

// Character image
const unsigned char Hiyoko_1[10 * 10] =
{
	0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00,
	0x00, 0x1B, 0x40, 0x40, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00,
	0x00, 0x1B, 0xFF, 0x40, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00,
	0x00, 0x1B, 0x40, 0x40, 0x1B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
	0x0F, 0x0F, 0x0F, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x5B,
	0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x5B, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x5B, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x00, 0x00
};

void setup()
{
	tiny_screen.begin();
	// 256 color mode
	tiny_screen.setBitDepth(TSBitDepth8);
	// Screen brightness
	tiny_screen.setBrightness(7);
}

// Draw sprite no clip
void DrawSprite(const unsigned char* buffer, int x, int y, int width, int height, int color_key)
{
	int scan_x;
	int scan_y;
	int source_address = 0;
	int destination_address = SCREEN_WIDTH * y + x;
	for(scan_y = 0; scan_y < height; ++ scan_y)
	{
		for(scan_x = 0; scan_x < width; ++ scan_x)
		{
			unsigned char color = buffer[source_address + scan_x];
			if(static_cast<int>(color) != color_key)
			{
				screen_buffer[destination_address + scan_x] = color;
			}
		}
		source_address += width;
		destination_address += SCREEN_WIDTH;
	}
}

void loop()
{
	// Clear buffer
	memset(screen_buffer, COLOR8(30, 30, 100), BUFFER_SIZE);
	// Draw sprite
	DrawSprite(Hiyoko_1, 43, 27, 10, 10, 0);
	// buffer to screen
	tiny_screen.goTo(0, 0);
	tiny_screen.setX(0, SCREEN_WIDTH - 1);
	tiny_screen.setY(0, SCREEN_HEIGHT - 1);
	tiny_screen.startData();
	tiny_screen.writeBuffer(screen_buffer, BUFFER_SIZE);
	tiny_screen.endTransfer();
}

実行結果

ScreenSample1.jpg

サンプルプログラムのダウンロード

fileScreenSample1.zip

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS