Есть ли способ позволить игроку скользить по стенам?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ позволить игроку скользить по стенам?

Сообщение Anonymous »

Есть ли способ позволить игроку скользить по стенам? Для этого мне нужен игрок, чтобы скользить по стенам (чтобы обеспечить более быстрый и легкий игровой процесс), но я понятия не имею, как это сделать. Я попытался сделать некоторые решения, но все они все еще «застряли» на стены. < /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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как позволить игроку не перемещаться через другой объект (2d)?
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как позволить игроку не перемещаться через другой объект (2d)?
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как я мог заставить игрока прилипать к стенам?
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Заставить фоновый цвет красиво «скользить» между ячейками таблицы с помощью чистого CSS?
    Anonymous » » в форуме CSS
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Заставить фоновый цвет красиво «скользить» между ячейками таблицы с помощью чистого CSS?
    Anonymous » » в форуме CSS
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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