gpt4 book ai didi

javascript - 将碰撞检测(和其他处理器密集型循环)卸载到 JavaScript 中的 WebWorker?

转载 作者:行者123 更新时间:2023-11-30 06:35:06 24 4
gpt4 key购买 nike

我最近一直在研究网络 worker ,我设法使用以下技术将 A* 路径查找卸载到工作线程......

  1. 当对象向工作人员发送消息时,将对象的引用推送到数组
  2. 当工作人员回复时,从数组中移出下一项

我的游戏具有生物对环境中的噪音使用react的功能。理想情况下,我想要实现的是...

  1. 游戏中的某些东西会发出一定半径的噪音
  2. 将噪音来源和生物列表传递给网络 worker
  3. 网络 worker 用噪声范围内的生物列表进行响应

显然存在问题,因为我无法将对象数组传递给工作人员,而且我正在努力想办法解决这个问题。

更新的问题:我如何(有效地)告诉主线程生物 X 和生物 Y 听到了声音?

有什么建议吗?


您能否举例说明您尝试向 web worker 发布的内容,例如在卸载之前控制台记录它

像这样的……

var iNoiseRadius = 100;
var aCreatures = [
{id: 1, x: 0, y: 0},
{id: 2, x: 200, y: 0},
{id: 3, x: 100, y: 100},
{id: 4, x: 50, y: 400},
{id: 5, x: 100, y: 0}
];

....

oWorker.postMessage({
type: 'noise',
originator: aCreatures[2],
radius: iNoiseRadius,
creatures: aCreatures
});

生物数组可能会在发布消息和接收响应之间的时间内发生变化,因此数组索引无用。

最佳答案

您想告诉主线程生物 X 和 Y 尽可能有效地听到声音。

合乎逻辑的答案是返回半径内的生物 ID 列表。这样您就必须在主线程中再次遍历列表。

您还可以使用工作人员的 postMessage 发布发现半径内每个生物的 ID。伪代码:

// In the WebWorker
forEach(creature in creatures) {
if (creature is within radius distance of originator) {
postMessage(creature.id);
}
}

// In the Main Thread
noiseDetectionWorker.addEventListener('message', function(event) {
notificyCreatureOfNoise(event.data);
});

关于javascript - 将碰撞检测(和其他处理器密集型循环)卸载到 JavaScript 中的 WebWorker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15117880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com