首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要关于在我的平台游戏上执行Frustum剔除的帮助

我需要关于在我的平台游戏上执行Frustum剔除的帮助
EN

Stack Overflow用户
提问于 2019-08-31 05:38:44
回答 1查看 166关注 0票数 0

为了实现Frustum剔除算法,我尝试从依赖于播放器x和y位置的位置开始render()函数中嵌套的for循环,这样代码将只循环通过.tmx文件中必须呈现的一小部分。现在的问题是,我如何从一个依赖于我的球员坐标的位置开始循环?提前感谢你的帮助。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-31 15:10:27

如果平铺地图的大小是恒定的(即,每个平铺都具有相同的宽度和高度),则可以计算世界上某一点的当前平铺地图坐标。

假设我们有20个像素宽和20个像素高的瓷砖,你的玩家在位置(432,36)。然后我们可以通过整数除法(除法和截断/“去掉小数”)找出他/她在哪个瓦片上。

代码语言:javascript
复制
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 22y = 0 to 2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57733488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档