Есть ли способ позволить игроку скользить по стенам? Для этого мне нужен игрок, чтобы скользить по стенам (чтобы обеспечить более быстрый и легкий игровой процесс), но я понятия не имею, как это сделать. Я попытался сделать некоторые решения, но все они все еще «застряли» на стены. < /P>
Есть ли способ сделать это?##############################################################################
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 First Person Shooter")
white = (255, 255, 255)
black = (0, 0, 0)
grey = (128, 128, 128)
red = (255, 0, 0)
##############################################################################
def renderPlayer(playerXY, gunImg, mouseXY):
playerRect = pygame.draw.circle(DISPLAY, white, playerXY, 10)
dx, dy = mouseXY[0]-playerRect.centerx, mouseXY[1]-playerRect.centery
angle = math.degrees(math.atan2(-dy, dx))-90
rotatedImg = pygame.transform.rotate(gunImg, angle)
rotatedImgRect = rotatedImg.get_rect(center=playerRect.center)
DISPLAY.blit(rotatedImg, rotatedImgRect.topleft)
return playerRect
#######################################
def renderObjects(map, mapDimensions):
wallRects = []
for tile in range(len(map)):
if map[tile] == 1:
wallRects.append(pygame.Rect((tile%mapDimensions[0])*X/mapDimensions[0], (tile//mapDimensions[1])*Y/mapDimensions[1], X/mapDimensions[0], Y/mapDimensions[1]))
return wallRects
#######################################
def checkCollisions(playerRect, nextPlayerXY, wallRects):
tempRect = playerRect.copy()
tempRect.center = nextPlayerXY
for rect in wallRects:
if tempRect.colliderect(rect):
return True
return False
#######################################
def DDA(targetX, targetY):
targetX /= cellSize
targetY /= cellSize
rayStartX, rayStartY = (playerXY[0]/cellSize), (playerXY[1]/cellSize)
rayDirX = (targetX-(playerXY[0]/cellSize))
rayDirY = (targetY-(playerXY[1]/cellSize))
rayDirLen = math.sqrt((rayDirX**2)+(rayDirY**2))
if rayDirLen != 0:
rayDirX /= rayDirLen
rayDirY /= rayDirLen
rayUnitStepX = math.sqrt(1+(rayDirY/rayDirX)**2) if rayDirX != 0 else float('inf')
rayUnitStepY = math.sqrt(1+(rayDirX/rayDirY)**2) if rayDirY != 0 else float('inf')
mapCheckX, mapCheckY = int(rayStartX), int(rayStartY)
rayLengthX, rayLengthY = 0, 0
stepX, stepY = 0, 0
if rayDirX < 0:
stepX = -1
rayLengthX = (rayStartX-mapCheckX)*rayUnitStepX
else:
stepX = 1
rayLengthX = (mapCheckX+1-rayStartX)*rayUnitStepX
if rayDirY < 0:
stepY = -1
rayLengthY = (rayStartY-mapCheckY)*rayUnitStepY
else:
stepY = 1
rayLengthY = (mapCheckY+1-rayStartY)*rayUnitStepY
tileFound = False
maxDistance = 100
distance = 0
while not tileFound and distance < maxDistance:
if rayLengthX < rayLengthY:
mapCheckX += stepX
distance = rayLengthX
rayLengthX += rayUnitStepX
else:
mapCheckY += stepY
distance = rayLengthY
rayLengthY += rayUnitStepY
if 0
Подробнее здесь: https://stackoverflow.com/questions/795 ... -the-walls
Есть ли способ позволить игроку скользить по стенам? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Заставить фоновый цвет красиво «скользить» между ячейками таблицы с помощью чистого CSS?
Anonymous » » в форуме CSS - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Заставить фоновый цвет красиво «скользить» между ячейками таблицы с помощью чистого CSS?
Anonymous » » в форуме CSS - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-