Arduino游戏项目- Flappy Bird的Arduino副本

在这个Arduino项目中,我们将做一个很酷的Arduino游戏,实际上是一个流行的Flappy Bird智能手机游戏的复制品,使用Arduino和TFT触摸屏。你可以通过观看下面的视频或阅betway读下面的书面文本来了解它是如何工作的。

概述


游戏相当简单,但有趣和令人上瘾。我们使用触屏来控制小鸟,并试图避开移动的柱子,因为柱子会随着我们的前进而加速。游戏还可以存储你的最高分,即使你拔掉电源。

Birduino——Arduino-Game-Project-Example1

在上一个教程中(Arduino TFT教程)我们在详细了解到如何使用Arduino使用TFT触摸屏,我们离开了本教程中的游戏示例。所以现在,就像在上一个教程一样,我们将逐步解释这个Arduino游戏背后的代码。

源代码


由于代码有点长,为了更好地理解,我将发布该程序的源代码在每个部分的描述。在本文的最后,我将发布完整的源代码。

我们将使用由Henning Karlsen制作的UTFT和URTouch库。你可以从他的网站上下载这些库,www.RinkyDink必威lolElectronics.com。我们还将使用EEPROM库存储在EEPROM中的最高分数。EEPROM是一种内存,即使在板子关闭时也能存储数据。

在我们包含了库之后,我们需要创建UTFT和URTouch对象以及定义游戏所需的变量。在设置部分,我们需要初始化显示和触摸,从EEPROM读取最高分数,并使用initiateGame()自定义函数初始化游戏。

#include  #include  #include  // ====创建对象UTFT MyGLCD(SSD1289,38,39,40,41);//应将参数调整到显示/ Schield Model Urtouch MyTouch(6,5,4,3,2);// ====定义字体extern uint8_t smallfont [];extern uint8_t bigfont [];extern uint8_t sevensegnumfont [];extern unsigned int bird01 [0x41a];//鸟位图int x,y;//坐标的变量按下显示//软盘鸟int xp = 319;int yp = 100;int yb = 50; int movingRate = 3; int fallRateInt = 0; float fallRate = 0; int score = 0; int lastSpeedUpScore = 0; int highestScore; boolean screenPressed = false; boolean gameStarted = false; void setup() { // Initiate display myGLCD.InitLCD(); myGLCD.clrScr(); myTouch.InitTouch(); myTouch.setPrecision(PREC_MEDIUM); highestScore = EEPROM.read(0); // Read the highest score from the EEPROM initiateGame(); // Initiate the game }

因此,使用initiateGame()自定义函数,我们将绘制游戏的初始状态,以下是我们将如何做。首先,我们需要清除屏幕,然后绘制蓝色背景,绘制底部部分,添加文本并调用drawBird()自定义函数来绘制小鸟。在此之后,我们需要一个while循环,这将阻止游戏开始,直到我们点击屏幕。所以当我们处于这个状态,如果我们按右上角可以重置得分最高的为零,如果我们按屏幕上的其他地方会出while循环,进入主循环的代码将开始游戏。

Birduino——Arduino-Game-Project——开始界面

