阶段3:如何检测位置是否有小组成员

时间:2019-05-21 11:46:56

标签: phaser-framework

好的,我在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.getFirsthttps://rexrainbow.github.io/phaser3-rex-notes/docs/site/group/),但这似乎改变了给定曲目的位置,而不仅仅是检测是否存在曲目。

1 个答案:

答案 0 :(得分:1)

在我们通常开始聊天时,只是不要让这个问题没有答案,实际上,我在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');
},