Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

96
Vistas
Cómo hacer que un Objeto en una clase se mueva físicamente usando JS y p5.js

Hasta ahora, he creado una clase que genera un círculo. Estoy tratando de hacer que este círculo se mueva/vibre constantemente, pero no estoy seguro de cuál es la mejor manera de agregar una función de movimiento con OOP. Además, cuando creo el objeto 'cara' en la función de dibujo, mi página falla.

 function setup() { createCanvas(350, 350, WEBGL); background('white') let face = new Face(); } class Face { constructor() { this.basicFace(100, random(10,30),0,0); } basicFace(radius, steps, centerX, centerY) { var xValues = []; var yValues = []; for (var i = 0; i < steps; i++) { let rad = radius + random(-radius / 50, radius / 50) xValues[i] = (centerX + rad * cos(2 * PI * i / steps)); yValues[i] = (centerY + rad * sin(2 * PI * i / steps)); } beginShape(); strokeWeight(4) for (let i = 0; i < xValues.length; i++) { curveVertex(xValues[i], yValues[i]); } endShape(CLOSE); } }
 <script src="https://cdn.jsdelivr.net/npm/p5@1.4.0/lib/p5.js"></script>

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En primer lugar, una de las razones por las que la creación de nuevas instancias de Face en su función draw() podría hacer que la página se bloquee sería porque la función draw() se ejecuta muchas veces por segundo, y en JavaScript, una gran cantidad de asignaciones (como la creación de nuevas instancias de una clase) puede ser malo para el rendimiento. Sin embargo, simplemente asignar una instancia de clase por llamada a draw() normalmente no causaría ningún problema. Si está agregando esas instancias a una estructura de datos como una matriz, por otro lado, eso podría hacer que su página use una cantidad excesiva de memoria y eventualmente se cuelgue. Sin ver el código exacto que está causando el bloqueo, es difícil saberlo.

Si desea implementar el boceto anterior de una manera orientada a objetos, debe seguir los siguientes pasos:

  1. Proporcione a su clase algunos parámetros de constructor que definan sus propiedades, como la ubicación y el tamaño, y guárdelos como campos de instancia.
  2. Separe los comportamientos de su clase del constructor (es decir, dele un método que haga que se muestre).
  3. Crea una instancia una vez y luego llama a ese método de instancia en draw() para que se muestre en cada cuadro.

 let face; function setup() { createCanvas(350, 350, WEBGL); face = new Face(100, random(10, 30), 0, 0); } function draw() { background('white'); face.show(); } class Face { constructor(radius, steps, centerX, centerY) { this.radius = radius; this.steps = steps; this.centerX = centerX; this.centerY = centerY; } show() { var xValues = []; var yValues = []; for (var i = 0; i < this.steps; i++) { let rad = this.radius + random(-this.radius / 50, this.radius / 50) xValues[i] = (this.centerX + rad * cos(2 * PI * i / this.steps)); yValues[i] = (this.centerY + rad * sin(2 * PI * i / this.steps)); } strokeWeight(4); beginShape(); for (let i = 0; i < xValues.length; i++) { curveVertex(xValues[i], yValues[i]); } endShape(CLOSE); } }
 <script src="https://cdn.jsdelivr.net/npm/p5@1.4.0/lib/p5.js"></script>

Además, cuando está mostrando su curva, no es necesario crear matrices para los valores x e y en un ciclo y luego llamar a curveVertex() en un ciclo separado. En su lugar, puede combinar estos bucles y evitar asignaciones de matrices innecesarias.

 show() { strokeWeight(4); beginShape(); for (let i = 0; i < this.steps; i++) { let rad = this.radius + random(-this.radius / 50, this.radius / 50); curveVertex( this.centerX + rad * cos(2 * PI * i / this.steps), this.centerY + rad * sin(2 * PI * i / this.steps) ); } endShape(CLOSE); }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda