Problem with running sketch on Processing for Android

Hi!
I’m new in this whole programming thing and I’ve started working on Processing(Java and Android) a few weeks ago.
I’ve followed a tutorial from YouTube and wanted to try it, too. The thing is when I tried to run the sketch it said that there are 54 errors! I can’t understand why because the person who made the tutorial had no problem with it. The only difference was that he worked on Java while I did the exact same thing on Android.
So here’s my question: Does the fact that I didn’t use Java, but Android influence the code in any way? I mean if right now I try to run the same sketch on Processing Java and not Android will I still have the 54 errors or not?
Please, someone tell me if you know something about my problem, I need help as quick as possible! Thank you!

1 Like

When you say you are running “on Android” and “didn’t use Java”, I presume you mean you have the mode on your computer’s Processing IDE set to Android instead of Java, right? So, you are still coding in Java, you just have the target output set to Android. Unless the code you are running has Android-specific APIs, such as touch or sensor libraries, just switch the mode back to Java and check if it runs correctly without errors on your computer.

If the code does work in “Java” mode, maybe you don’t have all of the Android dependencies set up correctly. Do you have the Android SDK installed? Is your Android device connected to your computer? Does your Android device have debugging mode enabled so that it is willing and able to accept unsigned software installations? Did you turn your device on and answer the prompt to allow access to phone data? Does your device show up under the IDE’s “Android / Devices” menu with a check mark next to it?

Before dealing with anything fancy, can you run a trivial program such as

void setup() { fullScreen(); }
void draw() {  line( 0, 0, width, height ); }

and, if not, tell us the actual errors you get.

Most Java Processing sketches should run fine in Android mode as long as they DO NOT use the mouse wheel. Android has no equivalent callback dealing with the wheel, so you’ll have to code around it if you want code to work on both Android and on your computer.

3 Likes

Actually I’m just working on my phone, not on the computer. The app I installed and that I’m using right now is basically called APDE(Android Processing IDE)(sorry if I confused you) That’s why I’m obviously working with Android and not Java and why I was wondering if that makes any difference at all.

And the errors I got are these here(to make it easier for you, it mostly says that I “didn’t define variables” or that “they couldn’t be resolved” which is the thing that makes me freak out because I know that I did! P.S.: Don’t mind the errors that have to do with the sound though, I was only testing it. I know that I have no sound called like that but the other problems are the ones that I can’t seem to understand):
Initializing build sequence…
Deleted old build folder
No library found for processing.sound
Injected log broadcaster
Detected architecture arm64-v8a

