Я начинал учить себя, как работать с HTML5 Canvas, и решил научиться делать короткую игру / демонстрацию.
Я хотел, чтобы простые блоки отскакивали от экрана, отскакивали от стен,и отскакивать друг от друга.
Я застрял на том, чтобы заставить их отскакивать друг от друга.Кажется, что код, который заставляет его отскочить, заставляет его отскочить сразу после.Я вижу, где происходит сбой кода, но я не знаю, как это исправить :( Кто-нибудь может помочь?
(Дополнительный вопрос: я знаю, что я не работаю настолько чисто, эффективно / профессионально, насколько это возможно в этом примерено если бы я хотел улучшить с помощью обратной связи и мнений о «лучшем» методе для этого типа примера, такого как обзор кода или что-то, можно ли задать вопрос о stackoverflow?)
jsfiddle: http://jsfiddle.net/vdcSv/
HTML:
<canvas id="canvas" Width="400" Height="300"></canvas>
Javscript:
function CheckBallCollision(BallsArray, index) {
for (var i = 0; i < BallsArray.length; i++) {
if (index != i) {
if (BallsArray[index].Xdir == 1) {
if ((BallsArray[index].Xmax >= BallsArray[i].Xmin)) {
if ((BallsArray[index].Ymin <= BallsArray[i].Ymin) && (BallsArray[index].Ymax >= BallsArray[i].Ymin) ||
((BallsArray[index].Ymax >= BallsArray[i].Ymax) && (BallsArray[index].Ymin <= BallsArray[i].Ymax))) {
BallsArray[index].Xdir = -BallsArray[index].Xdir;
}
}
} else if (BallsArray[index].Xdir == -1) {
if ((BallsArray[index].Xmin <= BallsArray[i].Xmax)) {
if ((BallsArray[index].Ymin <= BallsArray[i].Ymin) && (BallsArray[index].Ymax >= BallsArray[i].Ymin) ||
((BallsArray[index].Ymax >= BallsArray[i].Ymax) && (BallsArray[index].Ymin <= BallsArray[i].Ymax))) {
BallsArray[index].Xdir = -BallsArray[index].Xdir;
}
}
}
}
}
}
Объект Ball:
function Ball() {
this.Xmin = 0;//top left X coord
this.Ymin = 0;//top left y coord
this.Height = 25;
this.Width = 25;
this.Xmax = this.Xmin + this.Width;
this.Ymax = this.Ymin + this.Height;
this.Xdir = 0; // 0 not moving, 1 moving right, -1 moving left
this.Ydir = 0;
this.Red = 0;
this.Green = 0;
this.Blue = 200;
this.Opacity = 1;
this.Speed = 1;
}