// ===== initiateGame -自定义函数void initiateGame() {myGLCD.clrScr();//蓝色背景myglcd.setcolor(114,198,206);myGLCD.fillRect (0, 0319239);/ /地面myGLCD.setColor (221216148);myglcd.flexrect(0,215,319,239);myGLCD.setColor(47175、68);myglcd.flexrect(0,205,319,214);//文本myglcd.setColor(0,0,0);myglcd.setbackColor(221,216,148);myGLCD.setFont (BigFont); myGLCD.print("Score:",5,220); myGLCD.setFont(SmallFont); myGLCD.print("HowToMechatronics.com", 140, 220); myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(114, 198, 206); myGLCD.print("Highest Score: ",5,5); myGLCD.printNumI(highestScore, 120, 6); myGLCD.print(">RESET<",255,5); myGLCD.drawLine(0,23,319,23); myGLCD.print("TAP TO START",CENTER,100); drawBird(yB); // Draws the bird // Wait until we tap the sreen while (!gameStarted) { if (myTouch.dataAvailable()) { myTouch.read(); x=myTouch.getX(); y=myTouch.getY(); // Reset higest score if ((x>=250) && (x<=319) &&(y>=0) && (y<=28)) { highestScore = 0; myGLCD.setColor(114, 198, 206); myGLCD.fillRect(120, 0, 150, 22); myGLCD.setColor(0, 0, 0); myGLCD.printNumI(highestScore, 120, 5); } if ((x>=0) && (x<=319) &&(y>=30) && (y<=239)) { gameStarted = true; myGLCD.setColor(114, 198, 206); myGLCD.fillRect(0, 0, 319, 32); } } } // Clears the text "TAP TO START" before the game start myGLCD.setColor(114, 198, 206); myGLCD.fillRect(85, 100, 235, 116); }
在主循环部分中,我们有用于绘制柱子的xP变量,以及yP变量。在开始的时候,xP变量的值是319作为屏幕的大小,yP变量的值是100,这是第一根柱子的高度。在每次迭代中,xP变量的值会随着movingRate变量的值而减少,而在开始时,movingRate变量的值为3,随着游戏的发展,xP变量的值会不断增加。
//主循环段void Loop () {xP=xP- movingrate;// xP - x坐标的支柱;范围:319 - (-51)drawPilars(xP, yP);//绘制柱子// yB - y坐标的鸟取决于值的fallingRate变量yB+=fallRateInt;fallRate = fallRate + 0.4;//每一个渗透下降率增加,以便我们可以影响加速度/重力fallRateInt= int(fallRate);//检查碰撞如果(yB>=180 || yB<=0){//顶部和底部gameOver();}如果(xP < = 85) & & (xP > = 5) & & (yB < = yP-2)){/ /上支柱败阵();}如果(xP < = 85) & & (xP > = 5) & & (yB > = yP + 60)){/ /低支柱败阵();} //绘制鸟drawBird(yB); // After the pillar has passed through the screen if (xP<=-51){ xP=319; // Resets xP to 319 yP = rand() % 100+20; // Random number for the pillars height score++; // Increase score by one } //==== Controlling the bird if (myTouch.dataAvailable()&& !screenPressed) { fallRate=-6; // Setting the fallRate negative will make the bird jump screenPressed = true; } // Doesn't allow holding the screen / you must tap it else if ( !myTouch.dataAvailable() && screenPressed){ screenPressed = false; } // After each five points, increases the moving rate of the pillars if ((score - lastSpeedUpScore) == 5) { lastSpeedUpScore = score; movingRate++; } }

这是游戏的工作原理:我们有50像素宽的柱子,从右向左移动,每一个柱子都有不同的随机高度。为了让它们在逻辑上移动,在每次迭代后,我们需要清除屏幕并重新绘制图形,让柱子在它们的新位置。然而,我们不能这样做,因为屏幕的刷新率较低,这将导致图像闪烁。为了激活它的所有像素,屏幕需要更多的时间,因此我们将不得不即兴和重画那些正在移动的东西。

Birduino——Arduino-Game-Project-Working-Principle

让我们看看drawPilars()自定义函数是如何做到这一点的。它使用xP和yP变量,并使用它们和fillRect()函数,它将绘制柱子。所以每次迭代,它都在新的位置绘制柱子,在它们的左右两边添加蓝色矩形,这就清除了之前绘制的柱子,这样我们就可以即兴重新绘制移动的柱子。这里的if语句是额外的即兴发挥,因为出于某种原因,如果它的' x2 '参数值超出屏幕大小,那么fillRect()函数就不能工作。同样,在这个自定义函数的末尾,我们需要打印达到分数的值。

