validar validacion pagina net funcion formularios formulario enviar ejemplos ejecutar desde con cargar carga asp asincrona antes javascript canvas geometry physics collision

validacion - validar formulario javascript antes de enviar



¿Por qué están desapareciendo mis bolas? (2)

Hay un error en la función collideBalls :

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

Debería ser:

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

Perdona el título gracioso. He creado una pequeña demostración gráfica de 200 bolas que rebotan y chocan, tanto contra las paredes como entre sí. Puedes ver lo que tengo actualmente aquí: http://www.exeneva.com/html5/multipleBallsBouncingAndColliding/

El problema es que cada vez que chocan entre sí, desaparecen. No estoy seguro de por qué. ¿Puede alguien echar un vistazo y ayudarme?

ACTUALIZACIÓN: Al parecer, la matriz de bolas tiene bolas con coordenadas de NaN. A continuación se muestra el código donde empujar bolas a la matriz. No estoy completamente seguro de cómo las coordenadas están obteniendo 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); }


Su error viene de esta línea inicialmente:

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

Tienes ball1.velocitY (que undefined está undefined ) en lugar de ball1.velocityY . Entonces Math.atan2 está dando NaN , y ese valor NaN está propagando a través de todos sus cálculos.

Esta no es la fuente de su error, pero hay algo más que puede cambiar en estas cuatro líneas:

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

No necesita las asignaciones adicionales, y solo puede usar el operador += solo:

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