на данный момент я подготовил логику движения мяча и его отскока от границ дисплея,но при отскоке от верхней границы он пролетает пару пикселей в нужном направлении,и опять летит к верхней границе Код (C++): #include <U8glib.h> U8GLIB_SSD1306_128X64 u8g(10, 9, 12); int bVector = 4; //векторы я использую для задания движения мяча. их всего пока 4 const int r = 2; int x = 64; int y = 34; void draw(void) { u8g.drawCircle(x, y, r); //шарик u8g.drawFrame(0, 20, 128, 44); //для обозначения границы экрана } void setup() { } void loop(void) { if (bVector == 1) { //при направлении вектора = 1 шарик движется вправо вниз x = x + 1; y = y + 1; } else if (bVector == 2) { //влево вниз x = x - 1; y = y + 1; } else if (bVector == 3) { //влево вверх x = x - 1; y = y - 1; } else if (bVector == 4) { //вправо вверх x = x + 1; y = y - 1; } if (x <= 5 and bVector == 2) { //отскок при столкновении с левой границей bVector = 1; } else if (x <= 5 and bVector == 3) { bVector = 4; } if (x >= 123 and bVector == 4) { //с правой bVector = 3; } else if (x >= 123 and bVector == 1) { bVector = 2; } if (y <= 25 and bVector == 3) { //с верхней. именно на этом месте шарик застревает наверху,пока снова не отскочит от боковой границы bVector = 2; } else if (y <= 25 and bVector == 4) { bVector = 1; } if (y >= 59 and bVector == 1) { //с нижним bVector = 4; } else if (y >= 25 and bVector == 2) { bVector = 3; } // picture loop u8g.firstPage(); do { draw(); } while ( u8g.nextPage() ); // rebuild the picture after some delay delay(24); } малые размеры игрового поля обусловлены тем,что я использую монохромный сине-желтый дисплей,разделенный на две части
все нормально заработало,как только я переписал код таким образом: Код (C++): #include <U8glib.h> U8GLIB_SSD1306_128X64 u8g(10, 9, 12); int bVector = 4; //векторы я использую для задания движения мяча const int r = 2; int x = 64; int y = 34; void draw(void) { u8g.drawCircle(x, y, r); //тот свмый "шарик" u8g.drawFrame(0, 20, 64, 44); //для обозначения границы экрана u8g.drawFrame(63, 20, 64, 44); } void setup() { } void loop(void) { switch ( bVector ) { case 1: x = x + r; y = y + r; if (y >= 62) { bVector = 4; } if (x >= 126) { bVector = 2; } break; case 2: x = x - r; y = y + r; if ( y >=62 ) { bVector = 3; } if ( x<= 2 ) { bVector = 1; } break; case 3: x = x - r; y = y - r; if ( y <=22 ) { bVector = 2; } if ( x<= 2 ) { bVector = 4; } break; case 4: x = x + r; y = y - r; if ( y<= 22) { bVector = 1; } if ( x >= 126) { bVector = 3; } break; } // picture loop u8g.firstPage(); do { draw(); } while ( u8g.nextPage() ); // rebuild the picture after some delay delay(24); }