为了实现Frustum剔除算法,我尝试从依赖于播放器x和y位置的位置开始render()函数中嵌套的for循环,这样代码将只循环通过.tmx文件中必须呈现的一小部分。现在的问题是,我如何从一个依赖于我的球员坐标的位置开始循环?提前感谢你的帮助。
import pygame
import pytmx
pygame.init()
class Map():
def __init__(self,filename):
tm=pytmx.load_pygame(filename,pixelalpha=True)
self.width=tm.width * tm.tilewidth
self.height=tm.height*tm.tileheight
self.tmxdata=tm
def render(self,surface):
ti=self.tmxdata.get_tile_image_by_gid
for layer in self.tmxdata.visible_layers:
if isinstance(layer,pytmx.TiledTileLayer):
for x,y,gid in layer:
tile = ti(gid)
if tile
surface.blit(tile,(x*self.tmxdata.tilewidth,y*self.tmxdata.tileheight))
def make_map(self):
temp_surface=pygame.Surface((self.width,self.height))
self.render(temp_surface)
return temp_surface发布于 2019-08-31 15:10:27
如果平铺地图的大小是恒定的(即,每个平铺都具有相同的宽度和高度),则可以计算世界上某一点的当前平铺地图坐标。
假设我们有20个像素宽和20个像素高的瓷砖,你的玩家在位置(432,36)。然后我们可以通过整数除法(除法和截断/“去掉小数”)找出他/她在哪个瓦片上。
tile_x = player_x // tile_width
tile_y = player_y // tile_height在我们的例子中,玩家将站在x轴上的磁贴21上(432 // 20 = 21),以及y轴上的磁贴1上(36 // 20 = 1)。
从那里你可以定义你想要显示的玩家周围的区域有多大。如果你想在每个方向(包括玩家所站的那个方向)渲染1个瓷砖,你必须遍历x = 20 to 22和y = 0 to 2。
https://stackoverflow.com/questions/57733488
复制相似问题