Как ссылаться на случайно сгенерированные значения x и y, помещенные в массив

Как я могу ссылаться на случайно сгенерированные значения 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));
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
47
1

Ответы 1

Простое решение - вернуть 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`
}

Я думал, что это что-то простое. Спасибо за ваше время, я просто новичок, кодирую 2 недели, любая помощь всегда приветствуется.

Alex H 05.08.2018 13:43

Не волнуйтесь! Каждый должен с чего-то начинать. Однако обратите внимание на второй вариант. IMO это лучше, чем возвращать ax и ay из create.

FK82 05.08.2018 13:46

Я изменил то, что мне нужно было (вернул ax и ay), и использую в следующем коде, но код по-прежнему работает некорректно.

Alex H 05.08.2018 13:47

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};

Alex H 05.08.2018 13:48

Вы должны быть более конкретными. Вы получаете сообщение об ошибке? Если да, опубликуйте, пожалуйста.

FK82 05.08.2018 13:50

после возврата значений, согласно вашему первому совету, система по-прежнему считывает последние сгенерированные ax и ay. Второй вариант, который вы предложили добавить в цикл, который я сейчас перевариваю и над которым работаю. В моем цикле мне нужны ax и ay, которые случайны для каждого сгенерированного объекта. {this.bulletX = ax + 125-67 + 138 / 2-14, this.bulletY = ay-23 + 78 / 2-15}; На данный момент читаются только последние сгенерированные ax и ay.

Alex H 05.08.2018 14:01

Ну, да. Если вы хотите получить доступ к каждому сгенерированному значению ax и ay, вы должны сохранить их в соответствующей структуре данных (например, в Array). Обращаясь к переменным ax, ay даст вам только последнее присвоенное значение.

FK82 05.08.2018 14:08

Хе ФК. Я вычислил и получил позиции 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}

Alex H 05.08.2018 19:58

@AlexH Мне очень жаль, но я не совсем понимаю, что вы пытаетесь сделать. Можете ли вы обновить исходный вопрос и поместить туда код с объяснением и описанием проблемы, в которой вы застряли?

FK82 05.08.2018 21:07

Другие вопросы по теме