Как мне это исправить (raycaster в pygame)? [дубликат]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как мне это исправить (raycaster в pygame)? [дубликат]

Сообщение Anonymous »

Когда луч идеально параллелен стене, кажется, что он «проходит» сквозь нее.
Существует реализация, предотвращающая это (строка 78 -> строка 82), но в определенных сценариях, например, когда игрок спаунится (coords=(450, 468) и (450, 570)), это не предотвращает этого.
Я пытался добавить интервал для ошибки в операторе if, что не удалось.
Я пытался задать ChatGPT, но это не удалось.
Понятия не имею.
Код:
##############################################################################

import pygame
import math

#######################################

pygame.init()

X, Y = 800, 800
DISPLAY = pygame.display.set_mode((X, Y))
clock = pygame.time.Clock()
FPS = 60
pygame.display.set_caption("2D Ray Tracing")

white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)

##############################################################################

def renderPlayer(playerXY):
return pygame.draw.rect(DISPLAY, red, (playerXY[0]-10, playerXY[1]-10, 20, 20))

#######################################

def renderObjects(map, mapDimensions):
wallRects = []
for tile in range(len(map)):
if map[tile] == 1:
wallRects.append(pygame.draw.rect(DISPLAY, white, ((tile%mapDimensions[0])*X/mapDimensions[0], (tile//mapDimensions[1])*Y/mapDimensions[1], X/mapDimensions[0], Y/mapDimensions[1])))
return wallRects

#######################################

def checkCollisions(playerRect, playerXY, wallRects):
playerRect.center = playerXY
for rect in wallRects:
if playerRect.left < rect.right and playerRect.right > rect.left and playerRect.top < rect.bottom and playerRect.bottom > rect.top:
return True
return False

#######################################

def drawRays(playerXY, wallRects):
rayEnds = []
for rayNum in range(numOfRays):
rayAngle = math.radians((360/numOfRays)*rayNum)
rayDir = (math.cos(rayAngle), math.sin(rayAngle))
rayEnd = (playerXY[0]+rayDir[0]*X, playerXY[1]+rayDir[1]*Y)
closest = None
closestDist = float("inf")

# Get wallRects that are touching the ray
collidedRects = []
for rect in wallRects:
if rect.clipline(playerXY, rayEnd):
collidedRects.append(rect)

# Of the wallRects that are touching the ray, get the nearest to the player
for wall in collidedRects:
x1, y1 = wall.topleft
x2, y2 = wall.topright
x3, y3 = wall.bottomleft
x4, y4 = wall.bottomright

# Check for intersection with each wall side
wallSides = [
((x1, y1), (x2, y2)), # Top side
((x2, y2), (x4, y4)), # Right side
((x4, y4), (x3, y3)), # Bottom side
((x3, y3), (x1, y1)), # Left side
]

for (x1, y1), (x2, y2) in wallSides:
x3, y3 = playerXY
x4, y4 = rayEnd

denominator = ((x1-x2)*(y3-y4))-((y1-y2)*(x3-x4))
if denominator == 0: # No intersection if lines are parallel
continue

t = ((x1-x3)*(y3-y4)-(y1-y3)*(x3-x4))/denominator
u = -((x1-x2)*(y1-y3)-(y1-y2)*(x1-x3))/denominator

if 0

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-pygame
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как исправить эффект рыбьи на моем Python Raycaster?
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как исправить эффект рыбьи на моем Python Raycaster?
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • SVG рендеринг в приложении Pygame. До Pygame 2.0 Pygame не поддерживал SVG. Тогда как вы его загрузили?
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Деформация в рендерере raycaster, сделанном в Unity
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Raycaster не отображает текстуры по оси Y.
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»