Դուք խնդիր ունեիք ձեր շարահյուսության հետ
vX ոչ vx. vY ոչ vy.
Բացի այդ, ձեզ անհրաժեշտ էր ֆունկցիա, որը պետք է զանգահարեք՝ ցուցադրելու համար: Տեղադրեք ձեր վերջնական արդյունքները jsdo.it կայքում (երբ ավարտեք ֆիզիկան): Իրոք հիանալի տեսք ունի:
window.onload=App
function App() {
var pool = document.getElementById('pool');
var canvas = pool.getContext('2d');
var cwidth = pool.width = window.innerWidth;
var cheight = pool.height = window.innerHeight;
var ctop = pool.offsetTop;
var cleft = pool.offsetLeft;
var size = [5, 10, 15, 20, 25, 30];
var numBalls = 100;
// CREATES THE BALL
function Ball(x, y, vx, vy, r, s) {
this.color = rgb();
this.x = x;
this.y = y;
this.vX = vx;
this.vY = vy;
this.r = r;
this.size = s;
}
// GIVES EACH BALL A RANDOM COLOR
function rgb() {
var color = 'rgb(';
for (var i = 0; i < 3; i++) {
color += Math.floor(Math.random() * 255) + ',';
}
return color.replace(/\,$/, ')');
}
var Balls = [],
x, y, vx, vy, r, s;
for (var i = 0; i < numBalls; i++) {
x = Math.random() * cwidth >> 0;
y = Math.random() * cheight >> 0;
vx = Math.random() * 20 - 6;
vy = Math.random() * 20 - 6;
r = Math.random() * 15 + 30;
s = size[~~(Math.random() * size.length >> 0)];
// CREATES THE BALLS
Balls.push(new Ball(x, y, vx, vy, r, s));
}
function render(){
// DRAWS THE CANVAS AND BALLS
// ՖԻԶԻԿԱ Balls.map(function(item){ // BALLS SHOULD BOUNCE OFF CANVAS EDGE
item.vX *= 0.99; item.vY *= 0.99;
item.x += item.vX;
item.y += item.vY;
if (item.x < item.r ){
item.vX *= -.99;
item.x += item.vX;
}
if(item.x > pool.width - item.r) {
item.vX *= -.99;
item.x += item.vX;
}
if (item.y < item.r ){
item.vY *= -.99;
item.y += item.vY;
}
if( item.y > pool.height - item.r) {
item.vY *= -1;
item.y += item.vY;
}
}) // END PHYSICS canvas.clearRect(0, 0, canvas.canvas.width, canvas.canvas.height);
for (var i in Balls) {
var b = Balls[i];
var grad = canvas.createRadialGradient(b.x + b.r / 4 , b.y - b.r / 4 , b.r / 5 , b.x, b.y, b.r);
grad.addColorStop(0, '#fff');
grad.addColorStop(.85, b.color);
grad.addColorStop(1, '#222');
canvas.beginPath();
canvas.fillStyle = grad;
canvas.arc(b.x, b.y, b.r, 0, Math.PI * 2, 0);
canvas.fill();
}
}
// END FOR
// MOUSE MOVEMENT - BALLS SHOULD MOVE AWAY FROM MOUSE CURSOR
pool.onmousemove = function(e) {
x = e.pageX - this.offsetLeft;
y = e.pageY - this.offsetTop;
for (i = 0; i < numBalls; i++) {
if (Math.abs(x - Balls[i].x) < 20 && Math.abs(y - Balls[i].y) < 20 ) {
Balls[i].vX = (x - Balls[i].x) ;
Balls[i].vY = (y - Balls[i].y) ;
}
}
};
setInterval(render,50);
// END APP
};
05.04.2011