es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo hacer que múltiples objetos se muevan al azar?

Estoy tratando de hacer una especie de clon de Agar.io en Processing. He creado muchos puntos de comida, pero también quiero hacer que se muevan y rebote en los bordes de la pantalla para agregarle un poco de estilo. Sin embargo, no estoy seguro de cómo hacer que los puntos se muevan al azar.

“`
ArrayList<ellipse> ellipse = new ArrayList<ellipse>();
//Imágenes
PImage background;
int x = 2;
//Palabras
PFont arial;

void setup() {
size(1920, 1080);

//Cambiar el fondo
if (x == 1){
background = loadImage("backdrop1.jpg");
}
if (x == 2){
background = loadImage("backdrop2.jpg");
}

//Crear la fuente
arial = createFont("Arial", 16, true); //el true es para suavizado

//Cargar desde un archivo de texto
//por determinar…

//Agregar los puntos de comida
for (int foodSpawn = 0; foodSpawn < 50; foodSpawn++) {
ellipse.add(new Ellipse(random(100, 1820), random(100, 980), 50, 50));
}
}

void draw() {
background(background);
for (int i = 0; i < ellipse.size(); i++) {
Ellipse e = ellipse.get(i);

<pre><code>fill(#62C3E8);
ellipse(e.xLoc, e.yLoc, e.eWidth, e.eHeight);
</code></pre>

}
}

class Ellipse {
float xLoc;
float yLoc;
float eWidth;
float eHeight;

public Ellipse(float xLoc, float yLoc, float eWidth, float eHeight) {
this.xLoc = xLoc;
this.yLoc = yLoc;
this.eWidth = eWidth;
this.eHeight = eHeight;
}
}
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para hacer que los puntos de la comida se muevan al azar, puedes agregar código dentro de la clase Ellipse para actualizar su posición en cada cuadro.

    Primero, puedes agregar dos variables para seguir la velocidad de la elipse en las direcciones x e y:

    float xVel;
    float yVel;
    

    Luego, en el constructor de Ellipse, puedes inicializar estas variables con un valor aleatorio entre -5 y 5:

    public Ellipse(float xLoc, float yLoc, float eWidth, float eHeight){
       this.xLoc = xLoc;
       this.yLoc = yLoc;
       this.eWidth = eWidth;
       this.eHeight = eHeight;
       this.xVel = random(-5, 5);
       this.yVel = random(-5, 5);
    }
    

    Finalmente, en la función draw, puedes actualizar la posición de cada elipse sumando su velocidad a su ubicación, y luego verificar si ha alcanzado el borde de la pantalla. Si lo ha hecho, puedes invertir su velocidad en esa dirección para hacer que rebote:

    java
    for(int i = 0; i<ellipse.size(); i++){="" ellipse="" e="ellipse.get(i);" fill(#62c3e8);="" ellipse(e.xloc,e.yloc,="" e.ewidth,="" e.eheight);="" actualizar="" posición="" e.xloc="" +="e.xVel;" e.yloc="" +="e.yVel;" verificar="" si="" alcanzó="" el="" borde="" de="" la="" pantalla="" y="" revertir="" la="" velocidad="" si="" es="" necesario="" if="" (e.xloc="" <="" 0="" ||="" e.xloc=""> width){
    e.xVel *= -1;
    }
    if (e.yLoc < 0 || e.yLoc > height){
    e.yVel *= -1;
    }
    }
    </ellipse.size();>

Comments are closed.