Bild flackert auf dem Display (Pong)

Ich habe ein Problem mit meinem Programmcode. Ich wollte das Videospiel Pong programmieren und bin damit auch soweit fertig geworden. Abgesehen von einigen Unstimmigkeiten habe ich aber noch ein grösseres problem: Das Bild flackert wenn ich das Programm starte und wenn ich selbst etwas bewege dann sogar noch mehr. Ich weiß, dass es am "delay" liegt aber nicht wie man es verhindern kann. Wäre Super wenn mir da jemand helfen könnte.
Hier der Code:

#include <Adafruit_SSD1306.h>
#include <splash.h>

#include <Adafruit_GFX.h>
#include <Adafruit_GrayOLED.h>
#include <Adafruit_SPITFT.h>
#include <Adafruit_SPITFT_Macros.h>
#include <gfxfont.h>



#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 

 #define OLED_RESET     -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int x=63;
int y=31;
int vy=((random(0,2)*2-1)*1,1);
int vx=((random(0,2)*2-1)*1,1);
int D=2;
int A=25;
int B=35;
int G=35;
int F=25;
const int X_Pin=A0;  
const int X2_Pin=A2; 

 int b=0;
 int m=0;
int h=10;    //zum ändern von paddel aus



     


void setup() {
  // put your setup code here, to run once:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 
display.clearDisplay(); 
    
}

void loop() {
  // put your main code here, to run repeatedly:
  
display.setTextColor(WHITE);
 display.setCursor(54,0);
display.print(b);
display.setCursor(72,0);
display.print(m);

        //SPIELER 1
  display.drawLine(0,F,0,G,WHITE);
  display.display();
  if(analogRead(X_Pin)>1000){
    display.clearDisplay();
    F=F+D;
    G=G+D;
    display.drawLine(0,F,0,G, WHITE);
    display.display();
      }
  if(analogRead(X_Pin)<500){
    display.clearDisplay();
    F=F-D;
    G=G-D;
    display.drawLine(0,F,0,G, WHITE);
    display.display();
    }
    display.drawLine(0,F,0,G, WHITE);
      if(F<1){
        F=1;
        G=F+h;}
      if(G>62){
        G=62;
        F=G-h;}





       //SPIELER 2
    
    display.drawLine(127,A,127,B,WHITE);
    display.display();
  if(analogRead(X2_Pin)>1000){
    display.clearDisplay();
    A=A+D;
    B=B+D;
    display.drawLine(127,A,127,B, WHITE);
    display.display();
      }
  if(analogRead(X2_Pin)<500){
  display.clearDisplay();
    A=A-D;
    B=B-D;
    display.drawLine(127,A,127,B, WHITE);
    display.display();
    }
    display.drawLine(127,A,127,B, WHITE);

      if(A<1){
        A=1;
        B=A+h;}
      if(B>62){
        A=B-h;
        B=62;}


             //BALL
    display.drawPixel(x,y,WHITE);
display.clearDisplay();
x=x+vx;
y=y+vy;
display.drawPixel(x,y,WHITE);
if(y>62){
  vy=-vy;
}
if(y<1){
 vy=-vy;
}

  
   
  
        if(x>125){
          if(A<=y&&B>=y){
             vx=-vx;
          }
         
        }
       
     if(x<2){
      if(F<=y&&G>=y){
        vx=-vx;
    } }
     
     x=x+vx;
     y=y+vy;
     //hier war ball


     if(x<1){
      x=63;
      y=31;
      display.drawPixel(x,y,WHITE);
      m=m+1;
      delay(500);
     }
     if(x>125){
      x=63;
      y=31;
      display.drawPixel(x,y,WHITE);
      b=b+1;
      delay(500);
     }

    if(b==11){
      display.clearDisplay();
      delay(100);
      display.setCursor(40,26);
      display.print("Spieler 1");
      display.setCursor(30,38);
      display.print("hat gewonnen!");
      b=b-b;
      m=m-m;
      display.display();
      delay(5000);
    }
    

      if(m==11){
      display.clearDisplay();
      display.setCursor(40,26);
      display.print("Spieler 2");
      display.setCursor(30,38);
      display.print("hat gewonnen!");
      b=b-b;
      m=m-m;
      display.display();
      delay(5000);
    }
    
    display.display();
   }


Ich glaube es liegt weniger am delay(), als an deinen ständigen

display.clearDisplay();

Damit programmierst Du das flackern quasi direkt in den Code.
Wenn Du ein Objekt 'Paddle' oder 'Ball' verschieben willst, musst Du nur genau dieses Objekt an der alten Stelle löschen ( mit Hintergrundfarbe überschreiben) und dann an der neuen Position erneut zeichnen. Immer das ganze Display zu löschen führt genau zu dem Flackern, das Du beobachtest.


  //BALL
  display.drawPixel(x, y, WHITE);
  display.clearDisplay();
  x = x + vx;
  y = y + vy;
  display.drawPixel(x, y, WHITE);

Das macht komische Dinge :slight_smile:
@MicroBahner war schneller...