Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2018, 16:14   #1
nikytt
Форумчанин
 
Аватар для nikytt
 
Регистрация: 15.08.2015
Сообщений: 173
По умолчанию почему не работает код в цикле?

Если один обьект (Мяч) поставить выполнение его методов то работает или несколько только если в ручную каждый прописать

Ball1.draw();

//перемещение
Ball1.move();
//проверка столкновения
Ball2.checkCollision();

Ball2.draw();

//перемещение
Ball2.move();
//проверка столкновения
Ball2.checkCollision();

и т .д. а если много мячей через цикл не получается


[CODE]<script type="text/javascript">

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

//#1. Увеличение размеров «холста»

var width = canvas.width;
var height = canvas.height;


//Конструктор Ball

var Ball = function () {
this.x = 100;
this.y = 100;

this.xSpeed = Math.random()*5 - 5;
this.ySpeed = Math.random()*5 - 5;
};

//Рисуем мяч

var circle = function (x, y, radius, fillCircle) {

ctx.beginPath();
ctx.arc(x, y, radius, 0, Math.PI*2, false);

if (fillCircle) {
ctx.fill();
}else{
ctx.stroke();
}


};

//этот метод будет доступен всем обьектам созданным от Ball
Ball.prototype.draw = function () {


circle(this.x, this.y, 3, true);
};



//Перемещение мяча

Ball.prototype.move = function () {

this.x += this.xSpeed;
this.y += this.ySpeed;

};

//Отскоки мяча

Ball.prototype.checkCollision = function () {


if (this.x < 0 || this.x > width) {
this.xSpeed = - this.xSpeed;
}

if (this.y < 0 || this.y > height) {
this.ySpeed = - this.ySpeed;
}
}

//создаем мяч
var ball0 = new Ball();
var ball1 = new Ball();
var ball2 = new Ball();
var ball3 = new Ball();
var ball4 = new Ball();
var ball5 = new Ball();
var ball6 = new Ball();
var ball7 = new Ball();
var ball8 = new Ball();
var ball9 = new Ball();
var ball10 = new Ball();




//#3. Больше мячиков!

var arrayBall = [];

//заполнили масив arrayBall 10 мячами
for (var i = 0; i < 10; i++) {
//arrayBall.push('ball'+i);
arrayBall.push('Ball'+i);
}


проблема именно в

setInterval(
function () {

for (var i = 0; i < arrayBall.length; i++) {

//очиска холста
ctx.clearRect(0, 0, width, height);

//рисуем по новому в другом месте (координатах)
arrayBall[i].draw();

//перемещение
arrayBall[i].move();
//проверка столкновения
arrayBall[i].checkCollision();
arrayBall[i].move();
//проверка столкновения
arrayBall[i].checkCollision();
//рисуем обводку холста
ctx.strokeRect(0, 0, width, height);

if (i>=arrayBall.length) {
i=0;
}

}

}, 30);

что тут не правильно?
Москва форум- общение на любые темы!!

Последний раз редактировалось nikytt; 21.08.2018 в 16:29.
nikytt вне форума Ответить с цитированием
Старый 21.08.2018, 16:25   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Так добавляйте в массив объекты, а не строки.
p51x вне форума Ответить с цитированием
Старый 21.08.2018, 16:34   #3
nikytt
Форумчанин
 
Аватар для nikytt
 
Регистрация: 15.08.2015
Сообщений: 173
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Так добавляйте в массив объекты, а не строки.
спасибо а можно пример из моего кода?
Москва форум- общение на любые темы!!
nikytt вне форума Ответить с цитированием
Старый 21.08.2018, 16:35   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Ну пуште сразу нью бол в массив.
p51x вне форума Ответить с цитированием
Старый 21.08.2018, 16:37   #5
nikytt
Форумчанин
 
Аватар для nikytt
 
Регистрация: 15.08.2015
Сообщений: 173
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ну пуште сразу нью бол в массив.
пробовал но что то не вышло попробую еще.
Москва форум- общение на любые темы!!
nikytt вне форума Ответить с цитированием
Старый 21.08.2018, 16:38   #6
nikytt
Форумчанин
 
Аватар для nikytt
 
Регистрация: 15.08.2015
Сообщений: 173
По умолчанию

вот так

//#3. Больше мячиков!

var arrayBall = [];

//заполнили масив arrayBall 10 мячами
for (var i = 0; i < 10; i++) {

arrayBall.push('var ball' + i +' = new Ball()');
}

?
Москва форум- общение на любые темы!!
nikytt вне форума Ответить с цитированием
Старый 21.08.2018, 16:40   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Зачем вы строку пихаете? Зачем вам объявление переменной пихать? Какое выражение создает объект?
p51x вне форума Ответить с цитированием
Старый 21.08.2018, 16:42   #8
nikytt
Форумчанин
 
Аватар для nikytt
 
Регистрация: 15.08.2015
Сообщений: 173
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Зачем вы строку пихаете? Зачем вам объявление переменной пихать? Какое выражение создает объект?
new Ball()
Москва форум- общение на любые темы!!
nikytt вне форума Ответить с цитированием
Старый 21.08.2018, 16:43   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

И? Зачем вы чепуху пытаетесь в массив пихнуть, а не объекты?
p51x вне форума Ответить с цитированием
Старый 21.08.2018, 16:46   #10
nikytt
Форумчанин
 
Аватар для nikytt
 
Регистрация: 15.08.2015
Сообщений: 173
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
И? Зачем вы чепуху пытаетесь в массив пихнуть, а не объекты?
так а создать чтобы уникальный обьект ему же имя нужно
Москва форум- общение на любые темы!!
nikytt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает gets вообще, ни один код не работает с gets, почему? Мaкс Общие вопросы C/C++ 4 26.07.2018 11:49
Почему не работает код Deumath Общие вопросы по Java, Java SE, Kotlin 15 17.10.2017 21:36
почему не работает код? Бза JavaScript, Ajax 1 14.08.2016 13:57
Почему то не работает код Airon13rus HTML и CSS 27 02.12.2013 15:54
почему не работает код? Tolian92 Помощь студентам 1 21.05.2012 23:16