我目前正在尝试制作一个自上而下的射击游戏,但是我在试图弄清楚角色移动(上、下、左、右)时如何移动地图时遇到了一些麻烦。我希望贴图始终填充屏幕,但当角色移动时,贴图将随之移动。我在网上寻找了一些解决方案,但很难将其应用到我自己的程序中
import pygame
pygame.display.set_caption("TEST")
clock = pygame.time.Clock()
class Player():
def __init__(self,x,y):
self.Image = pygame.image.load("myAvatar.png").convert()
self.rect = self.Image.get_rect(topleft = (x,y))
def getX(self):
return self.rect.x
def getY(self):
return self.rect.y
def handle_keys(self,screenHeight,screenWidth):
key = pygame.key.get_pressed()
dist = 1
if key[pygame.K_DOWN]:
self.rect.y += dist
if self.rect.y > screenHeight:
self.rect.y = screenHeight
elif key[pygame.K_UP]:
self.rect.y -= dist
if self.rect.y < 0:
self.rect.y = 0
if key[pygame.K_RIGHT]:
self.rect.x += dist
if self.rect.x > screenWidth:
self.rect.x = screenWidth
elif key[pygame.K_LEFT]:
self.rect.x -= dist
if self.rect.x < 0:
self.rect.x = 0
def draw(self, game_window,screenX,screenY):
self.Image = pygame.transform.scale(self.Image,(20,20))
game_window.blit(self.Image, (screenX, screenY))
class Map():
def __init__(self):
self.Image = pygame.image.load("testbackground.jpg").convert()
self.rect = self.Image.get_rect()
self.rect.x = 0
self.rect.y = 0
def getX(self):
return self.rect.x
def getY(self):
return self.rect.y
def setX(self,newX):
self.rect.x = newX
def setY(self,newY):
self.rect.y = newY
def draw(self, game_window,screenX,screenY):
self.Image = pygame.transform.scale(self.Image,(800,800))
game_window.blit(self.Image,(screenX, screenY))
class Enemy():
def __init__ (self,x,y):
self.Image = pygame.image.load("WC.jpg").convert()
self.rect = self.Image.get_rect(topleft = (x,y))
def draw(self, game_window):
self.Image = pygame.transform.scale(self.Image,(20,20))
game_window.blit(self.Image, (self.rect.x, self.rect.y))
pygame.init()
clock = pygame.time.Clock()
screenWidth = 400
screenHeight = 400
game_window = pygame.display.set_mode((screenWidth,screenHeight))
player = Player(200,200)
map = Map()
enemy = Enemy(250,250)
leave = False
while not leave:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
running = False
playerX = player.getX()
playerY = player.getY()
mapX = map.getX()
mapY = map.getY()
screenX = playerX - (screenWidth/2)
if screenX < 0:
screenX = 0
if screenX > (mapX - screenWidth):
screenX = (mapX - screenWidth)
screenY = playerY - (screenHeight/2)
if screenY < 0:
screenY = 0
if screenY > (mapY - screenHeight):
screenY = (mapY - screenHeight)
player.handle_keys(screenHeight,screenWidth)
map.draw(game_window,screenX,screenY)
enemy.draw(game_window)
player.draw(game_window,screenX,screenY)
pygame.display.update()
pygame.display.flip()
clock.tick(60)
pygame.quit()
quit()
可以像this question中那样移动摄影机:
基本上,每个精灵都有一个位置,并在屏幕上绘制如下:
然后,摄像机会像这样跟随玩家:
在这种情况下,播放器停留在屏幕中央
如果您想让相机跟随播放器,但又不想让播放器一直处于中间(它可能会移动一点,但不会退出屏幕),可以使用以下方法:
在本例中,玩家永远不会离开此空间:
您还可以使用更紧凑的形式:
例如:
相关问题 更多 >
编程相关推荐