Processing, problema con keyPressed

B

Es solo una pequeña duda, estoy haciendo el típico pong y le dado mil vueltas y no encuentro que le falla (lo estoy haciendo de hecho casi igualito que como lo propone el processing)

Quiero dibujar una raqueta que se mueva con up y down

El codigo es el siguiente:

spoiler

Está definido dretax, dretay, amplada, altura como float; Downi y Upi como boolean = false. Hay más código pero el problema sale allí, dice que no espera el comando void.

Saludos y muchas gracias

charl1

Tendrás que poner más código o un enlace web. Porque asi es como decir, hay una mancha en el suelo y el display del coche me dice que le falta liquido, cual es?

mortadelegle

Lo mismo digo, usa el tag de codigo mejor, que se agradece.

Imagino que velocitat tiene un valor distinto de 0 pero positivo?

De todas formas esto es como tirar un triple de espaldas, puede ser desde una variable tonta a un fuera de scope, una comparacion en la que borras el valor, que no se estén registrando bien los key presses, etc...

B

Vale, lo primero, gracias por los posts.

Así es velocitat tiene un valor de 5 positivos. Ahora cuelgo el código. Es la primera práctica el problema es que parto de cero y aunque estoy leyendo bastante pues salen muy pocas cosas, mi trabajo es cambiar el juego y corregir algunos bug, pensé en hacerlo de 1 jugador vs otro. Por ahora al menos he ido cambiando los colores, ponerlo bonito y un marcador.

Código

// Mides Tauler
int tx = 640;         // Pantalla VGA 640
int ty = 480;         // x 480

// Mides camp
int cx = tx - 20;     // Deixem 10 punts per banda de marge
int cy = ty - 20;

// variables pel mouse
float mx;
float my;

// variables pel marcador
int score1=0;
int score2=0;
boolean subir=true;
boolean avanzar=true;
float x;
float x2;

// variables per a la pilota
float px;      // Posició x
float py;      // Posició y
int dirx = 1;  // direcció de moviment x
int diry = 1;  // direcció de moviment y

// variables per a la raqueta dreta que mourem amb les fletches 
float dretax = 30; //Posició x
float dretay = 20; //Posició y inicial, aquesta es variable
float amplada = 15; //Amplada raqueta
float altura = 50; //Altura raqueta
float velocitatpala = 5;
boolean Upi = false;
boolean Downi = false;

// variables per detecció de columna, per raqueta/pilota
float i1x;  // Raqueta esquerra
float i1y;
float i2x;  // Raqueta dreta
float i2y;

// aleatorietat
float rx;
float ry;
int irx;
int iry;

void setup()         // Rutina inicialitzacions
{
  size(640, 480);     // Obrim la finestra
  fill(255);          // definim el color de dibuix (blanc)
  noStroke();         // no dibuixem línies de contorn
  px = 320;           // posició inicial de la pilota x
  py = 200;           // posició inicial de la pilota y
  frameRate(20);
}

