203 votes

Pourquoi mes boules disparaissent ?

Pardon de la drôle de titre. J'ai créé un petit graphique de démonstration de 200 balles rebondissantes et d'entrer en collision, à la fois contre les murs et les uns des autres. Vous pouvez voir ce que j'ai actuellement ici: http://www.exeneva.com/html5/multipleBallsBouncingAndColliding/

Le problème est que chaque fois qu'ils entrent en collision les uns avec les autres, ils disparaissent. Je ne sais pas pourquoi. Quelqu'un peut jeter un oeil et m'aider?

Mise à JOUR: Apparemment, les boules tableau a les boules avec les coordonnées de NaN. Ci-dessous est le code où j'enfonce des boules de la matrice. Je ne suis pas entièrement sûr de la manière dont les coordonnées sont arriver NaN.

// Variables
var numBalls = 200;  // number of balls
var maxSize = 15;
var minSize = 5;
var maxSpeed = maxSize + 5;
var balls = new Array();
var tempBall;
var tempX;
var tempY;
var tempSpeed;
var tempAngle;
var tempRadius;
var tempRadians;
var tempVelocityX;
var tempVelocityY;

// Find spots to place each ball so none start on top of each other
for (var i = 0; i < numBalls; i += 1) {
  tempRadius = 5;
  var placeOK = false;
  while (!placeOK) {
    tempX = tempRadius * 3 + (Math.floor(Math.random() * theCanvas.width) - tempRadius * 3);
    tempY = tempRadius * 3 + (Math.floor(Math.random() * theCanvas.height) - tempRadius * 3);
    tempSpeed = 4;
    tempAngle = Math.floor(Math.random() * 360);
    tempRadians = tempAngle * Math.PI/180;
    tempVelocityX = Math.cos(tempRadians) * tempSpeed;
    tempVelocityY = Math.sin(tempRadians) * tempSpeed;

    tempBall = {
      x: tempX, 
      y: tempY, 
      nextX: tempX, 
      nextY: tempY, 
      radius: tempRadius, 
      speed: tempSpeed,
      angle: tempAngle,
      velocityX: tempVelocityX,
      velocityY: tempVelocityY,
      mass: tempRadius
    };
    placeOK = canStartHere(tempBall);
  }
  balls.push(tempBall);
}

97voto

Paulpro Points 54844

Votre erreur vient de cette ligne dans un premier temps:

var direction1 = Math.atan2(ball1.velocitY, ball1.velocityX);

Vous avez ball1.velocitY (ce qui est undefined) au lieu de ball1.velocityY. Donc, Math.atan2 vous NaN, et qu' NaN de la valeur est se propageant à travers tous vos calculs.

Ce n'est pas la source de votre erreur, mais il y a autre chose que vous pouvez changer sur ces quatre lignes:

ball1.nextX = (ball1.nextX += ball1.velocityX);
ball1.nextY = (ball1.nextY += ball1.velocityY);
ball2.nextX = (ball2.nextX += ball2.velocityX);
ball2.nextY = (ball2.nextY += ball2.velocityY);

Vous n'avez pas besoin des missions supplémentaires, et peut tout simplement utiliser l' += opérateur seul:

ball1.nextX += ball1.velocityX;
ball1.nextY += ball1.velocityY;
ball2.nextX += ball2.velocityX;
ball2.nextY += ball2.velocityY;

20voto

alfonso Points 8420

Il y a une erreur dans le `` fonction :

Il devrait être :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X