【问题标题】:Phaser 3: How to detect if there's a group member at locationPhaser 3:如何检测位置是否有组成员
【发布时间】:2019-05-22 05:59:33
【问题描述】:

好的,我在 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.getFirst (https://rexrainbow.github.io/phaser3-rex-notes/docs/site/group/),但它似乎改变了给定轨道的位置,而不仅仅是检测那里是否有轨道。

【问题讨论】:

  • 你能解释一下addSliederaddSliderTrack吗?
  • @nazimboudeffa 它们是 Phaser JS 库的非常标准的部分。将精灵添加到组中。它们传递 x 和 y 坐标并构建精灵的名称,即“horizo​​ntal_slider”或“vertical_slider”。
  • @nazimboudeffa 他们正在添加到静态组,是的。否则他们会从他们的位置上掉下来。
  • 很抱歉,我已经压制了我的最后一条评论,我可以弄清楚发生了什么,但我没有得到例如 var slider = sliders.create(x, y, data.direction + '_slider'); 我猜这是一个扩展 Phaser Sprite 类的类
  • nvm 我开始了解您所做的...您添加一个称为滑块的组,而不是根据data.direction 中给出的方向创建滑块

标签: phaser-framework


【解决方案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');
},

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2022-01-23
    相关资源
    最近更新 更多