如何解决无法在 pygame 屏幕上保留地图图片
我在对齐 pygame 窗口上的地图图片时遇到了一些麻烦。我想要它,以便地图图片将始终填满整个屏幕。我已经做到了,当玩家移动时地图图片会移动,但无法显示整个地图。
(这些不是我将在实际游戏中使用的图像,只是用于测试)
Here is what happens if you move to the maximum up and left
When the character moves to the maximum down and right. Some of the image is still cut off
这是我正在使用的代码:
import pygame
from pygame.locals import *
from math import sin
pygame.display.set_caption("TEST")
clock = pygame.time.Clock()
time_passed = 0
class Player():
def __init__(self,x,y):
self.Image = pygame.image.load("myAvatar.png").convert()
self.x = 200
self.y = 200
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 = 2
if key[K_LEFT] and self.x > 0:
self.x -= 500 * time_passed
if key[K_RIGHT] and self.x < screenWidth -20:
self.x += 500 * time_passed
if key[K_UP] and self.y > 0:
self.y -= 500 * time_passed
if key[K_DOWN] and self.y < screenHeight -20:
self.y += 500 * time_passed
def draw(self,game_window):
self.Image = pygame.transform.scale(self.Image,(20,20))
game_window.blit(self.Image,(int(self.x),int(self.y)))
class Map():
def __init__(self):
self.Image = pygame.image.load("testbackground.jpg").convert()
self.rect = self.Image.get_rect()
self.x = 0
self.y = 0
def draw(self,game_window,screenWidth):
self.Image = pygame.transform.scale(self.Image,(800,800))
self.x = min(max(self.x,player.x - 2 * screenWidth / 3),player.x - screenWidth / 3)
self.y = min(max(self.y,player.y -2 * screenHeight / 3),player.y - screenHeight / 3)
game_window.blit(self.Image,(-self.x,-self.y))
class Enemy():
def __init__ (self,y):
self.Image = pygame.image.load("WC.jpg").convert()
self.rect = self.Image.get_rect(topleft = (x,y))
def draw(self,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
player.handle_keys(screenHeight,screenWidth)
game_window.fill((0,0))
map.draw(game_window,screenWidth)
#enemy.draw(game_window)
player.draw(game_window)
pygame.display.update()
pygame.display.flip()
time_passed = clock.tick() / 1000
pygame.quit()
quit()
解决方法
您需要多次blit
背景。见How to scroll the background surface in PyGame?。
如果背景沿 x 和 y 轴移动,则必须在屏幕上放置 4 个背景“tiles2:
class Map():
def __init__(self):
self.Image = pygame.image.load("testbackground.jpg").convert()
self.Image = pygame.transform.scale(self.Image,game_window.get_size())
self.rect = self.Image.get_rect()
self.x = 0
self.y = 0
def draw(self,game_window,screenHeight,screenWidth):
self.x = player.x - screenWidth // 2
self.y = player.y - screenHeight // 2
x1 = self.x % self.Image.get_width()
x2 = x1 - self.Image.get_width()
y1 = self.y % self.Image.get_height()
y2 = y1 - self.Image.get_height()
game_window.blit(self.Image,(x1,y1))
game_window.blit(self.Image,(x2,y2))
game_window.blit(self.Image,y2))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。