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

166
Vistas
Principiante aquí. El código no está obedeciendo. Creo que el problema tiene algo que ver con acceder a una variable que está dentro de una clase.

Así que estoy aprendiendo sobre cómo usar las clases y he hecho este código (¡tiene exactamente 100 líneas!) usando P5.JS, que se supone que dibuja tres rectángulos y tres círculos. Uno de los círculos se puede mover con las teclas de flecha, y los otros dos lo siguen. Aquí está la parte que no funciona: cuando los círculos de los seguidores se mueven sobre los cuadrados, se supone que deben reducir la velocidad a medida que se mueven sobre ellos. He intentado todo.

 function setup() { createCanvas(windowWidth, windowHeight); noStroke(); character1 = new character(250, 200, 30, 4); follower1 = new enemy(100, 20, 30, 2); follower2 = new enemy(200, 20, 30, 2); obstacle1 = new obstacle(200, 200, 100, 50, follower1.x, follower1.y, follower1.s); obstacle2 = new obstacle(300, 300, 50, 25, follower1.x, follower1.y, follower1.s); obstacle3 = new obstacle(200, 400, 25, 50, follower1.x, follower1.y, follower1.s); } function draw() { background(0); character1.drawCharacter(); follower1.drawEnemy(); follower2.drawEnemy(); obstacle2.drawObstacle(); obstacle1.drawObstacle(); obstacle3.drawObstacle(); } class character { constructor(x, y, d, s) { this.x = x; this.y = y; this.d = d; this.s = s; } drawCharacter() { fill(255); ellipse(character1.x, character1.y, character1.d); if (keyIsDown(UP_ARROW)) { character1.y -= character1.s; } if (keyIsDown(DOWN_ARROW)) { character1.y += character1.s; } if (keyIsDown(LEFT_ARROW)) { character1.x -= character1.s; } if (keyIsDown(RIGHT_ARROW)) { character1.x += character1.s; } } } class enemy { constructor(x, y, d, s) { this.x = x; this.y = y; this.d = d; this.s = s; } drawEnemy() { fill(255, 0, 0); ellipse(this.x, this.y, this.d); if (this.x < character1.x - this.d) { this.x += this.s; } if (this.x > character1.x + this.d) { this.x -= this.s; } if (this.y < character1.y - this.d) { this.y += this.s; } if (this.y > character1.y + this.d) { this.y -= this.s; } } } class obstacle { constructor(x, y, w, h, enemyX, enemyY, enemyS) { this.x = x; this.y = y; this.w = w; this.h = h; enemyX = enemyX; enemyY = enemyY; enemyS = enemyS; } drawObstacle(enemyX, enemyY, enemyS) { fill(255); rectMode(CENTER); rect(this.x, this.y, this.w, this.h); if ( this.x - this.w / 2 - 10 < enemyX && this.x + this.w / 2 + 10 > enemyX && this.y - this.h / 2 - 10 < enemyY && this.y + this.h / 2 + 10 > enemyY ) { enemyS = 0.5; } else { enemyS = 2.5; } } }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Intenta tener solo un obstáculo. Aquí está mi conjetura:

draw llama a obstacle.drawObstacle tres veces, y si un enemigo debe ser ralentizado por obstacle1 u obstacle2 , no importa porque enemy.s se restablecerá por obstacle3.drawObstacle

Recomiendo encarecidamente que cada uno de tus personajes y clases enemigas tenga un método de draw y move , y ponga todo sobre cómo se mueven los enemigos dentro de la clase enemiga. Tal vez la clase de obstáculo debería tener un draw y tal vez un método isCollidingWith que el enemy.move llamaría.

Mantener toda su lógica para una clase dentro de la clase significa que puede hacer variantes mucho más fácilmente. Por ejemplo, tal vez más adelante quieras tener un enemigo que sea mucho más lento pero que no se vea obstaculizado por ningún obstáculo. Tener toda la lógica dentro de la clase lo hace fácil. Poner la lógica dentro de la clase de obstáculos se convertiría rápidamente en una pesadilla si tienes suficientes tipos diferentes de enemigos.

Además, puede tener un objeto de game que contenga todo sobre el juego, incluidas las propiedades de los character , los enemies y obstacles , y los métodos de draw y move que llamen a los métodos respectivos sobre los objetos de personajes, enemigos y obstáculos, y un método de destroy o quit que borre su propiedades y tal. (En algunos idiomas, esto es importante, porque si agregara una propiedad de game a cada pieza del juego, tendrían identificadores entre sí y, dado que (en algunos idiomas), la recolección de basura solo cosecha objetos que no tienen referencias a ellos , ocuparán la memoria mucho más tiempo del que desea).

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