我的静态组中有多个物体,当我的玩家击中其中一个物体时,需要知道我正在与哪一个物体发生碰撞.我的代码看起来像这样:

//Create Function
  signs = this.physics.add.staticGroup()

  sign1 = signs.create(0, -100, "sign1")
  sign1.name = "sign1";
  sign1Info = this.add.image(0, -100, "sign1").setScale(4);
  sign1Info.visible = false;

  sign2 = signs.create(100, -100, "sign2")
  sign2.name = "sign2";
  sign2Info = this.add.image(100, -100, "sign2").setScale(4);
  sign2Info.visible = false;

  this.physics.add.collider(player, signs){
    signName = sign.name; //The info I need to get out
  });

我try 过这个:

this.physics.add.collider(player, signs, function (sign){
    signName = sign.name;
 });

但当我将sign.name打印到控制台时,它是"空字符串"

如何找到玩家正在碰撞的特定物体?

推荐答案

documentation对这个话题不是很具体.它只是指出

一个可选的回调函数,如果对象发生冲突,就会调用该函数

阅读源代码here,看起来两个碰撞的对象都作为参数传递,第一个对象,在您的情况下,是玩家.这可能就是您得到空字符串的原因,因为您的玩家没有名称.

根据您的代码,该名称将出现在回调函数的第二个参数中,如下所示:

// note the added parameter to the function declaration
this.physics.add.collider(player, signs, function (player, sign){
    signName = sign.name;
    // console.log(sign.name) should show the name of the sign as expected
});

我无法复制您的场景,因为我没有完整的代码来try 它,但它应该有效.如果你仍然不知道名字,请做console.log(sign).它应该引用您期望的对象,但属性name可能不直接在对象上,而是在一个子属性上.让我知道

Javascript相关问答推荐

如何将元素排列得彼此靠近?

当没有固定间隔时,是否可以在d3.js中进行画笔捕捉?

设置默认值后动态更新japbox或调色板

reaction如何在不使用符号的情况下允许多行返回?

创建私有JS出口

如何保持子画布元素的1:1宽高比?

为什么我达到了时间限制!?LeetCode链接列表循环(已解决,但需要解释!)

如何通过onClick为一组按钮分配功能;

React:未调用useState变量在调试器的事件处理程序中不可用

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

从mat—country—select获取整个Country数组

我不知道为什么setwritten包装promise 不能像我预期的那样工作

MongoDB中的引用

如何将Cookie从服务器发送到用户浏览器

如何在输入元素中附加一个属性为checkbox?

使用Promise.All并发解决时,每个promise 的线性时间增加?

使用插件构建包含chart.js提供程序的Angular 库?

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

无法避免UV:flat的插值:非法使用保留字"

JavaScript&;Reaction-如何避免在不使用字典/对象的情况下出现地狱?