Packaging resources with AAPT…
Compiling with ECJ…

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 8)
    import processing.sound.*;
    ^^^^^^^^^^^^^^^^
    The import processing.sound cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 26)
    SoundFile ding; //Das Ger\u00e4usch
    ^^^^^^^^^
    SoundFile cannot be resolved to a type

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 37)
    ding = new SoundFile(this, “ding.mp3”); // Der Ger\u00e4usch “ding.mp3” wird benutzt
    ^^^^
    SoundFile cannot be resolved to a type

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 37)
    ding = new SoundFile(this, “ding.mp3”); // Der Ger\u00e4usch “ding.mp3” wird benutzt
    ^^^^^^^^^
    SoundFile cannot be resolved to a type

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 51)
    left.show(); //,damit der linke Schl\u00e4ger “sich zeigt”
    ^^^^
    The method show() is undefined for the type sketch_20190209a.Paddle

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 52)
    right.show();//,damit der rechte Schl\u00e4ger “sich zeigt”
    ^^^^
    The method show() is undefined for the type sketch_20190209a.Paddle

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 53)
    left.update();//,um z.B.die Werten die beim linken Schl\u00e4ger geschrieben wurden zu “aktualisieren”(z.B. neue informationen \u00fcber bestimmte Variablen und ihre Werte geben)
    ^^^^^^
    The method update() is undefined for the type sketch_20190209a.Paddle

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 54)
    right.update();//es werden Informationen “aktualisiert” wie z.B. in diesem Fall die Werte den Variablen des rechten Schl\u00e4gers
    ^^^^^^
    The method update() is undefined for the type sketch_20190209a.Paddle

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 56)
    puck.edges();//,damit der Puck nicht weiter von der Kante geht
    ^^^^^
    The method edges() is undefined for the type sketch_20190209a.Puck

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 57)
    puck.update();//es werden Informationen \u00fcber den Puck “aktualisiert” wie z.B. die Werte den Variablen
    ^^^^^^
    The method update() is undefined for the type sketch_20190209a.Puck

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 58)
    puck.show();//,damit der Puck “sich zeigt”
    ^^^^
    The method show() is undefined for the type sketch_20190209a.Puck

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 68)
    left.move(0); // der linke Schl\u00e4ger bewegt sich gar nicht mehr
    ^^^^
    The method move(int) is undefined for the type sketch_20190209a.Paddle

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 69)
    right.move(0); // der rechte Schl\u00e4ger bewegt sich gar nicht mehr
    ^^^^
    The method move(int) is undefined for the type sketch_20190209a.Paddle

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 75)
    left.move(-10); //Falls die Taste ‘a’ gedruckt wird, dann geht der linke Schl\u00e4ger 10 Schritte nach unten
    ^^^^
    The method move(int) is undefined for the type sketch_20190209a.Paddle

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 77)
    left.move(10); //Falls die Taste ‘d’ gedruckt wird, dann geht der linke Schl\u00e4ger 10 Schrite nach oben
    ^^^^
    The method move(int) is undefined for the type sketch_20190209a.Paddle

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 80)
    right.move(-10); //Falls die Taste ‘j’ gedruckt wird, dann bewegt sich der rechte Schl\u00e4ger 10 Schritte nach unten
    ^^^^
    The method move(int) is undefined for the type sketch_20190209a.Paddle

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 82)
    right.move(10); //Falls die Taste ‘l’ gedruckt wird, dann bewegt sich der rechte Schl\u00e4ger 10 Schritte nach oben
    ^^^^
    The method move(int) is undefined for the type sketch_20190209a.Paddle

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 127)
    public void update() { //Variablen des Pucks werden “aktualisiert”
    ^^^^^^^^
    Duplicate method update() in type sketch_20190209a

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 128)
    x = x + xspeed;//die x-Position des Pucks ist gleich seine x-Position vom Anfang des Spieles plus dem “xspeed”
    ^
    x cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 128)
    x = x + xspeed;//die x-Position des Pucks ist gleich seine x-Position vom Anfang des Spieles plus dem “xspeed”
    ^
    x cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 128)
    x = x + xspeed;//die x-Position des Pucks ist gleich seine x-Position vom Anfang des Spieles plus dem “xspeed”
    ^^^^^^
    xspeed cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 129)
    y = y + yspeed;//die y-Position des Pucks ist gleich seine y-Position vom Anfang des Spieles plus dem “yspeed”
    ^
    y cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 129)
    y = y + yspeed;//die y-Position des Pucks ist gleich seine y-Position vom Anfang des Spieles plus dem “yspeed”
    ^
    y cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 129)
    y = y + yspeed;//die y-Position des Pucks ist gleich seine y-Position vom Anfang des Spieles plus dem “yspeed”
    ^^^^^^
    yspeed cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 134)
    x = width/2; //seine x-Position ist die H\u00e4lfte der Bildschirmbreite
    ^
    x cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 135)
    y = height/2; //seine y-Position ist die H\u00e4lfte der Bildschirmh\u00f6he
    ^
    y cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 137)
    xspeed = 5 * cos(angle); //“xspeed” ist gleich mit dem Cosinus von der Variable “angle” mal 5(die Funktion cos() berechnet den Cosinus eines Winkels(in den Klammern steht, dass es die Variable “angle”(=Winkel) berechnen muss, die immer neue Zufallswerte vom -PI/4 bis zum +PI/4, nicht einschlie\u00dflich, hat))
    ^^^^^^
    xspeed cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 138)
    yspeed = 5 * sin(angle); //“yspeed” ist gleich mit dem Sinus von der Variable “angle” mal 5(die Funktion sin() berechnet den Sinus eines Winkels(in den Klammern steht, dass es die Variable “angle”(=Winkel) berechnen muss, die immer neue Zufallswerte vom -PI/4 bis zum +PI/4, nicht einschlie\u00dflich, hat))
    ^^^^^^
    yspeed cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 140)
    xspeed = -1; //Falls die Zufallsposition des Pucks(vom 0 bis zum 1, aber 1 nicht einschlie\u00dflich) kleiner als 0.5 ist, dann xspeed=xspeed(-1) (also es wird 1 Mal langsamer als es war)
    ^^^^^^
    xspeed cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 144)
    if ( y < 0 || y > height) {
    ^
    y cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 144)
    if ( y < 0 || y > height) {
    ^
    y cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 145)
    yspeed *= -1; // Falls die y-Position des Pucks kleiner als 0 ist(also ganz links) oder die y-Position gr\u00f6\u00dfer als den maximalen H\u00f6henwert des Bildschirms, dann yspeed = yspeed * (-1)
    ^^^^^^
    yspeed cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 147)
    if ( x < 0 ) {
    ^
    x cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 148)
    ding.play();
    ^^^^
    SoundFile cannot be resolved to a type

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 152)
    if ( x > width ) {
    ^
    x cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 153)
    ding.play();
    ^^^^
    SoundFile cannot be resolved to a type

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 160)
    public void show() { //Puck zeigt sich
    ^^^^^^
    Duplicate method show() in type sketch_20190209a

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 162)
    ellipse(x,y,r2,r2); //Form des Pucks(ein Kreis)
    ^
    x cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 162)
    ellipse(x,y,r2,r2); //Form des Pucks(ein Kreis)
    ^
    y cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 162)
    ellipse(x,y,r2,r2); //Form des Pucks(ein Kreis)
    ^
    r cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 162)
    ellipse(x,y,r2,r2); //Form des Pucks(ein Kreis)
    ^
    r cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 182)
    public void update() { //Attribute der Schl\u00e4gern werden “aktualisiert”
    ^^^^^^^^
    Duplicate method update() in type sketch_20190209a

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 183)
    y += ychange; // ‘+=’ kombiniert Addition und Gleichheit. Also y(die y-Position der Schl\u00e4gern) ist gleich y+ychange
    ^
    y cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 183)
    y += ychange; // ‘+=’ kombiniert Addition und Gleichheit. Also y(die y-Position der Schl\u00e4gern) ist gleich y+ychange
    ^^^^^^^
    ychange cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 184)
    y = constrain(y, h/2, height - h/2); //beschr\u00e4nkt “y” auf einen maximalen und einen minimalen Wert
    ^
    y cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 184)
    y = constrain(y, h/2, height - h/2); //beschr\u00e4nkt “y” auf einen maximalen und einen minimalen Wert
    ^
    y cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 184)
    y = constrain(y, h/2, height - h/2); //beschr\u00e4nkt “y” auf einen maximalen und einen minimalen Wert
    ^
    h cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 184)
    y = constrain(y, h/2, height - h/2); //beschr\u00e4nkt “y” auf einen maximalen und einen minimalen Wert
    ^
    h cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 188)
    ychange = steps; //die Variable “ychange”(=\u00c4nderung der y-Position) bedeutet die Variable “steps”(=Schritte)
    ^^^^^^^
    ychange cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 191)
    public void show() { //, damit die Schl\u00e4ger sich zeigen
    ^^^^^^
    Duplicate method show() in type sketch_20190209a

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 194)
    rect(x,y,w,h); //Form der Schl\u00e4gern(Rechtecken)
    ^
    x cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 194)
    rect(x,y,w,h); //Form der Schl\u00e4gern(Rechtecken)
    ^
    y cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 194)
    rect(x,y,w,h); //Form der Schl\u00e4gern(Rechtecken)
    ^
    w cannot be resolved

  1. ERROR in /data/user/0/com.calsignlabs.apde/app_build/src/processing/test/sketch_20190209a/sketch_20190209a.java (at line 194)
    rect(x,y,w,h); //Form der Schl\u00e4gern(Rechtecken)
    ^
    h cannot be resolved