void draw()    // bucle de programa
{

  rx = random(0,1);
  ry = random(0,1);
  if (rx > 0.5) irx = 1; else irx = 0;
  if (ry > 0.5) iry = 1; else irx = 0;

 
  background(#66D36B);      // fons negre
// dibuixem el camp usant la funció rectangle
  rect(10,10,5,cy);   // Línia vertical esquerra
  rect(10,10,cx,5);   // Línia horitzontal superior
  rect(10,cy+5,cx,5); // Línia horitzontal inferior
  rect(cx+5,10,5,cy); // Línia vertical dreta
  rect(320,10,5,cy);
  arc(320,240,70,70,250,390);


// Moviment raquetes
  mx = mouseX;      // llegeix la posició x del mouse
  my = mouseY;      // llegeix la posició y del mouse

  if (my<20)  my=20; // limitem moviment de la raqueta per dalt
  if (my>410) my=410;// limitem moviment de la raqueta per baix

  rect(30,my,15,50); // dibuixa raqueta esquerra
 
 void keyPressed()
 {
 if (key == CODED) {
 if (keycode == UP) {
 UPi = false;
 }
 else if (keycode == DOWN) {
 Downi = false;
 }
 
 void draw ()
 {
if (UPi) {
dretay -= velocitat;
}
if (DOWNi) {
dretay += velocitat;
}

rect (dretax, dretay, amplada, altura);
}
 
  // moviment de la pilota
  if (dirx == 1)
  {px = px+3;} else {px = px-3;}  // mou la pilota
  if (px > 620) dirx = 0;// quan arriba al límit canvia de sentit
  if (px < 15) dirx =1;  // a dreta i esquerra

  if (diry == 1)
  {py = py + 3;} else {py = py -3;}  // mou la pilota
  if (py > 460) diry = 0;// quan arriba al límit canvia de sentit
  if (py < 15) diry =1;  // a dalt i a baix

  ellipse(px,py,15,15);   //  i ara dibuixa la pilota

// Detector de col.lisions pilota/raqueta
  i1x = abs(35-px);     // diferència entre raqueta i pilota
  i1y = abs(my+25-py);
  i2x = abs(590-px);
  i2y = abs(my+25-py);
// per la raqueta esquerra (canviem direcció x la pilota)
  if ((i1x < 7.5) && (i1y < 25))
  {if (dirx == 1) dirx = 0; else dirx = 1;
   // factor aleatori de rebot
   if (irx == 1) {if (diry == 1) diry = 0; else diry = 1;}
  }
// per la raqueta dreta (canviem direcció x la pilota)
  if ((i2x < 7.5) && (i2y < 25))
  {if (dirx == 1) dirx = 0; else dirx = 1;
   // factor aleatori de rebot
   if (iry == 0) {if (diry == 1) diry = 0; else diry = 1;}
  }

// si la pilota passa de la raqueta esquerra
  if (px < 20)
  {
    px = 320;     // situar la pilota al mig del camp
    py = 200;
    // factor aleatori de saque
   if (irx == 1) {if (diry == 1) diry = 0; else diry = 1;}
    delay(1000);  // esperar 1 segon
    
} // si la pilota passa de la raqueta dreta if (px >615) { px = 320; // situar la pilota al mig del camp py = 200; // factor aleatori de saque if (iry == 0) {if (diry == 1) diry = 0; else diry = 1;} delay(1000); // esperar 1 segon }
//Marcador x=px; if (x < 21) { score2++; } { fill(255); textSize(32); text(score2,500,120); } x2=px; if (x2 > 613 ) { score1++; } { fill(255); textSize(32); text(score1,140,120); } }

Está en catalán, lo único es que no reconoce el keypressed

2 respuestas
m4andg4

#4 plis pegalo entre esto (sin espacios) y nos ayudas a que lo leamos mejor :)


[/ code]
1
m4andg4

#4 Te falta la llave de cerrar la función keyPressed jaja

1 respuesta
B

#6 Lol, me faltaban dos ahora lo he visto pero sigue fallando el void, busque otra opcion que era void release pero salía lo mismo fffffuuuu

Gracias igualmente

m4andg4

Te faltan y sobran muchisimas cosas, cuando tenga un poco de tiempo y no vaya tan ciego me pongo y corrijo jaja, que me viene bien para ir afinando el ojo.

B

Gracias mandanga, yo estoy done, he visto bastantes otros pongs y veo como lo hacen, en este caso he usado lo mismo que un youtuber y está todo igual y me sigue diciendo que le sobra ese void Moviment;

// Mides Tauler
int tx = 640;         // Pantalla VGA 640
int ty = 480;         // x 480

// Mides camp
int cx = tx - 20;     // Deixem 10 punts per banda de marge
int cy = ty - 20;

// variables pel mouse
float mx;
float my;

// variables pel marcador
int score1=0;
int score2=0;
boolean subir=true;
boolean avanzar=true;
float x;
float x2;

//Variables per a la raqueta que mourem amb el teclat
float raquetaX, raquetaY, raquetaAmp, RaquetaA;
float velocitat;
boolean puja = false;
boolean baixa = false;

// variables per a la pilota
float px;      // Posició x
float py;      // Posició y
int dirx = 1;  // direcció de moviment x
int diry = 1;  // direcció de moviment y

// variables per detecció de columna, per raqueta/pilota
float i1x;  // Raqueta esquerra
float i1y;
float i2x;  // Raqueta dreta
float i2y;

// aleatorietat
float rx;
float ry;
int irx;
int iry;

void setup()         // Rutina inicialitzacions
{
  size(640, 480);     // Obrim la finestra
  fill(255);          // definim el color de dibuix (blanc)
  noStroke();         // no dibuixem línies de contorn
  px = 320;           // posició inicial de la pilota x
  py = 200;           // posició inicial de la pilota y
  frameRate(20);
}

void draw()    // bucle de programa
{

  rx = random(0,1);
  ry = random(0,1);
  if (rx > 0.5) irx = 1; else irx = 0;
  if (ry > 0.5) iry = 1; else irx = 0;
 
 Moviment();
  background(#66D36B);      // fons negre
// dibuixem el camp usant la funció rectangle
  rect(10,10,5,cy);   // Línia vertical esquerra
  rect(10,10,cx,5);   // Línia horitzontal superior
  rect(10,cy+5,cx,5); // Línia horitzontal inferior
  rect(cx+5,10,5,cy); // Línia vertical dreta
  rect(320,10,5,cy);
  arc(320,240,70,70,250,390);


// Moviment raquetes
  mx = mouseX;      // llegeix la posició x del mouse
  my = mouseY;      // llegeix la posició y del mouse

  if (my<20)  my=20; // limitem moviment de la raqueta per dalt
  if (my>410) my=410;// limitem moviment de la raqueta per baix
  if (raquetaY<20) raquetaY=20;
  if (raquetaY>410) raquetaY=410;

  rect(590,my,15,50);// dibuixa raqueta dreta
  rect(raquetaX, raquetaY, raquetaAmb, raquetaA); // dibuixa raqueta esquerre 
  
void Moviment() { if (puja == true){ raquetaY = raquetaY + velocitat; } if (baixa == true){ raquetaY = raquetaY-velocitat; } }
// moviment de la pilota if (dirx == 1) {px = px+3;} else {px = px-3;} // mou la pilota if (px > 620) dirx = 0;// quan arriba al límit canvia de sentit if (px < 15) dirx =1; // a dreta i esquerra if (diry == 1) {py = py + 3;} else {py = py -3;} // mou la pilota if (py > 460) diry = 0;// quan arriba al límit canvia de sentit if (py < 15) diry =1; // a dalt i a baix ellipse(px,py,10,10); // i ara dibuixa la pilota // Detector de col.lisions pilota/raqueta i1x = abs(35-px); // diferència entre raqueta i pilota i1y = abs(my+25-py); i2x = abs(590-px); i2y = abs(my+25-py); // per la raqueta esquerra (canviem direcció x la pilota) if ((i1x < 7.5) && (i1y < 25)) {if (dirx == 1) dirx = 0; else dirx = 1; // factor aleatori de rebot if (irx == 1) {if (diry == 1) diry = 0; else diry = 1;} } // per la raqueta dreta (canviem direcció x la pilota) if ((i2x < 7.5) && (i2y < 25)) {if (dirx == 1) dirx = 0; else dirx = 1; // factor aleatori de rebot if (iry == 0) {if (diry == 1) diry = 0; else diry = 1;} } // si la pilota passa de la raqueta esquerra if (px < 20) { px = 320; // situar la pilota al mig del camp py = 200; // factor aleatori de saque if (irx == 1) {if (diry == 1) diry = 0; else diry = 1;} delay(1000); // esperar 1 segon
} // si la pilota passa de la raqueta dreta if (px >615) { px = 320; // situar la pilota al mig del camp py = 200; // factor aleatori de saque if (iry == 0) {if (diry == 1) diry = 0; else diry = 1;} delay(1000); // esperar 1 segon }
voidKeyPressed () { if (key == 'w' || key == 'W') { puja = true; } if (key == 's' || key == 'S') { baixa = true; } }
voidKeyReleased () { if (key == 'w' || key == 'W') { puja = false; } if (key == 's' || key == 'S') { baixa = false; } }

//Marcador x=px; if (x < 21) { score2++; } { fill(255); textSize(32); text(score2,500,120); } x2=px; if (x2 > 613 ) { score1++; } { fill(255); textSize(32); text(score1,140,120); } }

Sigo en obras a ver si me sale, quería ponerle más cositas pero estoy hasta la poronga del processing , ya me curraré el proximo si le da la gana de explicar como se hacen las cosas y no nos da el enlace de la pag principal de processing y ala

Lo que he hecho es, primero definir Moviment() que supongo se tiene que hacer (dentro el void draw, que va de principio a fin de hecho). Luego he usado el keypressed y keyreleased para controlar el up y down con w y s , y finalmente la función del movimiento según si up y down son ciertos o falsos. Sigue dándome el error en el void.

Usuarios habituales

  • backyardog
  • m4andg4
  • mortadelegle
  • charl1