Lavoro con le Classi

Ciao a tutti!
Sto lavorando per creare un’interfaccia per un gioco in modo che si attivo (cliccando su Play Game inizia il gioco), questo è il codice che dovrebbe risultare all’interno del gioco:

int state = 0;
PImage mondrian; 
PFont font1;

void setup() {
  size(600, 600);
  mondrian = loadImage("mondrian_black.jpg");
  image(mondrian, 0, 0, 600, 600);
  font1 = loadFont("BerlinSansFB-Reg-48.vlw");
}

void draw() {
  fill(#FFFFFF);
  textFont(font1);
  textSize(30);
  text ("Mondrian Revolution", 255,280);
  textSize(20);
  text("Play Game!", 255, 330);
  text("Info Game", 255, 360);
}

A questo codice sto provando ad applicare una classe bottone con questo codice:

void setup() {
  size(600, 600);
}


class Bottone {
  float [] posizione = new float [2];
  float size; 
  int etichetta;
  PImage mondrian = loadImage("mondrian_black.jpg");
  boolean [] isPressed = new boolean [2];
  // font?

  // costruttore
  Bottone (float x, float y, float s) {
    posizione[0] = x;
    posizione[1] = y;
    size = s;
  }
  // metodo
  void display() {
    image(mondrian, posizione[0], posizione[1]);
  }
}

L’unica cosa è che non ho molta manualità con le classi, le sto iniziando ad usare da poco… :piangere:
Qualcuno saprebbe come continuare con la “classe bottone”?

Grazie per chiunque voglia darmi una mano :smiling_face_with_three_hearts:

1 Like

Hm, not sure why you have boolean [] isPressed = new boolean [2];
in the class.

When the reason is that you later want to show 2 buttons, that would not be the right approach.

Because the class represents only ONE button, not all of them.

Instead you would have boolean isPressed; in the class (it’s only for one button) and have an array of buttons before setup().

It is also unusual to use an array for x,y: float [] posizione = new float [2]; better use x,y or btnX,btnY or later even a PVector (see reference).

for class / objects see https://www.processing.org/tutorials/objects

Chrisir

2 Likes

here is my version

In this version I pass a text (String) to the class. So the buttons have different texts.

You can also load an image in setup() and pass it to the class (instead of the text).

When you say mondrian = loadImage("mondrian_black.jpg"); inside the class, all buttons would have the same image.

Chrisir


int state = 0;
// PImage mondrian; 
PFont font1;

Bottone b1; 
Bottone b2; 

void setup() {
  size(600, 600);

  //mondrian = loadImage("mondrian_black.jpg");
  //image(mondrian, 0, 0, 600, 600);
  font1 = createFont("BerlinSansFB-Reg-48.vlw", 14);
  textFont(font1);
  textSize(30);

  b1 = new Bottone(100, 100, 80, "Play Game!");
  b2 = new Bottone(100, 170, 80, "Info Game");

  background(111);
}

void draw() {
  if (state==0) {
    background(111);
    textSize(20);
    fill(#FFFFFF);

    text ("Mondrian Revolution", 255, 280);



    b1.display();
    b2.display();
  }
}

void mousePressed() {
  if (b1.checkMouse()) println ("1"); 
  if (b2.checkMouse()) println ("2");
}

// ================================================================ 

class Bottone {

  float [] posizione = new float [2];
  float size; 

  int etichetta;
  PImage mondrian;
  boolean isPressed = false;
  // font?
  String s1; 

  // costruttore
  Bottone (float x, float y, 
    float s, String s1_) {
    posizione[0] = x;
    posizione[1] = y;
    size = s;
    s1=s1_;
    mondrian = loadImage("mondrian_black.jpg");
  }
  // metodo
  void display() {
    noFill();
    stroke(255);
    rect(posizione[0], posizione[1], 
      200, 40);
    fill(255);
    text(s1, 
      posizione[0]+13, posizione[1]+27);
  }

  boolean  checkMouse() {
    return
      mouseX>posizione[0] &&
      mouseX<posizione[0] + 200 &&
      mouseY > posizione[1] &&
      mouseY < posizione[1] + 40;
  }//func
}//class
//
2 Likes

OR you just pass the file name
for the image to the costruttore (not the image itself)

here “m1.jpg” and “m2.png”

Clicking the buttons

  • the clicking works in both Sketches (this is in mousePressed()) - and gives println() output. You would have to change the state number here (in mousePressed()) and act on state in draw().

Chrisir


int state = 0;
PFont font1;

Bottone b1; 
Bottone b2; 

void setup() {
  size(600, 600);

  font1 = createFont("BerlinSansFB-Reg-48.vlw", 14);
  textFont(font1);
  textSize(30);

  b1 = new Bottone(10, 100, 180, "Play Game!", "m1.jpg");  // jpg
  b2 = new Bottone(10, 299, 180, "Info Game", "m2.png");  // PNG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

  background(111);
}

void draw() {
  if (state==0) {
    background(111);

    textSize(20);
    fill(#FFFFFF);
    text ("Mondrian Revolution", 255, 280);

    b1.display();
    b2.display();
  }
}

void mousePressed() {
  if (b1.checkMouse()) println ("1"); 
  if (b2.checkMouse()) println ("2");
}

// ================================================================ 

class Bottone {

  float [] posizione = new float [2];
  float size; 

  int etichetta;
  PImage mondrian;
  boolean isPressed = false;
  // font?
  String string1; 

  // costruttore
  Bottone (float x, float y, 
    float size_, 
    String s1_, 
    String imageName_) {

    posizione[0] = x;
    posizione[1] = y;
    size = size_;
    string1=s1_;

    mondrian = loadImage(imageName_);
  }// costruttore

  // metodo
  void display() {
    noFill();
    stroke(255);
    rect(posizione[0], posizione[1], 
      size, size);

    image(mondrian, 
      posizione[0], posizione[1], 
      size, size);

    fill(0);
    textSize(30);
    text(string1, 
      posizione[0]+13, posizione[1]+27);
  }// metodo

  // metodo
  boolean  checkMouse() {
    return
      mouseX > posizione[0] &&
      mouseX < posizione[0] + size &&
      mouseY > posizione[1] &&
      mouseY < posizione[1] + size;
  } // metodo
  //
}//class
//
2 Likes

Grazie!!!
Non so come ringraziarti, ti ringrazio anche per la spiegazione mi hai aiutato davvero tanto! :smiling_face_with_three_hearts:

Un abbraccio :slightly_smiling_face:

1 Like