Луч застрял под углом 0–90 градусов (поскольку raylengthx и raylengthy имеют только положительные значения), но при этом он не выровнен ни по каким границам ячеек.
Код: Выделить всё
cellStepSizeX = 1000000 if round(dx,10) == 0 else math.sqrt(1+ (dy/dx) * (dy/dx))
cellStepSizeY = 1000000 if round(dy, 10) == 0 else math.sqrt(1 + (dx/dy) * (dx/dy))
mapX = self.x // 32
mapY = self.y // 32
if dx < 0:
stepX = -1
rayLengthX = (self.x -mapX) * cellStepSizeX
else:
stepX = 1
rayLengthX = ((mapX +1) - self.x) * cellStepSizeX
if dy < 0:
stepY = -1
rayLengthY = (self.y - mapY)*cellStepSizeY
else:
stepY = 1
rayLengthY = ((mapY +1) - self.y) * cellStepSizeY
#collision = False
while distance < 200:
if rayLengthX < rayLengthY:
mapX += stepX
distance = rayLengthX
rayLengthX += cellStepSizeX
else:
mapY += stepY
distance = rayLengthY
rayLengthY += cellStepSizeY
[img2](https://i. sstatic.net/AJWTID48.png)
[img3](https://i.sstatic.net/5uqbZgHO.png)
[img4](https://i.sstatic.net/bLtx4xUr.png)
Вот несколько изображений, чтобы вы могли понять, о чем я говорю.Зеленая линия: движение луча/правильный угол луча
Синяя линия: луч алгоритма DDA из текущей позиции + длина луча
Красные линии: длины луча x и y разделены в соответствующих местах направления.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ligned-wit
Мобильная версия