54 problems (54 errors)
Compiling with ECJ failed

Okay, so you are using Java (as opposed to another language such as Javascript or Python). Processing is a wrapper around Java that provides a simplified coding environment that hides some of Java’s bureaucratic overhead. You’re simply using a Processing IDE that runs on Android. Got it. Unfortunately, since APDE is not part of Processing.org, it’s entirely possible that libraries that work on the PC, such as the sound library, might not be supported on APDE. Or they might have a subtly different interface or require you to import other supporting libraries.

Try simpler code. When you get a string of errors, don’t worry about anything below the first one (or few). Typically, the first error confuses the compiler leading to a string of additional errors. But in particular, importing the sound library is causing your first error, so comment out anything to do with it and make sure the program works without it.

3 Likes

The thing with the sound was only something I was testing and you’re right, there was no way it could have worked. My big problems were these 2 though: when it says that I didn’t define variables(even if that’s not true) and when it says that the they couldn’t be resolved.

After I posted my question I started to wonder if it really was my mistake so I searched for a plenty of videos and everyone wrote very similar codes so if what I did was wrong, then it had to be wrong for them, too, since they did what I did. But then again, I’m apparently the only one who had these issues and also the only one who tried to run the sketch on Processing for Android. That’s why I thought that maby if I run the same sketch on a computer I won’t have this problem. Do you know if there’s a chance that what I wrote could be right, after all?