// ===== drawPlillars -自定义函数void drawPlillars (int x, int y) {if (x>=270){改变颜色(0,200年,20);myglcd.fillerect(318,0,x,y-1);myglcd.setcolor(0,0,0);myglcd.drawrect(319,0,x-1,y);myglcd.setcolor(0,200,20);myglcd.flexrect(318,y + 81,x,203);myglcd.setcolor(0,0,0);myglcd.drawrect(319,y + 80,x-1,204);}如果(x <= 268){//绘制Pillar Myglcd.setColor(114,198,206)的蓝色矩形右侧;myglcd.filleRect(x + 51,0,x + 60,y); // Draws the pillar myGLCD.setColor(0, 200, 20); myGLCD.fillRect(x+49, 1, x+1, y-1); // Draws the black frame of the pillar myGLCD.setColor(0, 0, 0); myGLCD.drawRect(x+50, 0, x, y); // Draws the blue rectangle left of the pillar myGLCD.setColor(114, 198, 206); myGLCD.fillRect(x-1, 0, x-3, y); // The bottom pillar myGLCD.setColor(114, 198, 206); myGLCD.fillRect(x+51, y+80, x+60, 204); myGLCD.setColor(0, 200, 20); myGLCD.fillRect(x+49, y+81, x+1, 203); myGLCD.setColor(0, 0, 0); myGLCD.drawRect(x+50, y+80, x, 204); myGLCD.setColor(114, 198, 206); myGLCD.fillRect(x-1, y+80, x-3, 204); } // Draws the score myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(221, 216, 148); myGLCD.setFont(BigFont); myGLCD.printNumI(score, 100, 220); }

回到循环部分,我们有变量yB也就是鸟的y轴位置它取决于每次迭代后下降的速率增加这样我们就得到了加速度或重力的影响。此外,我们在这里检查碰撞,并使用if语句限制鸟,以便如果它击中顶部,地面或柱子,游戏将结束。

Birduino --- Arduino-Game-Project-Bird

接下来是drawBird()自定义函数,让我们看看它是如何工作的。betway鸟实际上是一张照片,使用由Henning Karlsen制作的ImageConverter565工具转换为位图。使用该工具创建的" .c "文件需要包含在目录中,以便在启动草图时加载它。我们还需要像这样定义位图,并使用drawBitmap()函数将照片绘制到屏幕上。鸟有一个固定的X坐标和变量yB作为Y坐标。与柱子类似,我们将通过在鸟的上方和下方画两个蓝色矩形来清除之前的鸟状态。

//====== drawBird() -自定义函数void drawBird(int y){//绘制鸟位图myGLCD。drawBitmap (50, y, 35, 30, bird01);//绘制鸟类上方和下方的蓝色矩形,以便清除其Previus状态MyGlcd.setColor(114,198,206);myGLCD.fillRoundRect(85年50 y, y-6);85年myGLCD.fillRoundRect (50 y + 30日,y + 36);}

回到循环中,我们可以看到柱子通过屏幕后,xP变量将重置为319,yP将获得柱子高度从20到100的新随机值,分数将增加1。使用下一个if语句,我们控制鸟。如果我们点击屏幕,我们会将下降率设为负值,这将使鸟跳跃,else If语句将不允许发生,如果我们只是按住屏幕。最后一个if语句是关于游戏的难度,它会在每一个细微的点后增加柱子的移动速度。

好,现在剩下的就是看看gameOver()自定义函数是如何工作的。延迟1秒后它将清除屏幕,打印分数和一些文本,如果分数高于最高分数将eepm写下来,它将重置所有变量的起始位置值和结束时,它将调用initiateGame()自定义函数重新启动游戏。

Birduino --- Arduino游戏 - 项目 - 游戏

// ======== gamover() - 自定义函数void gamover(){延迟(1000);// 1秒//清除屏幕并打印text myglcd.clrscr();myglcd.setcolor(255,255,255);myglcd.setbackColor(0,0,0);myGLCD.setFont (BigFont);myglcd.print(“游戏),中心,40);myglcd.print(“得分:”,100,80);myglcd.printnumi(得分,200,80);myglcd.print(“重新启动......”,中心,120);myglcd.setfont(sevEndebygnumfont); myGLCD.printNumI(2,CENTER, 150); delay(1000); myGLCD.printNumI(1,CENTER, 150); delay(1000); // Writes the highest score in the EEPROM if (score > highestScore) { highestScore = score; EEPROM.write(0,highestScore); } // Resets the variables to start position values xP=319; yB=50; fallRate=0; score = 0; lastSpeedUpScore = 0; movingRate = 3; gameStarted = false; // Restart game initiateGame(); }

就这些,我希望代码的解释足够清楚。如果你有任何问题,请在评论区随意提问。

以下是游戏的完整代码:

/ * Arduino Game Proejct *由Dejan Nedelkovski制造的计划,* www.howtomechatbet188官方网站ronics.com * // *该程序使用Henning Karlsen制造的UTFT和Urtouch库*。*您可以在以下位置找到并下载:* www.rinkydinkelectronics.com * / #i必威lolnclude  #include  #include  // ====创建对象UTFT MyGLCD(SSD1289,38,39,40,41);//应将参数调整到显示/ Schield Model Urtouch MyTouch(6,5,4,3,2);// ====定义字体extern uint8_t smallfont [];extern uint8_t bigfont [];extern uint8_t sevensegnumfont [];extern unsigned int bird01 [0x41a];//鸟位图int x,y;//坐标的变量按下显示//软盘鸟int xp = 319;int yp = 100; int yB = 50; int movingRate = 3; int fallRateInt = 0; float fallRate = 0; int score = 0; int lastSpeedUpScore = 0; int highestScore; boolean screenPressed = false; boolean gameStarted = false; void setup() { // Initiate display myGLCD.InitLCD(); myGLCD.clrScr(); myTouch.InitTouch(); myTouch.setPrecision(PREC_MEDIUM); highestScore = EEPROM.read(0); // Read the highest score from the EEPROM initiateGame(); // Initiate the game } void loop() { xP=xP-movingRate; // xP - x coordinate of the pilars; range: 319 - (-51) drawPilars(xP, yP); // Draws the pillars // yB - y coordinate of the bird which depends on value of the fallingRate variable yB+=fallRateInt; fallRate=fallRate+0.4; // Each inetration the fall rate increase so that we can the effect of acceleration/ gravity fallRateInt= int(fallRate); // Checks for collision if(yB>=180 || yB<=0){ // top and bottom gameOver(); } if((xP<=85) && (xP>=5) && (yB<=yP-2)){ // upper pillar gameOver(); } if((xP<=85) && (xP>=5) && (yB>=yP+60)){ // lower pillar gameOver(); } // Draws the bird drawBird(yB); // After the pillar has passed through the screen if (xP<=-51){ xP=319; // Resets xP to 319 yP = rand() % 100+20; // Random number for the pillars height score++; // Increase score by one } //==== Controlling the bird if (myTouch.dataAvailable()&& !screenPressed) { fallRate=-6; // Setting the fallRate negative will make the bird jump screenPressed = true; } // Doesn't allow holding the screen / you must tap it else if ( !myTouch.dataAvailable() && screenPressed){ screenPressed = false; } // After each five points, increases the moving rate of the pillars if ((score - lastSpeedUpScore) == 5) { lastSpeedUpScore = score; movingRate++; } } // ===== initiateGame - Custom Function void initiateGame() { myGLCD.clrScr(); // Blue background myGLCD.setColor(114, 198, 206); myGLCD.fillRect(0,0,319,239); // Ground myGLCD.setColor(221,216,148); myGLCD.fillRect(0, 215, 319, 239); myGLCD.setColor(47,175,68); myGLCD.fillRect(0, 205, 319, 214); // Text myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(221, 216, 148); myGLCD.setFont(BigFont); myGLCD.print("Score:",5,220); myGLCD.setFont(SmallFont); myGLCD.print("HowToMechatronics.com", 140, 220); myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(114, 198, 206); myGLCD.print("Highest Score: ",5,5); myGLCD.printNumI(highestScore, 120, 6); myGLCD.print(">RESET<",255,5); myGLCD.drawLine(0,23,319,23); myGLCD.print("TAP TO START",CENTER,100); drawBird(yB); // Draws the bird // Wait until we tap the sreen while (!gameStarted) { if (myTouch.dataAvailable()) { myTouch.read(); x=myTouch.getX(); y=myTouch.getY(); // Reset higest score if ((x>=250) && (x<=319) &&(y>=0) && (y<=28)) { highestScore = 0; myGLCD.setColor(114, 198, 206); myGLCD.fillRect(120, 0, 150, 22); myGLCD.setColor(0, 0, 0); myGLCD.printNumI(highestScore, 120, 5); } if ((x>=0) && (x<=319) &&(y>=30) && (y<=239)) { gameStarted = true; myGLCD.setColor(114, 198, 206); myGLCD.fillRect(0, 0, 319, 32); } } } // Clears the text "TAP TO START" before the game start myGLCD.setColor(114, 198, 206); myGLCD.fillRect(85, 100, 235, 116); } // ===== drawPlillars - Custom Function void drawPilars(int x, int y) { if (x>=270){ myGLCD.setColor(0, 200, 20); myGLCD.fillRect(318, 0, x, y-1); myGLCD.setColor(0, 0, 0); myGLCD.drawRect(319, 0, x-1, y); myGLCD.setColor(0, 200, 20); myGLCD.fillRect(318, y+81, x, 203); myGLCD.setColor(0, 0, 0); myGLCD.drawRect(319, y+80, x-1, 204); } else if( x<=268) { // Draws blue rectangle right of the pillar myGLCD.setColor(114, 198, 206); myGLCD.fillRect(x+51, 0, x+60, y); // Draws the pillar myGLCD.setColor(0, 200, 20); myGLCD.fillRect(x+49, 1, x+1, y-1); // Draws the black frame of the pillar myGLCD.setColor(0, 0, 0); myGLCD.drawRect(x+50, 0, x, y); // Draws the blue rectangle left of the pillar myGLCD.setColor(114, 198, 206); myGLCD.fillRect(x-1, 0, x-3, y); // The bottom pillar myGLCD.setColor(114, 198, 206); myGLCD.fillRect(x+51, y+80, x+60, 204); myGLCD.setColor(0, 200, 20); myGLCD.fillRect(x+49, y+81, x+1, 203); myGLCD.setColor(0, 0, 0); myGLCD.drawRect(x+50, y+80, x, 204); myGLCD.setColor(114, 198, 206); myGLCD.fillRect(x-1, y+80, x-3, 204); } // Draws the score myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(221, 216, 148); myGLCD.setFont(BigFont); myGLCD.printNumI(score, 100, 220); } //====== drawBird() - Custom Function void drawBird(int y) { // Draws the bird - bitmap myGLCD.drawBitmap (50, y, 35, 30, bird01); // Draws blue rectangles above and below the bird in order to clear its previus state myGLCD.setColor(114, 198, 206); myGLCD.fillRoundRect(50,y,85,y-6); myGLCD.fillRoundRect(50,y+30,85,y+36); } //======== gameOver() - Custom Function void gameOver() { delay(3000); // 1 second // Clears the screen and prints the text myGLCD.clrScr(); myGLCD.setColor(255, 255, 255); myGLCD.setBackColor(0, 0, 0); myGLCD.setFont(BigFont); myGLCD.print("GAME OVER", CENTER, 40); myGLCD.print("Score:", 100, 80); myGLCD.printNumI(score,200, 80); myGLCD.print("Restarting...", CENTER, 120); myGLCD.setFont(SevenSegNumFont); myGLCD.printNumI(2,CENTER, 150); delay(1000); myGLCD.printNumI(1,CENTER, 150); delay(1000); // Writes the highest score in the EEPROM if (score > highestScore) { highestScore = score; EEPROM.write(0,highestScore); } // Resets the variables to start position values xP=319; yB=50; fallRate=0; score = 0; lastSpeedUpScore = 0; movingRate = 3; gameStarted = false; // Restart game initiateGame(); }

