我目前正试图在游戏中编写一个简单的平台游戏,但是当我尝试将相机功能添加到游戏中时,我遇到了冲突问题。
这是我的代码:
为了不使问题太大,我将削减代码的部分,包括运动,碰撞和绘图。
Index.py
Tiles.py
import pygame
from settings import *
class Tiles(pygame.sprite.Sprite):
def __init__(self, file, pos):
pygame.sprite.Sprite.__init__(self)
self.bitmap = pygame.image.load(file)
self.bitmap = pygame.transform.scale(self.bitmap, (TILE_SIZE, TILE_SIZE))
self.image = pygame.Surface((TILE_SIZE, TILE_SIZE), pygame.HWSURFACE | pygame.SRCALPHA)
self.image.blit(self.bitmap, (0, 0))
self.rect = self.image.get_rect()
self.rect.x, self.rect.y = posPlayer.py
Camera.py
import pygame
from settings import *
class Camera:
def __init__(self, width, height):
self.camera = pygame.Rect(0, 0, width, height)
self.width = width
self.height = height
def apply(self, target):
return target.rect.move(self.camera.topleft)
def update(self, target):
x = - target.rect.x + int(WIDTH/2)
y = - target.rect.y + int(HEIGHT/2)
self.camera = pygame.Rect(x, y, self.width, self.height)Settings.py
WIDTH = 800
HEIGHT = 600
TILE_SIZE = 32
LEVEL_1 = [
'TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT',
'B V V',
'B V V',
'B V V',
'B V V',
'TTTTTTTTTB V V',
'B V V',
'B V V',
'B V V',
'B V V',
'B V V',
'B V V',
'B V',
'B V',
'B V',
'B VTTTTTTTTTTTTTTTTTTTTTTTTB V',
'B V V',
'B V V',
'TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT'
]
LEVEL_1_WIDTH = len(LEVEL_1[0])*TILE_SIZE
LEVEL_1_HEIGHT = len(LEVEL_1)*TILE_SIZE无相机碰撞

这是没有相机的碰撞,因为你可以看到它工作得很好。
与照相机的碰撞

当我添加相机功能时,就会发生这样的情况
如果您想测试它,请从game_loop中删除#并使用相机应用对绘图进行注释。
# self.all_sprites.draw(self.window)
for sprite in self.all_sprites:
self.window.blit(sprite.image, self.camera.apply(sprite))我在Window 10 x64机器中使用python2.7。
发布于 2017-11-16 19:10:23
您只是没有将相机转换应用于您的player实例:它是在绝对游戏坐标中绘制的,而其他所有内容都是在摄像机坐标中绘制的。
另一方面,碰撞检查总是在游戏的绝对坐标下进行。
你必须把相机应用到你的球员,然后再画它。正如您的代码所示,看起来您只需将播放器添加到all_sprites组中,并完全删除Player.draw方法。然后,如果您愿意,纠正Camera.update方法上的一些内容,以便当在地图的边框时,播放机并不总是以屏幕为中心。
https://stackoverflow.com/questions/47331961
复制相似问题