It looks like APDE should be able to use most Java Processing libraries, but getting them onto your phone takes some work. It seems like you have to download them outside of the app and then use its library manager to add them to your sketch.

It’s entirely possible you made a small typo and all the rest of your errors stemmed from that. If it’s small enough, post your code so we can see it. Be sure to use the </> mode in the post editor to format your code so we can read it well.

This is only the first tab (I have 3) but I think it’s hard for you to correct it without the other 2 tabs so I’ll post them, too.
Also, don’t forget to ignore my commentaries, I was trying to understand what the whole code meant, but that’s irrelevant for you, since they are in German :slight_smile:

import processing.sound.*; //ein Geräusch wird importiert

// Objekten
Puck puck; //Der Puck

SoundFile ding; //Das Geräusch

Paddle left; //Der linke Schläger
Paddle right; //Der rechte Schläger 

int leftscore = 0; //Linken Score beträgt 0 Punkte am Anfang des Spieles
int rightscore = 0;//Rechten Score beträgt 0 Punkte am Anfang des Spieles


//"void" definiert eine Methode ohne Rückgabewert
void setup() { //Befehle, die zu Anfangs ×1 ausgeführt werden
size(600,400); //Größe(in Pixel)
ding = new SoundFile(this, "ding.mp3"); // Der Geräusch "ding.mp3" wird benutzt
puck = new Puck(); //neues Objekt(in disem Fall der Puck)wird gemacht
left = new Paddle(true);  
right = new Paddle(false);
// so könnte das Programm wissen, dass es 2 verschiedene Schläger gibt 
} 