这是Arduino草图的下载文件,鸟的图像和鸟的位图文件。

16个反应

  1. heyte

    UTFT myGLCD (SSD1289、38、39、40、41);//参数应该调整到您的Display/Schield

    我可以在Mega 2560上找到SDA(20)和SCL(21),但不能找到CS和RTS:有什么想法吗?
    我的TFT液晶屏ili9488 3.95没有任何屏蔽″。(你在之前的评论中告诉我,我的屏幕不需要它)

    回复
  2. 阿利姆

    你好,这个代码不工作。我使用1.6.5 arduino IDE,但它不工作。#include不工作。arduino警告栏说没有这样的东西。请帮助。还有
    #include有同样的问题。

    回复
  3. Sindrus

    这就跟你问声好!

    当我试图将游戏上传到棋盘时,我得到了这些错误:

    用户/ Sindrehodneland / Documents / Arduino / Sketch_Bird / Sketch_Bird.ino:在功能'void initiategame()':

    /用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。ino:107:30: warning: deprecated conversion from string constant to ' char* ' [-Wwrite-strings]
    myGLCD.print(分数:5220);
    ^
    /用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。ino:109:49: warning: deprecated conversion from string constant to ' char* ' [-Wwrite-strings]
    myglcd.print(“bet188官方网站www.mfxpo.com”,140,220);
    ^
    /users/sindrehodneland/documents/arduino/sketch_bird/sketch_bird.ino:112:37:警告:从字符串常量弃用转换为'char *'[-wwrite-strings]
    myGLCD。打印(最高得分:5 5);
    ^
    /用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。ino:114:31: warning: deprecated conversion from string constant to ' char* ' [-Wwrite-strings]
    myGLCD.print(“< >重置",255年,5);
    ^
    /users/sindrehodneland/documents/arduino/sketch_bird/sketch_bird.ino:116:41:警告:从字符串常量弃用转换为'char *'[-wwrite-strings]
    myglcd.print(“点击开始”,中心,100);
    ^
    /用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。ino:在函数'void gameOver()'中:
    /用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。ino:204:39: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    myglcd.print(“游戏),中心,40);
    ^
    /用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。ino:205:33: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    myglcd.print(“得分:”,100,80);
    ^
    /用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。ino:207:44: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
    myGLCD。print(“重启…”,中心,120);
    ^
    Sketch / Sketch_Bird.ino.cpp.o:in函数`drawbird(int)':
    /users/sindrehodneland/documents/arduino/sketch_bird/sketch_bird.ino:190:未定义的“bird01”的引用
    /users/sindrehodneland/documents/arduino/sketch_bird/sketch_bird.ino:190:未定义的“bird01”的引用
    Collect2: error: ld returned 1 exit status
    退出状态1

    你知道它是什么以及如何解决它?

    回复
  4. Bilal

    你好,当我添加bird01.c文件,这是你提供的下载链接。我得到草图是太大的错误。Sketch使用40.484字节,最大是32.256字节…我该如何解决这个问题。谢谢

    回复
  5. 马特

    我再次运行代码,这次得到这个错误;

    (文件示意图)眨眼。o: In function ' drawBird(int) ':
    Blink.cpp:(.text._Z8drawBirdi+0x2a): undefined reference to ' bird01 '
    Blink.cpp:(.text._Z8drawBirdi+0x2e): undefined reference to ' bird01 '
    Blink.cpp:(.text._Z8drawBirdi+0x8e): undefined reference to ' bird01 '
    Blink.cpp:(.text._Z8drawBirdi+0x92): undefined reference to ' bird01 '

    回复
  6. 艾伦

    我可以将代码和库用于其他带相同的pinout,如飞思卡尔KL25Z吗?
    谢谢。

    回复
  7. 桑德拉

    嗨,这是惊人的。

    我在编程微控制器时全新(但我当然是计算机上的程序)。我用游戏编译了该程序并成功上传了。但显示器只是灰色的发光。我必须连接其他东西,而不是盾牌和显示器吗?像某种按钮开始该程序?我想我有像你一样的硬件,从这里买了它:
    (链接删除)
    或者我需要在程序开始的时候改变参数吗?
    迫不及待地想在我的arduino上玩游戏=)我希望你能帮助我找到错误。非常感谢源代码的剪切和视频的解释。

    亲切的问候,
    桑德拉

    回复
  8. 大卫

    你好,
    谢谢你的乐趣游戏〜
    事实上,我有个问题,我找到了解决办法。
    我不知道确切的原因。
    我使用arduino due + 3.2″TFT LCD(320QVT_9341)。
    当我运行代码时,出现如下错误
    。错误信息:
    退出状态1
    没有匹配的函数调用UTFT::drawBitmap(int, int&, int, unsigned int [1050])

    所以,我试着解决这个错误,最后我像下面这样解决了。
    我必须这样更改:extern unsigned int bird01[0x41A] - >extern unsigned short bird01[0x41A]

    请解释为什么?

    回复

发表评论

您的电子邮件地址将不会被公布。

推荐

2019年面向初学者和爱好者的最佳入门级示波器

为初学者和爱好者最好的示波器

推荐

2019年初学者的8个最佳Arduino Starter Kits

初学者的8个最佳Arduino Starter Kits

推荐

最佳3D打印机初学者和爱好者- 3D打印

最好的3d打印机初学者和爱好者