此C ++代码看起来应该可以工作。但事实并非如此!为什么?

时间:2019-12-03 19:45:17

标签: c++


我有此代码无法正常工作。我已经为我的arduboy进行了编码(PS重置按钮已损坏:'(),它所做的只是冻结在 ARDUBOY 屏幕上,该屏幕在您启动时从屏幕顶部向下滚动起来,我不知道为什么会这样,只是这样!

代码在这里:

#include "Arduboy2.h"

Arduboy2 arduboy;
//Initiate variables:
int x = 0;
int y = 0;

//setup
void setup()
{
    arduboy.begin();
    //   arduboy.clear();
}
//loop
void loop()
{
    arduboy.clear();
    // This is the code to test button inputs.
    if (arduboy.pressed(UP_BUTTON))
    { 
        y++;
    }
    else if (arduboy.pressed(DOWN_BUTTON))
    {
        y--;
    }
    else if (arduboy.pressed(LEFT_BUTTON))
    {
        x--;
    }
    else if (arduboy.pressed(RIGHT_BUTTON))
    {
        x++;
    }
    arduboy.setCursor(x, y);
    arduboy.print("*"); //print the *
}

1 个答案:

答案 0 :(得分:2)

此代码在打印星号后立即清除屏幕。

在所有Arduino中,loop函数连续循环,并且循环之间没有延迟,因此您的代码不断清除屏幕。

仅当检测到更改时才应重新粉刷屏幕,如下所示:

#include "Arduboy2.h"

Arduboy2 arduboy;
//Initiate variables:
int x = 0;
int y = 0;

//setup
void setup()
{
    arduboy.begin();
    arduboy.clear();
}

void loop()
{
    boolean change = false;

    // This is the code to test button inputs.
    if (arduboy.pressed(UP_BUTTON))
    { 
        y++;
        change = true;
    }
    else if (arduboy.pressed(DOWN_BUTTON))
    {
        y--;
        change = true;
    }

    //this should be separate from the if that handles vertical buttons to allow diagonal movement
    if (arduboy.pressed(LEFT_BUTTON))
    {
        x--;
        change = true;
    }
    else if (arduboy.pressed(RIGHT_BUTTON))
    {
        x++;
        change = true;
    }

    if (change) { //only repaint if button press is detected
        arduboy.clear();
        arduboy.setCursor(x, y);
        arduboy.print("*"); //print the *
    }

    //you may also want to add delay() here to let the screen refresh
}

要平滑连续移动,还需要考虑的另一件事不是清除整个屏幕,而只是通过在此处打印空间或绘制一个小矩形来擦除先前的位置。

这是在运行速度较慢的硬件上运行的旧视频游戏中的常见做法。