void draw() { //nachdem setup() werden die Befehle bei draw() ohne Ende ausgeführt
background(#D9A8D1); //Hintergrundfarbe

//Funktionenserstellungen
puck.checkPaddleLeft(left); //,damit der Puck "wissen" kann, wann er den linken Schläger berührt
puck.checkPaddleRight(right);//,damit der Puck "wissen" kann, wann er den rechten Schläger berührt

left.show(); //,damit der linke Schläger "sich zeigt"
right.show();//,damit der rechte Schläger "sich zeigt"
left.update();//,um z.B.die Werten die beim linken Schläger geschrieben wurden zu  "aktualisieren"(z.B. neue informationen über bestimmte Variablen und ihre Werte geben)
right.update();//es werden Informationen "aktualisiert" wie z.B. in diesem Fall die Werte den Variablen des rechten Schlägers 

puck.edges();//,damit der Puck nicht weiter von der Kante geht
puck.update();//es werden Informationen über den Puck "aktualisiert" wie z.B. die Werte den Variablen 
puck.show();//,damit der Puck "sich zeigt"

fill(255); //Farbe des Textes(des Scores)
textSize(32); //Größe des Textes
text(leftscore,32,40); //Position des linken Textes 
text(rightscore,width-64,40); //Position des rechten Rextes

} 

void keyReleased() { // Funktion, die bei jedem Loslassen einer Taste aufgerufen wird
  left.move(0); // der linke Schläger bewegt sich gar nicht mehr
  right.move(0); // der rechte Schläger bewegt sich gar nicht mehr
}


void keyPressed() { //Funktion für das Drucken von Tasten(muss in draw() stehen, damit es sich nicht nur einmal wiederholt)
  if (key == 'a') {
    left.move(-10); //Falls die Taste 'a' gedruckt wird, dann geht der linke Schläger 10 Schritte nach unten
  } else if ( key == 'd') {
    left.move(10); //Falls die Taste 'd' gedruckt wird, dann geht der linke Schläger 10 Schrite nach oben
  }
  if (key == 'j') { 
    right.move(-10); //Falls die Taste 'j' gedruckt wird, dann bewegt sich der rechte Schläger 10 Schritte nach unten
  } else if (key == 'l') {
    right.move(10); //Falls die Taste 'l' gedruckt wird, dann bewegt sich der rechte Schläger 10 Schritte nach oben
  }
}
``
1 Like

This is the second one in case you need it(for the puck)

class Puck { //Eigenschaften und Methoden des Pucks werden definiert
  float x = width/2; //Variable 'x'(x-Position des Pucks)dekfinieren und ihm als Wert die Hälfte der maximalen Wert der Bildbreite zuordnen
  float y = height/2;//Variable 'y'(y-Position des Pucks)definieren und ihm als Wert die Hälfte der maximalen Bildhöhenwert zuordnen
  float xspeed; //Variable 'xspeed'(=die Geschwindigkeit der Bewegung der x-Position des Pucks) definieren 
  float yspeed; //Variable 'yspeed'(=die Geschwindigkeit der Bewegung der y-Position des Pucks) definieren 
  float r = 12; //Variable 'r'(Radius des Pucks) definieren und ihm den Wert 12(Pixel) zuordnen
  
  Puck() { 
    reset();
  } //die Funktion "reset()" wird dür den Puck erstellt
  
  
  
  void checkPaddleLeft(Paddle p) { //Der Puck prüft, ob er am linken Schläger vorbeigegangen ist(in den Klammern steht, dass "Paddle" "p" abgekürzt wird)
    if ( y < p.y + p.h/2 && y > p.y - p.h/2 && x - r < p.x + p.w/2) {
      xspeed *= -1; 
      //Falls die y-Position des Pucks kleiner als die y-Position des linken Schlägers plus die Hälfte der Höhe des linken Schlägers ist
      //und die y-Position des Pucks größer als die y-Position des linken Schlägers minus die Hälfte der Höhe des linken Schlägers  ist
      //und die x-Position des Pucks minus sein Radius kleiner als die x-Position des linken Schlägers plus die Hälfte der Breite des linken Schlägers ist, dann xspeed = xspeed*(-1) 
    }
      if(x > p.x) {
        xspeed *= -1;
        //Falls die x-Position des Pucks größer als die x-Position des linken Schlägers ist("p.x"="paddle's x"= x-Position des linken Schlägers), dann xspeed = xspeed*(-1)
    }
  }
    
  void checkPaddleRight(Paddle p) { // Der Puck prüft, ob er am rechten Schläger vorbeigegangen ist (in den Klammern steht, dass "Paddle" "p" abgekürzt wird)
    if (y < p.y + p.h/2 && y > p.y - p.h/2 && x + r > p.x - p.w/2) {
      xspeed *= -1;
      //Falls die y-Position des Pucks kleiner als die y-Position des rechten Schlägers plus die Hälfte der Höhe des rechten Schlägers ist
      //und die y-Position des Pucks größer als die y-Position des rechten Schlägers minus die Hälfte der Höhe des rechten Schlägers ist
      //und die x-Position des Pucks plus seinem Radius größer als die x-Position des rechten Schlägers minus die Hälfte der Breite des rechten Schlägers ist, dann xspeed=xspeed*(-1) (d.h. der Puck geht 1 Mal langsamer als er ging) 
      }
        if ( x < p.x) {
        xspeed *= -1;
        //Falls die x-Position des Pucks kleiner als die x-Position des rechten Schlägers ist, dann xspeed = xspeed*(-1) 
      }
    }
  }
 
  
  void update() { //Variablen des Pucks werden "aktualisiert" 
    x = x + xspeed;//die x-Position des Pucks ist gleich seine x-Position vom Anfang des Spieles plus dem "xspeed"
    y = y + yspeed;//die y-Position des Pucks ist gleich seine y-Position vom Anfang des Spieles plus dem "yspeed"
    
  }
  
  void reset() { //der Puck wird resetiert(er geht an andere Positionen, nachdem er einer der Schlägern berührt hatte)
    x = width/2; //seine x-Position ist die Hälfte der Bildschirmbreite
    y = height/2; //seine y-Position ist die Hälfte der Bildschirmhöhe
    float angle = random(-PI/4, PI/4); //die Variable "angle"(=Winkel) wird definiert und sie ist gleich mit den Zufallspositionen von dem Viertel des PIs des Pucks im Minus-Bereich und dem Viertel des PIs des Pucks im Plus-Bereich(+PI/4 nicht einschließlich)
    xspeed = 5 * cos(angle); //"xspeed" ist gleich mit dem Cosinus von der Variable "angle" mal 5(die Funktion cos() berechnet den Cosinus eines Winkels(in den Klammern steht, dass es die Variable "angle"(=Winkel) berechnen muss, die immer neue Zufallswerte vom -PI/4 bis zum +PI/4, nicht einschließlich, hat))
    yspeed = 5 * sin(angle); //"yspeed" ist gleich mit dem Sinus von der Variable "angle" mal 5(die Funktion sin() berechnet den Sinus eines Winkels(in den Klammern steht, dass es die Variable "angle"(=Winkel) berechnen muss, die immer neue Zufallswerte vom -PI/4 bis zum +PI/4, nicht einschließlich, hat)) 
    if(random(1) < 0.5) {
      xspeed *= -1; //Falls die Zufallsposition des Pucks(vom 0 bis zum 1, aber 1 nicht einschließlich) kleiner als 0.5 ist, dann xspeed=xspeed*(-1) (also es wird 1 Mal langsamer als es war) 
    }
  }
  void edges() { //,damit der Puck nicht weiter von den Kanten/Randen geht
    if ( y < 0 || y > height) { 
       yspeed *= -1; // Falls die y-Position des Pucks kleiner als 0 ist(also ganz links) oder die y-Position größer als den maximalen Höhenwert des Bildschirms, dann yspeed = yspeed * (-1) 
    }
     if ( x < 0 ) {
       ding.play(); 
       rightscore++; 
       reset(); //Falls die x-Position des Pucks kleiner als 0 ist(also ganz links), dann wird das Geräusch gespielt, der rechte Score wird sich erhöhen(um +1 ändern) und die Funktion reset() wird aufgerufen
     }
     if ( x > width ) {
       ding.play();
       leftscore++;
       reset(); 
       //Falls die x-Position des Pucks größer als den maximalen Bildbreitenwert ist(d.h. ganz rechts), dann wird das Geräusch gespielt, der linke Score wird sich erhöhen(um +1 ändern) und die Funktion reset() wird aufgerufen
     }
  }
 
  void show() { //Puck zeigt sich
    fill(#961C82); //Farbe des Pucks
    ellipse(x,y,r*2,r*2); //Form des Pucks(ein Kreis)
  }
``

And this is the last tab I wrote(for the two paddles). Hope you can help me and I’m really sorry that you have to deal with my terrible beginner problems :sweat_smile:

class Paddle { //Funktionen und Attribute des Schlägers werden definiert
  float x; //Variable 'x'(x-Position) definieren
  float y = height/2; //Variable 'y'(y-Position) definieren und es als Wert die Hälfte des Bildhöhenwerts zuordnen
  float w = 20; //Variable 'w'(width=Breite des Schlägers)definieren und es den Wert 20 (20 Pixel) zuordnen 
  float h = 100; //Variable 'h'(height=Höhe des Schlägers)definieren und es den Wert 100 (100 Pixel) zuordnen 
  float ychange = 0; //Variable 'ychange'(die sogenannte Änderung der y-Position der Schläger) definieren und es den Wert 0 zuordnen(d.h. am Anfang des Spieles bewegen sich die Schläger gar nicht)
  
  Paddle (boolean left) { //Ist es der linke oder der rechte Schläger?('boolean' wird für eine Variable, die nur zwei Werte haben kann, benutzt('true' oder 'false'))
    if (left) { 
      x = w/2 + 10; //Falls es der linke ist, dann beträgt 'x'(seine x-Position) die Hälfte seiner Breite (d.h. 20:2=10) plus 10
    }
    else {
      x = width - w/2 - 10; //Ansonsten(also falls es der rechte Schläger ist), dann beträgt 'x'(seine x-Position) die Breite des Bildes minus die Hälfte der Breite des Schlägers(20:2=10) minus 10
    }
  }
 }
  
  void update() { //Attribute der Schlägern werden "aktualisiert"
    y += ychange; // '+=' kombiniert Addition und Gleichheit. Also y(die y-Position der Schlägern) ist gleich y+ychange
    y = constrain(y, h/2, height - h/2); //beschränkt "y" auf einen maximalen und einen minimalen Wert
  }
  
  void move(float steps){ //die Variable "steps"(=Schritte) wird definiert und bei der Bewegung benutzt
    ychange = steps; //die Variable "ychange"(=Änderung der y-Position) bedeutet die Variable "steps"(=Schritte)
  }
  
  void show() { //, damit die Schläger sich zeigen
    fill(#961C82); //die Farbe der Schlägern
    rectMode(CENTER); //die Position der Rechtecken(in den Klammern wird geschrieben, wo die stehen sollen. In disem Fall ist es die Mitte) 
    rect(x,y,w,h); //Form der Schlägern(Rechtecken)
  }
 ``

It looks like the problem might be as simple as getting your { and } in the right places. In both the Puck and Paddle classes, the functions at the bottom ( update(), show(), and so on ) should be inside the {} for the class. At least for Paddle, it looks like you close off the class definition with } and then list the functions below it, outside of the class scope. So those functions end up not having access to any of the class variables and that causes your errors.

3 Likes

OMG, I CAN’T BELIEVE IT, IT WORKS! THANK YOU SO MUCH, THANK YOU, THANK YOU, THANK YOU!!! You just saved my school grade so again, thank you!:smile:

Glad to hear it.

Since the keyboard is hard to use with games on Android, you might want to use the “mouse”, i.e., touches. Try adding something like this to your code:

void mouseDragged() {
  if( mouseX < width*0.1 ) {
    left.move( (mouseY - pmouseY)*100.0/height );
  } else if( mouseX > width*0.9 ) {
    right.move( (mouseY - pmouseY)*100.0/height );
  }
}

void mouseReleased() {
  left.move(0); // der linke Schläger bewegt sich gar nicht mehr
  right.move(0); // der rechte Schläger bewegt sich gar nicht mehr
}

Drag on the left or right paddle to move it up or down. The 100.0 number is arbitrary. But does need to be a float otherwise the division by the height will always give a 0 result. (An integer divided by an integer rounds towards 0.) This code doesn’t drag on the paddle, specifically, it just detects drags on the side of the screen.

2 Likes

Wow, thanks for that, it’s really helpful! :blush::blush::blush: