2017-11-30 39 views
0

自分のバージョンのPacmanにIm wokringしていて、現在ウィンドウのサイズを変更しようとしています。私はここで答えを読む:https://reformatcode.com/code/python/pygame-how-do-i-resize-a-surface-and-keep-all-objects-within-proportionate-to-the-new-window-size。それは私の場合に私を助けなかった。私は2つの画面、画面と偽の画面があります。私が偽の画面でblitするためにすべてを設定すると、表示されますが、テーマを更新しません(パクマンは動きません)。画面に設定すると表示され更新されますが、サイズは変更されません。助けや助言をいただければ幸いです。ところで進捗ウィンドウでサイズを変更するにはどうすればいいですか?

import pygame 
from Variables import pelletspawns #imports pellet spwans list from different script 
from pygame.locals import * 


#Initialisation 
pygame.init() 
pygame.display.set_caption("Pacman") 
myfont = pygame.font.SysFont("monospace", 15) 
screen = pygame.display.set_mode((448, 576)) #Creates screen object 
fake_screen = screen.copy() 

pic = pygame.surface.Surface((50,50)) 
pic.fill((255,100,100)) 


clock = pygame.time.Clock()  #Creates clock object 
Fin = False 


#Declaring Variables 
FPS = 60 
MoveLeft = pygame.K_LEFT 
MoveRight = pygame.K_RIGHT 
MoveUp = pygame.K_UP 
MoveDown = pygame.K_DOWN 

#Load images 
PACMAN_MAP = pygame.image.load("images/pacman_map.png").convert_alpha() 
PACMANSPRITE = pygame.image.load("images/pacman.png").convert_alpha() 

#pacmans class 
class SpriteClass(pygame.sprite.Sprite): 
    def __init__(self, image, x, y): 
     self.image = image 
     self.y=y 
     self.x=x 
     self.rect = self.image.get_rect() 
     self.rect.left = self.x 
     self.rect.top = self.y 
     self.rect.width=16 
     self.rect.height=16 

    #draws Pacman 
    def draw(self, surface): 
     # blit yourself at your current position 

     surface.blit(self.image, (self.x, self.y)) 


    # move pacman 
    def movement(self): 
     pressed= pygame.key.get_pressed() 
     if pressed[MoveUp]: 
      self.y -= 2 
      print('key pressed') 
     if pressed[MoveDown]: 
      self.y += 2 
      print('key pressed') 
     if pressed[MoveLeft]: 
      self.x -= 2 
      print('key pressed') 
     if pressed[MoveRight]: 
      self.x += 2 
      print('key pressed') 
     self.rect.left = self.x 
     self.rect.top = self.y 
     print(self.x,self.y) 


#instances Pacman 
Pacman = SpriteClass(PACMANSPRITE, 216 ,416) 


#Function to spawn pellets 
def SpawnPellets(pelletspawns): 
    pelletx=0  #the temp x co-ordinate for the pellet to spawn 
    pellety= -8 #the temp y co-ordinate for the pellet to spawn (starts at -ve 0.5(gridscpare) for allignment 
    for row in pelletspawns: 
     #adds 1 grid space to correctly align spawns 
     pellety += 16 
     for pellet in row: 
      pelletx= 16*pellet 
      pelletx -=8 
      pygame.draw.circle(screen,(255, 204, 153), (pelletx, pellety) , 5) 


#main game loop 
while not Fin: 
    #For event is used to close the program 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.display.quit() 
     if event.type == VIDEORESIZE: 
      screen = pygame.display.set_mode(event.dict['size'],RESIZABLE) 
      screen.blit(pygame.transform.scale(fake_screen, event.dict['size']), (0, 0)) 
      pygame.display.flip() 
    #calls movement function 
    Pacman.movement() 

    #blits pacman map as background 
    screen.blit(PACMAN_MAP, (0, 0)) 

    #draws pacman 
    Pacman.draw(screen) 
    #Spawns pellets 
    SpawnPellets(pelletspawns) 

    #draws screen 
    pygame.display.flip() 
    clock.tick(FPS) 
+1

あなたは偽の画面に描画するときに移動しない理由を見つける必要があります。 – furas

+0

あなたがコメントしたように答えを見つけ出して投稿しましたが、助けてくれてありがとうございます:D @furas – cdd

答えて

1

上のまだ仕事は、私は私がちょうどclock.tick上のコアゲームループに screen.blit(pygame.transform.scale(fake_screen, event.dict['size']), (0, 0)) を動かすのに必要な、それを考え出しました。私はこれを前に試しましたが、event.dict['size']のイベントがなく、for event in pygame.event.get():ループの変数を作成してから、event.dict['size']を要求していた変数を渡したため、キーエラーが発生しました。ここでは、変更されたコードのセクションです:

#main game loop 
while not Fin: 
    #For event is used to close the program 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.display.quit() 
     if event.type == VIDEORESIZE: 
      size = event.dict['size'] 
      screen = pygame.display.set_mode(size,RESIZABLE) 


    #calls movement function 
    Pacman.movement() 

    #blits pacman map as background 
    fake_screen.blit(PACMAN_MAP, (0, 0)) 

    #draws pacman 
    Pacman.draw(fake_screen) 
    #Spawns pellets 
    SpawnPellets(pelletspawns) 

    #draws screen 
    screen.blit(pygame.transform.scale(fake_screen, size), (0, 0)) 
    pygame.display.flip() 
    clock.tick(FPS)