Фаза 3: Как определить, есть ли в группе член группы - PullRequest
0 голосов
/ 21 мая 2019

Хорошо, у меня есть небольшая игра на Phaser с ползунком, который игрок может перемещать вверх или вниз:

image of slider on a track while a stick figure looks on

Как вы можете видеть, слайдер находится на дорожке, которая, как можно было бы предположить, ограничивает область его перемещения. На данный момент это не так, и ползунок может бежать прямо с рельса.

Как я могу определить, есть ли дорожка ползунка в целевом местоположении, прежде чем двигать ползунок?


Здесь я создаю статические группы для слайдера и дорожки слайдера.

    sliders = this.physics.add.staticGroup();
    slider_tracks = this.physics.add.staticGroup();

Вот где сами объекты добавляются в игру:

  add_slider: function (x, y, data) {
    map.add_slider_track(x, y, data);
    var slider = sliders.create(x, y, data.direction + '_slider');
    for (var key in data) {
      slider[key] = data[key];
    }
  },
  add_slider_track: function (x, y, data) {
    slider_tracks.create(x, y, data.direction + '_track');
  },

А вот функции, которые его перемещают:

  hitSlider: function (player, slider) {
    if (slider.direction == 'vertical') {
      if (player.body.onFloor() && player.slamming) {
        interaction.moveSliderDown(slider)
      } else if (player.body.onCeiling()) {
        interaction.moveSliderUp(slider);
      }
    }
    player.slamming = false;
  },
  moveSliderUp: function (slider) {
    slider.setY(slider.y - block_size);
    slider.body.position.y = (slider.y - (block_size / 2));
    player.setVelocityY(100);
  },
  moveSliderDown: function (slider) {
    slider.setY(slider.y + block_size);
    slider.body.position.y = (slider.y - (block_size / 2));
  }

Я пытался использовать slider_track.getFirst (https://rexrainbow.github.io/phaser3-rex-notes/docs/site/group/), но, похоже, он изменяет местоположение данного фрагмента трека, а не просто обнаруживает, есть ли там один.

1 Ответ

1 голос
/ 22 мая 2019

Просто чтобы не оставить этот вопрос без ответа, поскольку мы обычно запускаем чат, фактически я вижу в js/slider_actions.js решении, но я могу просто сказать, что вы можете использовать velocity, если серьезно, мой уровень кодирования, даже если яЯ давно в сообществе Phaser ниже твоего;)

sliderTrackRight: function (slider) {
  track = slider_tracks.children.entries.find(
    function (track) {
      return (
        track.body.y == slider.body.y &&
        track.body.x == (slider.body.x + block_size) &&
        track.direction == 'horizontal'
      )
    }
  );
  return (typeof track != 'undefined');
},
...