pygame raycasting

在这里插入图片描述

for x in range(140):
        dis=0
        while True:
            angle= 0 - 30 + (x / width) * 60
            dis=dis+0.1
            #self.x = dis + math.cos(math.radians(self.xuanzhuanjiao)) * 90
            #self.y = dis - math.sin(math.radians(self.xuanzhuanjiao)) * 90
            zx=px+math.cos(math.radians(angle)) * dis
            zy=py - math.sin(math.radians(angle)) * dis
            #if zx//60<13 and zy//60<7:
            if q[int(zx//60)][int(zy//60)]==1 :

140条射线 dis是射线从玩家发射 击中墙计算距离 如果q列表代表墙 在q[zx/60][zy/60]意味着在墙列表中当前射线是否击中墙,为1代表是墙,0是空
集中后计算墙的高度,然后break退出这个循环,角度加1,进行下一条射线绘制在这里插入图片描述
for x in range(400):
ray_angle = camera_direction - 30 + (x / width) * 60
distance_to_wall = 0
while True:我想问的是在这个循环中 角度有没有改过

2024/5/19 17:24:59

在这个循环中,ray_angle 在每次迭代时是根据 camera_direction、固定的偏移量 -30 和 (x / width) * 60 计算得出的。所以在每次循环中,ray_angle 的值会改变。

具体来说,对于循环中的每个 x 值,都会计算一个新的 ray_angle 值,并将其用于后续的计算和处理。这意味着随着 x 的增加,ray_angle 的值也会相应地改变。

希望解答了你的问题。如果还有其他疑问,请随时提问。

2024/5/19 17:25:32

为什么是x/width

2024/5/19 17:25:39

在这个循环中, (x / width) 是用来计算当前射线的水平位置相对于整个屏幕的比例。它的取值范围是从0到1,表示射线在屏幕上的水平位置的百分比。

这个比例值乘以60,是为了将射线的角度范围限制在-30到30之间。通过这种方式,屏幕上的每个像素都对应一个射线角度。

假设我们有一个屏幕宽度为800个像素。当 x 的取值范围从0变化到799时, (x / width) 的取值范围就从0变化到0.99875。然后,乘以60的结果就会使得 ray_angle 的范围从-30变化到29.925。

这样做的目的是根据屏幕上的每个像素位置计算出对应的射线角度,从而能够实现墙体的投影效果。

希望解答了你的问题。如果还有其他疑问,请随时提问。

2024/5/19 17:27:35

那发射了多少条射线

2024/5/19 17:27:45

在上述代码中,使用了一个 for 循环来迭代 x 值从 0 到 399,即总共迭代了 400 次。所以,在这段代码中发射了 400 条射线。

每个 x 值对应一条射线,通过计算每条射线的角度和其他参数,可以绘制出相应的投影效果,并实现伪3D效果。

希望解答了你的问题。如果还有其他疑问,请随时提问。

import pygame
from pygame.locals import *
import sys
import math

pygame.init()

width, height = 900, 600
screen = pygame.display.set_mode((width, height))
c=pygame.time.Clock()
q = [
    [0, 0, 0, 0, 0,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值