【发布时间】: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/),但它似乎改变了给定轨道的位置,而不仅仅是检测那里是否有轨道。
【问题讨论】:
-
你能解释一下
addSlieder和addSliderTrack吗? -
@nazimboudeffa 它们是 Phaser JS 库的非常标准的部分。将精灵添加到组中。它们传递 x 和 y 坐标并构建精灵的名称,即“horizontal_slider”或“vertical_slider”。
-
@nazimboudeffa 他们正在添加到静态组,是的。否则他们会从他们的位置上掉下来。
-
很抱歉,我已经压制了我的最后一条评论,我可以弄清楚发生了什么,但我没有得到例如
var slider = sliders.create(x, y, data.direction + '_slider');我猜这是一个扩展 Phaser Sprite 类的类 -
nvm 我开始了解您所做的...您添加一个称为滑块的组,而不是根据
data.direction中给出的方向创建滑块
标签: phaser-framework