আমার বল গুলো অদৃশ্য হয়ে যাচ্ছে কেন? [বন্ধ]


202

মজার শিরোনাম ক্ষমা করুন। আমি 200 বলের বাউন্সিং এবং সংঘর্ষের একটি ছোট গ্রাফিক ডেমো তৈরি করেছি, উভয় দেয়াল এবং একে অপরের বিরুদ্ধে। আমার কাছে বর্তমানে যা আছে তা আপনি দেখতে পারেন: http://www.exeneva.com/html5/mલ્ટpleBallsBouncingAndCollider/

সমস্যাটি হ'ল যখনই তারা একে অপরের সাথে সংঘর্ষ হয়, তারা অদৃশ্য হয়ে যায়। আমি নিশ্চিত না কেন। কেউ কি একবার দেখে আমাকে সাহায্য করতে পারেন?

আপডেট: স্পষ্টতই বল অ্যারেগুলিতে 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);
}

119
এটি আমার ভোট পায়, কেবল বছরের সেরা প্রশ্নের শিরোনামের জন্য হলেও !!
অ্যালেক্স

উত্তর:


97

আপনার ত্রুটি প্রাথমিকভাবে এই লাইন থেকে আসে:

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

পরিবর্তে আপনার ball1.velocitY(যা হয় undefined) আছে ball1.velocityY। তাই Math.atan2আপনাকে দিচ্ছে NaN, এবং সেই NaNমানটি আপনার সমস্ত গণনার মাধ্যমে প্রচার করছে।

এটি আপনার ত্রুটির উত্স নয়, তবে অন্য কিছু আছে যা আপনি এই চারটি লাইনে পরিবর্তন করতে চাইতে পারেন:

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

আপনার অতিরিক্ত অ্যাসাইনমেন্টের দরকার নেই এবং +=কেবল অপারেটরটি একা ব্যবহার করতে পারেন :

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

20

collideBallsফাংশনে একটি ত্রুটি রয়েছে :

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

এটা করা উচিত:

var direction1 = Math.atan2(ball1.velocityY, ball1.velocityX);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.