gpt4 book ai didi

ruby - 如何检查 ruby​​ 中的 2 个范围是否以任何方式相交?

转载 作者:数据小太阳 更新时间:2023-10-29 06:49:38 25 4
gpt4 key购买 nike

我正在尝试用 ruby​​ 在 Gosu 中编写 hitboxes,并想检查 2 个范围是否满足(范围是坐标)我希望它简单地给出 true 或 false

我调查了一下,找到了 range.cover?代码,但是在测试后这表明它只检查一个范围是否完全适合另一个范围,而不检查它们是否仅部分连接。

#both sprites are arrays, with the following structure
#[image_data, sprite_x, sprite_y]
#image_data.width would return how wide the image is
#The x and y is the top left of the sprite
def hit_scan(sprite1, sprite2)
x_connect = (sprite1[1]..sprite1[1] + sprite1[0].width).cover?(sprite2[1]..(sprite2[1] + sprite2[0].width))
y_connect = (sprite1[2]..sprite1[2] + sprite1[0].height).cover?(sprite2[2]..(sprite2[2] + sprite2[0].height)
if x_connect == true
if y_connect == true
return true
else
return false
end
else
return false
end
end

这是我尝试过的,只有当整个 Sprite 都在另一个 Sprite 中时才返回 true。

我原以为每当 Sprite 接触时,它都会返回一个真语句,但只有当一个 Sprite 在另一个 Sprite 中时它才返回真。

最佳答案

您可以检查一个范围是否包括另一个范围的开始或结束:

r1 = (1..5)
r2 = (4..8)

r1.include?(r2.begin) || r1.include?(r2.end) || r2.include?(r1.begin) || r2.include?(r1.end)

在你的情况下:

r1 = (sprite1[1]..sprite1[1] + sprite1[0].width)
r2 = (sprite2[1]..sprite2[1] + sprite2[0].width)
r1.include?(sprite2[1]) || r1.include?(sprite2[1] + sprite2[0].width) ||
r2.include(sprite1[1]) || r2.include(sprite1[1] + sprite1[0].width)

假设范围不是无限的。

关于ruby - 如何检查 ruby​​ 中的 2 个范围是否以任何方式相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57717347/

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