Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

165
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda