第四章 arduboy游戏编程之Arduboy2库介绍
Arduboy 为开发者提供了一套能够自己编写游戏的库,在进行 arduboy 游戏编程之前,都需要在Arduino IDE 中安装该库,下面就对所安装的 Arduboy2 库进行说明。
Arduboy2 库源码链接
Arduboy2 库函数文档说明
这里提供一份 Arduboy2 库相关的说明文档,该文档使用 doxygen
生成可以下载下来直接用浏览器打开查看。
Arduboy2库函数说明文档
绘图函数
//绘制空心圆
void drawCircle (int16_t x0, int16_t y0, uint8_t r, uint8_t color=WHITE);
void fillCircle (int16_t x0, int16_t y0, uint8_t r, uint8_t color=WHITE);
// 绘制线
void drawLine (int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint8_t color=WHITE);
// 绘制垂直线
void drawFastVLine (int16_t x, int16_t y, uint8_t h, uint8_t color=WHITE);
// 绘制水平线
void drawFastHLine (int16_t x, int16_t y, uint8_t w, uint8_t color=WHITE);
// 绘制矩形
void drawRect (int16_t x, int16_t y, uint8_t w, uint8_t h, uint8_t color=WHITE);
// 绘制填充矩形
void fillRect (int16_t x, int16_t y, uint8_t w, uint8_t h, uint8_t color=WHITE);
// 填充屏幕
void fillScreen(uint8_t color = WHITE);
// 绘制圆角矩形
void drawRoundRect(int16_t x,int16_t y,uint8_t w,uint8_t h,uint8_t r,uint8_t color = WHITE);
// 绘制圆角填充矩形
void fillRoundRect(int16_t x,int16_t y,uint8_t w,uint8_t h,uint8_t r,uint8_t color = WHITE);
// 绘制三角形 (x0,y0) (x1,y1) (x2,y2) 为三角形的三个角的坐标
void drawTriangle(int16_t x0,int16_t y0,int16_t x1,int16_t y1,int16_t x2,int16_t y2,uint8_t color = WHITE);
// 绘制填充三角形
void fillTriangle(int16_t x0,int16_t y0,int16_t x1,int16_t y1,int16_t x2,int16_t y2,uint8_t color = WHITE);
// 绘制点
void drawPixel(int16_t x,int16_t y,uint8_t color = WHITE);
绘图函数测试
#include <Arduboy2.h>
Arduboy2 arduboy;
void setup() {
arduboy.begin();
arduboy.setFrameRate(15);
}
void loop() {
if (!(arduboy.nextFrame()))
return;
arduboy.clear();
// (positions start at 0, 0)
arduboy.setCursor(4, 5);
// then we print to screen what is in the Quotation marks ""
arduboy.print(F("Hello, world!"));
arduboy.drawCircle(50,20,5,WHITE);
arduboy.drawCircle(80,20,5,WHITE);
arduboy.drawLine(0,40,127,40,WHITE);
arduboy.fillRect(65,32,2,6,WHITE);
arduboy.drawRect(55,50,20,3,WHITE);
arduboy.display();
}
按键相关函数
Arduboy 上面一共提供了 6个按键,分别为 上、下、左、右、A、B,可以利用这六个按键作为输入进行游戏控制,下面介绍一下这六个按键控制相关的库函数及宏。
按键相关宏
// 上
UP_BUTTON
// 下
DOWN_BUTTON
// 左
LEFT_BUTTON
// 右
RIGHT_BUTTON
// A
A_BUTTON
// B
B_BUTTON
按键相关库函数
// 检测按键是否按下
bool pressed (uint8_t buttons);
bool anyPressed (uint8_t buttons);
//检测按键是否未按下
bool notPressed (uint8_t buttons);
// 轮询按钮并跟踪状态
void pollButtons ();
// 检测按键是否刚刚按下
bool justPressed (uint8_t button);
// 检测按键是否刚刚释放
bool justReleased (uint8_t button);
// 检测所有按键的当前状态并返回位掩码
static uint8_t buttonsState ();
测试代码
#include <Arduboy2.h>
Arduboy2 arduboy;
int counter;
void setup() {
arduboy.begin();
arduboy.clear();
counter = 0;
}
void loop() {
arduboy.clear();
if( arduboy.pressed(UP_BUTTON) ) {
counter = counter + 1;
}
if( arduboy.pressed(DOWN_BUTTON) ) {
counter = counter - 1;
}
if(arduboy.pressed(LEFT_BUTTON))
{
arduboy.setCursor(30, 40);
arduboy.print("LEFT!");
}
if(arduboy.pressed(RIGHT_BUTTON))
{
arduboy.setCursor(30, 40);
arduboy.print("RIGHT!");
}
if(arduboy.pressed(A_BUTTON))
{
arduboy.setCursor(30, 40);
arduboy.print("A BUTTON TEST!");
}
if(arduboy.pressed(B_BUTTON))
{
arduboy.setCursor(30, 40);
arduboy.print("B BUTTON TEST!");
}
if( counter > 36 ) {
arduboy.setCursor(30, 30);
arduboy.print("Yay!");
}
arduboy.setCursor(0, 0);
arduboy.print(counter);
arduboy.display();
}
RGB-LED相关函数
arduboy 硬件带有一颗RGB-LED ,可以用这颗led灯珠来指示当前游戏的进度和状态。
控制rgb-led函数
// RGB LED 模拟控制 可以调整LED的亮度值
static void setRGBled (uint8_t red, uint8_t green, uint8_t blue);
static void setRGBled (uint8_t color, uint8_t val);
// 释放 RGB LED 模拟控制
static void freeRGBled ();
// RGB LED 数字控制 只能开关 RGB LED
static void digitalWriteRGB (uint8_t red, uint8_t green, uint8_t blue);
static void digitalWriteRGB (uint8_t color, uint8_t val);
测试代码
这里使用模拟器测试 RGB-LED 的代码好像有点问题,在模拟器上面有一些测试的不太准,不过RGB-LED 灯还是有的,可以在模拟器上面运行下面的代码进行测试。
#include <Arduboy2.h>
Arduboy2 arduboy;
int counter;
void setup() {
arduboy.begin();
arduboy.clear();
counter = 0;
}
void loop() {
arduboy.clear();
if( arduboy.pressed(UP_BUTTON) ) {
counter = counter + 1;
}
if( arduboy.pressed(DOWN_BUTTON) ) {
counter = counter - 1;
}
if(arduboy.pressed(LEFT_BUTTON))
{
arduboy.setCursor(30, 40);
arduboy.print("LEFT!");
}
if(arduboy.pressed(RIGHT_BUTTON))
{
arduboy.setCursor(30, 40);
arduboy.print("RIGHT!");
}
if(arduboy.pressed(A_BUTTON))
{
arduboy.setCursor(30, 40);
arduboy.print("A BUTTON TEST!");
//arduboy.freeRGBled();
//arduboy.digitalWriteRGB(RGB_OFF,RGB_ON,RGB_ON);
}
if(arduboy.pressed(B_BUTTON))
{
arduboy.setCursor(30, 40);
arduboy.print("B BUTTON TEST!");
}
if( counter > 36 ) {
arduboy.setCursor(30, 30);
arduboy.print("RGB-LED TEST");
arduboy.freeRGBled();
arduboy.digitalWriteRGB(RGB_ON,RGB_ON,RGB_ON);
}
else
{
arduboy.freeRGBled();
arduboy.digitalWriteRGB(RGB_OFF,RGB_ON,RGB_OFF);
}
arduboy.setCursor(0, 0);
arduboy.print(counter);
arduboy.display();
}