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

1

Как я могу обращаться к случайным образом генерируемым значениям X и Y, когда они вставляются в массив. В моем коде: ax и ay номера - это случайным образом генерируемые значения, на которые я хочу ссылаться на более позднем этапе, и использовать их в цикле. Я буду генерировать много объектов, и я хочу использовать каждый отдельный топор и 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));
}
Теги:
arrays
constructor

1 ответ

0

Легкое решение - вернуть 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'
}
  • 0
    Я думал, что это было что-то простое. Спасибо за потраченное время, я просто нуб, программирую уже 2 недели, любая помощь всегда ценится.
  • 0
    Не волнуйтесь! Каждый должен начать где-нибудь. Взгляните на второй вариант, хотя. ИМО это лучше, чем возвращать ax и ay от create .
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню