在这个Arduino项目中,我们将制作一个很酷的Arduino游戏,实际上是智能手机的流行Flappy鸟游戏的复制品,使用Arduino和TFT触摸屏。您可以通过观看以下视频来了解betway它是如何工作的,或者阅读下面的书面文本。
游戏非常简单但有趣和上瘾。使用触摸屏我们控制鸟并尽量避免随着我们的进步而增加的移动支柱。此外,游戏也可以存储最高分,即使拔掉电源也是如此。
在前面的教程中(Arduino TFT教程)我们详细学习了如何使用Arduino的TFT触摸屏,我们留下的游戏示例在本教程中解释。所以现在,就像在之前的教程,我们将逐步解释这个Arduino游戏背后的代码。
源代码
由于代码有点较长,并且更好地理解,我将在每个部分的描述中发布程序的源代码。并且在本文的末尾,我将发布完整的源代码。
我们将使用Henning Karlsen制作的UTFT和Urtouch库。您可以从他的网站下载这些库,www.rinkydink必威lolelectronics.com.。此外,我们将使用EEPROM库存储EEPROM中的最高分。EEPROM是一个存储器即使在关闭电路板时也可以存储数据。
在我们包括库之后,我们需要创建UTFT和URTOUCH对象,并定义游戏所需的变量。在设置部分中,我们需要启动显示和触摸,从EEPROM读取最高分数,并使用initiategame()自定义函数启动游戏。
#include#include #include < eepromh > //==== Creating Objects UTFT myGLCD(SSD1289,38,39,40,41);// URTouch myTouch(6, 5, 4, 3, 2);//==== define Fonts extern uint8_t SmallFont[];走读生uint8_t BigFont [];走读生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循环,进入主循环的代码将开始游戏。
// ===== initiategame - 自定义函数void initiategame(){myglcd.clrscr();//蓝色背景myglcd.setcolor(114,198,206);myglcd.flexrect(0,0,319,239);//地面myglcd.setcolor(221,216,148);myglcd.flexrect(0,215,319,239);myglcd.setcolor(47,175,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变量的值都会通过移动的变量的值减少,在开始时具有3的值,并且随着我们增加的游戏增加。
//主循环段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像素宽的柱子,从右向左移动,每一个柱子都有不同的随机高度。为了让它们在逻辑上移动,在每次迭代后,我们需要清除屏幕并重新绘制图形,让柱子在它们的新位置。然而,我们不能这样做,因为屏幕的刷新率较低,这将导致图像闪烁。为了激活它的所有像素,屏幕需要更多的时间,因此我们将不得不即兴和重画那些正在移动的东西。
所以让我们来看看TavePilars()自定义功能如何做到这一点。它需要XP和YP变量,并使用它们和填充()函数它将绘制支柱。因此,每次迭代都将柱子从左侧和右侧的额外蓝色矩形绘制,右侧,以这种方式清除先前的拔管,并以这种方式,我们实际上是刚刚重绘移动支柱的即兴创作。这里的IF语句是一个额外的即兴创作,因为由于某种原因,如果其“X2”参数具有屏幕大小的值,则填充()函数不起作用。此外,在此自定义功能的末尾,我们需要打印达到分数的值。
// ===== drawplillars - 自定义函数void tavepills(int x,int y){if(x> = 270){myglcd.setcolor(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语句限制鸟,以便如果它击中顶部,地面或游戏将结束的柱子。
接下来是DrawBird()自定义功能,让我们看看它是如何工作的。betway这只鸟实际上是一张照片,它使用Henning Karlsen制造的ImageConverter565工具转换为位图。使用该工具创建的“.c”文件需要包含在目录中,以便在启动草图时加载。我们还必须定义像这样的位图和使用drawBitMap()函数,我们将在屏幕上绘制照片。鸟有一个固定的X - 坐标和YB变量,如Y - 坐标。类似于柱子,我们将通过绘制上方和鸟下方的蓝色矩形来清除前一个鸟类状态。
// ====== drawbird() - 自定义函数void drawbird(int y){//绘制鸟类 - Bitmap myglcd.drawbitmap(50,y,35,30,bird01);//绘制鸟类上方和下方的蓝色矩形,以便清除其Previus状态MyGlcd.setColor(114,198,206);myglcd.fillouroundrect(50,Y,85,Y-6);myglcd.fillouroundrect(50,Y + 30,85,Y + 36);}
回到循环中,我们可以看到,在柱子通过屏幕后,XP变量将被重置为319,YP将从20到100的新的随机值为柱的高度,分数将增加一个。使用下一个陈述我们控制鸟。如果我们点击屏幕,我们会将下降的速度设置为负面将使鸟类跳跃以及如果语句不允许发生这种情况,如果我们只握住屏幕,那就不会发生这种情况。最后一个陈述是为了游戏的难度,并且它会在每个细点后增加柱的移动速度。
好的,现在留下了什么是了解游戏()自定义功能的工作原理。在延迟一秒钟后,它将清除屏幕,打印分数和一些文本,如果分数高于最高分,它将将其写入EEPROM,它会将所有变量重置为其起始位置值并结束它将调用initiategame()自定义函数重新启动游戏。
//======== gameOver() -自定义函数无效gameOver(){延迟(1000);// 1秒//清除屏幕和打印文本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 (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 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);// URTouch myTouch(6, 5, 4, 3, 2);//==== define Fonts extern uint8_t SmallFont[];走读生uint8_t BigFont [];走读生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草图的下载文件,鸟的图像和鸟的位图文件。
UTFT MyGlcd(SSD1289,38,39,40,41);//应将参数调整到显示/ schield
我可以在我的Mega 2560上找到SDA(20)和SCL(21),但不是CS和RTS:错误?
我的TFT LCD屏幕ili9488 3.95“我没有任何盾牌。(你在早期的评论中告诉我,我没有为我的屏幕不需要它)
嗨此代码不起作用。我使用1.6.5 Arduino IDE但不起作用。#include不起作用。Arduino警告栏在说没有这样的事情。请帮忙。而且也是
#include也有同样的问题。
我使用的是相同的版本,程序是完美的工作。你肯定做错了什么。重新检查代码。
你好!
当我试图将游戏上传到棋盘时,我得到了这些错误:
用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。在函数' void initiateGame() '中:
/用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。ino:107:30: warning: deprecated conversion from string constant to ' char* ' [-Wwrite-strings]
myGLCD.print(分数:5220);
^
/users/sindrehodneland/documents/arduino/sketch_bird/sketch_bird.ino:109:49:警告:从字符串常量弃用转换为'char *'[-wwrite-strings]
myGLCD.print (bet188官方网站" HowToMechatronics.com ", 140年,220年);
^
/用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。ino:112:37: warning: deprecated conversion from string constant to ' char* ' [-Wwrite-strings]
myglcd.print(“最高分:”,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);
^
/用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。ino:116:41: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
myglcd.print(“点击开始”,中心,100);
^
/users/sindrehodneland/documents/arduino/sketch_bird/sketch_bird.ino:在功能'void gamover()':
/users/sindrehodneland/documents/arduino/sketch_bird/sketch_bird.ino:204:39:警告:从字符串常量弃用转换为'char *'[-wwrite-strings]
myglcd.print(“游戏),中心,40);
^
/users/sindrehodneland/documents/arduino/sketch_bird/sketch_bird.ino:205:33:警告:从字符串常量弃用转换为'char *'[-wwrite-strings]
myglcd.print(“得分:”,100,80);
^
/users/sindrehodneland/documents/arduino/sketch_bird/sketch_bird.ino:207:44:警告:从字符串常量向'char *'[-wwrite-strings]弃用转换
myglcd.print(“重新启动......”,中心,120);
^
素描/ sketch_bird.ino.cpp。o: In function ' drawBird(int)':
/用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。Ino:190: undefined reference to ' bird01'
/用户/ sindrehodneland /文件/ Arduino / sketch_bird / sketch_bird。Ino:190: undefined reference to ' bird01'
collect2:错误:LD返回1个退出状态
退出状态1.
你知道这意味着什么吗?知道如何修复它吗?
您是否正确跟随了所有步骤,您是否检查了Arduino TFT LCD教程。它看起来一些功能不适合你。您是否尝试过图书馆的演示示例?
嗨,当我添加Bird01.c文件时,您在下载链接中提供。我得到剪影太大了。素描使用40.484字节最多是32.256字节......说。我如何解决这个问题。谢谢
确保在Arduino IDE选项中选择了Arduino Mega Board。
先生,你可以告诉我电路图
和所需的组件
查看相关Arduino TFT教程。
我再次运行代码,这次得到这个错误;
(素描中的文件)blink.o:在功能`绘制(int)'中:
Blink.cpp:(.text._Z8drawBirdi+0x2a): undefined reference to ' bird01 '
blink.cpp :(。text._z8drawbirdi + 0x2e):未定义引用`bird01'
Blink.cpp:(.text._Z8drawBirdi+0x8e): undefined reference to ' bird01 '
blink.cpp :(。text._z8drawbirdi + 0x92):未定义引用“bird01”
所有文件都在草图的同一个文件夹目录下吗?
我可以使用与freescale kl25z相同引脚的其他乐队的代码和库吗?
谢谢。
您应该查看库文档。它有所有支持的显示/控制器的列表。
嗨,这太棒了。
我是一个全新的微控制器编程(但我确实在计算机上编程)。我已经用游戏编写了程序并上传成功。但是显示器只有灰色的光芒。除了屏蔽和显示器,我还需要连接其他东西吗?像是某种启动程序的按钮?我想我有和你一样的硬件,从这里买的:
[链接删除]
或者我需要在程序开始的时候改变参数吗?
等不及在我的arduino上玩游戏=)希望你能帮我找到错误。非常感谢源代码的剪切和视频上的解释。
亲切的问候,
桑德拉
谢谢。
检查你的显示控制器是否与TFT库兼容。您可以在库的文档中检查支持的显示控制器。
你好,
谢谢你有趣的游戏~
事实上,我有个问题,我找到了解决办法。
我不知道确切的原因。
我使用了Arduino到期+ 3.2“TFT LCD(320QVT_9341)。
当我运行代码时,有一个如下错误
。错误信息 :
退出状态1.
无法拨打“UTFT :: drawbitmap(int,int&,int,int,unsigned int [1050])'没有匹配函数
所以,我试着解决这个错误,最后我像下面这样解决了。
我不得不改变这样:extern unsigned int bird01 [0x41a] - > extern unsigned short bird01 [0x41a]
PLZ,解释为什么?