我正在做我在pygame中的第一个游戏,但是当我生成了我的世界并试图移动我的角色时,他的精灵仍然留在原来的位置。我不能blit我的背景每一帧也太大,使pygame的表现停顿
我尝试了每一帧,但这也减缓了pygame以及。然后我试着让它围绕着我的角色,所以它涵盖了我的角色的老照片,但我也不能得到工作
def MakeTerrain():
TempY = 0
for o in range(51):
for i in range(51):
TempX = 16 * i
if TempX >= 800:
TempY = 16 * o
TempX = 0
rnd = random.randrange(10)
if rnd <= 8:
tile = Tile("Grass",[TempX,TempY])
else:
tile = Tile("Stone",[TempX,TempY])
Tiles.append(tile)
tile.BlitTile(Display)
用于生成我的地形的函数[a.k.a world/background]
class Player():
def __init__(self,MovementSpeed=1):
self.DirectionX = 0
self.DirectionY = 0
self.PlayerPos = [0,0]
self.MovementSpeed = MovementSpeed
self.PlayerSprite = pygame.image.load("Jeffrey.png")
def BlitPlayer(self,display):
display.blit(self.PlayerSprite,(self.PlayerPos[0],self.PlayerPos[1]))
我的播放器的类和我的blit函数
class Tile():
def __init__(self,sprite,Position):
self.TilePosition = Position
self.TileSprite = pygame.image.load(sprite+".png")
def BlitTile(self,display):
display.blit(self.TileSprite,(self.TilePosition[0],self.TilePosition[1]))
平铺类
事情就是这样
我认为只重绘播放器附近的瓷砖的想法可以工作,但它需要稍微修改
这将需要将position值更改为
pygame.math.Vector2
,因此首先,我还建议将这些值的所有实例更改为self.pos
,这样我将向您展示的循环更容易实现要提升x和y值,它们只是
self.pos.x
或self.pos.y
在图形代码中,可以首先对其进行更改,使其遍历每个sprite:
在这个循环中,您可以使用以下新向量检查精灵到播放器的距离:
最后,检查新距离是否低于某个阈值:
最后,新的绘图代码如下所示:
这应该只重绘最接近玩家的瓷砖,而不必处理管理每个瓷砖
相关问题 更多 >
编程相关推荐