首页 > 解决方案 > Phaser 3:如何检测位置是否有组成员

问题描述

好的,我在 Phaser 上有一个小游戏,玩家可以上下移动滑块:

轨道上的滑块图像,而简笔画看起来

如您所见,滑块位于轨道上,人们会假设该轨道限制了滑块可以去的位置。目前,情况并非如此,滑块可以直接脱离轨道。

如何在移动滑块之前检测目标位置是否有滑块轨道?


这是我为滑块和滑块轨道创建静态组的地方。

    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/),但它似乎改变了给定轨道的位置,而不仅仅是检测那里是否有轨道.

标签: phaser-framework

解决方案


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

推荐阅读