Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

152
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!