Как я могу ссылаться на случайно сгенерированные значения X и Y, когда они помещаются в массив. В моем коде: числа ax и ay - это случайно сгенерированные значения, к которым я хочу обратиться на более позднем этапе и использовать в цикле. Я буду генерировать много объектов, и я хочу использовать каждый отдельный топор и каждый в расчетах. На данный момент система использует только первые сгенерированные или последние значения. Я немного новичок и ценю руководство.
function create() {
ax = Math.random() * width;
ay = Math.random() * height;
asteroids.push(new gameObject("asteroid", 0, 0, 0, 0, "asteroid11.png", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ax, ay, 250, 240, 0, 120, 1, 0, 0))
guns.push(new gameObject("g", 0, 0, 0, 0, "gun3.png", 0, 0, ax + 125 - 67, ay - 23, 138, 78, 0, 0, 72, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
bullets.push(new gameObject("b", ax + 125 - 67 + 138 / 2 - 14, ay - 23 + 78 / 2 - 15, 25, 25, "ball.png", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Простое решение - вернуть ax, ay из create:
function create() {
ax = Math.random() * width;
ay = Math.random() * height;
asteroids.push(new gameObject("asteroid", 0, 0, 0, 0, "asteroid11.png", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ax, ay, 250, 240, 0, 120, 1, 0, 0))
guns.push(new gameObject("g", 0, 0, 0, 0, "gun3.png", 0, 0, ax + 125 - 67, ay - 23, 138, 78, 0, 0, 72, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
bullets.push(new gameObject("b", ax + 125 - 67 + 138 / 2 - 14, ay - 23 + 78 / 2 - 15, 25, 25, "ball.png", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
return [ax, ay];
}
Хотя это не очень понятно. Лучшим способом было бы преобразовать генерацию случайной ширины и высоты в автономные функции:
const randomWidth = () => Math.random() * width;
const randomHeight = () => Math.random() * height;
const create = (ax, ay) => {
asteroids.push(new gameObject("asteroid", 0, 0, 0, 0, "asteroid11.png", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ax, ay, 250, 240, 0, 120, 1, 0, 0))
guns.push(new gameObject("g", 0, 0, 0, 0, "gun3.png", 0, 0, ax + 125 - 67, ay - 23, 138, 78, 0, 0, 72, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
bullets.push(new gameObject("b", ax + 125 - 67 + 138 / 2 - 14, ay - 23 + 78 / 2 - 15, 25, 25, "ball.png", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
};
// in your loop
for (/* ... */) {
const ax = randomWidth();
const ay = randomHeight():
create(ax, ay);
// do something with `ax` and `ay`
}
Не волнуйтесь! Каждый должен с чего-то начинать. Однако обратите внимание на второй вариант. IMO это лучше, чем возвращать ax и ay из create.
Я изменил то, что мне нужно было (вернул ax и ay), и использую в следующем коде, но код по-прежнему работает некорректно.
if (this.bulletX> космические корабли [i] .spaceshipX + 50 && this.bulletX <космические корабли [i] .spaceshipX + космические корабли [i] .spaceshipFrameWidth-50 && this.bulletY> космические корабли [i] .spaceshipY + 15 && this. bulletY <космические корабли [i] .spaceshipY + космические корабли [i] .spaceshipFrameHeight-25) {this.bulletX = ax + 125-67 + 138 / 2-14, this.bulletY = ay-23 + 78 / 2-15};
Вы должны быть более конкретными. Вы получаете сообщение об ошибке? Если да, опубликуйте, пожалуйста.
после возврата значений, согласно вашему первому совету, система по-прежнему считывает последние сгенерированные ax и ay. Второй вариант, который вы предложили добавить в цикл, который я сейчас перевариваю и над которым работаю. В моем цикле мне нужны ax и ay, которые случайны для каждого сгенерированного объекта. {this.bulletX = ax + 125-67 + 138 / 2-14, this.bulletY = ay-23 + 78 / 2-15}; На данный момент читаются только последние сгенерированные ax и ay.
Ну, да. Если вы хотите получить доступ к каждому сгенерированному значению ax и ay, вы должны сохранить их в соответствующей структуре данных (например, в Array). Обращаясь к переменным ax, ay даст вам только последнее присвоенное значение.
Хе ФК. Я вычислил и получил позиции X и Y (ax и ay в коде) в массив с [0] для ax, [1] для ay и т. д. Позиций. Мой вопрос - как, где и что я должен позиционировать вместо топора и ау в приведенном ниже коде. Спасибо за ваше постоянное руководство. if (this.bulletX> космические корабли [i] .spaceshipX + 50 && this.bulletX <космические корабли [i] .spaceshipX + космические корабли [i] .spaceshipFrameWidth-50 && this.bulletY> космические корабли [i] .spaceshipY + 15 && this. bulletY <космические корабли [i] .spaceshipY + космические корабли [i] .spaceshipFrameHeight-25) {this.bulletX = ax + 125-67 + 138 / 2-14, this.bulletY = ay-23 + 78 / 2-15}
@AlexH Мне очень жаль, но я не совсем понимаю, что вы пытаетесь сделать. Можете ли вы обновить исходный вопрос и поместить туда код с объяснением и описанием проблемы, в которой вы застряли?
Я думал, что это что-то простое. Спасибо за ваше время, я просто новичок, кодирую 2 недели, любая помощь всегда приветствуется.