SOLVED - Этот пример кода работал, поэтому я сравнил его с неработающим мной и обнаружил несоответствие.Javascript Array Scope Issue
В моем коде, который не работал, при объявлении массива цветов я забыл добавить перед ним «var».
m_color = [];
m_color[0] = 255;
m_color[1] = 255;
m_color[2] = 255;
m_color[3] = 255;
вместо:
var m_color = [];
m_color[0] = 255;
m_color[1] = 255;
m_color[2] = 255;
m_color[3] = 255;
Вот и все. Ошибка не была создана, и я предполагаю, что она создала ее как глобальный массив, общий для всех частиц.
Спасибо за ответы всем. Я буду использовать их для написания лучшего кода javascript.
Старый вопрос (который уже не актуально) ниже:
У меня есть этот сумасшедший вопрос с областью JavaScript массивами.
У меня есть класс частиц:
function ParticleClass()
{
var m_color = [];
m_color[0] = 255;
m_color[1] = 255;
m_color[2] = 255;
m_color[3] = 255;
var m_red = 255;
var m_green = 255;
var m_blue = 255;
this.SetRandomColorRGB = SetRandomColorRGB;
this.SetRandomColorArray = SetRandomColorArray;
this.DrawParticleRGB = DrawParticleRGB;
this.DrawParticleArray = DrawParticleArray;
function SetRandomColorRGB()
{
m_red = Math.floor(Math.random() * 255);
m_green = Math.floor(Math.random() * 255);
m_blue = Math.floor(Math.random() * 255);
}
function SetRandomColorArray()
{
m_color[0] = Math.floor(Math.random() * 255);
m_color[1] = Math.floor(Math.random() * 255);
m_color[2] = Math.floor(Math.random() * 255);
}
function DrawParticleRGB(ctx)
{
// I draw the particle using m_red, m_green and m_blue.
}
function DrawParticleArray(ctx)
{
// I draw the particle using m_color[0], m_color[1], m_color[2]
}
}
Я затем создать массив частиц ParticleClass и рисовать их.
Если я создаю кучу частиц и пытаюсь нарисовать их на экране, SetRandomColorRGB и DrawParticleRGB отлично работают. Каждая частица имеет другой цвет.
Если я использую SetRandomColorArray и DrawParticleArray, все частицы имеют один и тот же цвет. Каждый раз, когда создается новая частица, все частицы меняются на последний цвет SetRandomColorArray.
Мне кажется, что массивы делят память, а другие переменные - нет. Это правда? Это причуда Javascript? Что-то еще происходит?
Спасибо.
Этого не должно быть, и я уверен, что этого не происходит. Каждая частица должна иметь другой массив. Предоставляете ли вы рабочую демонстрацию своего кода на http://jsfiddle.net/, чтобы мы могли точно знать, что происходит не так? –
Уверены, что это не ошибка? 'this.DrawParticleRGB = DrawParticleRGB;' не должно быть 'this.DrawParticleRGB = DrawParticleWithRGB;' – PSL
'SetRandomColorRGB()' и 'SetRandomColorArray()' выполняет то же самое, за вычетом местоположения назначения. Лично я бы добавил 'this.m_red' и т. Д. Внутри функций, но это выбор стиля. Ваша проблема должна быть внутри ваших функций рисования, если у вас нет ошибок в вашем коде (используйте какой-то отладчик, чтобы поймать любые предупреждения или ошибки). – BLaZuRE