微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 pygame 屏幕上保留地图图片

如何解决无法在 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 举报,一经查实,本站将立刻删除。