2017-08-31 127 views
1

我正在制作程序,将二维数组作为二维贴图贴图进行拼接。 self.tile_size变量用于缩放将成为blit的平铺图像。 我希望Q使它变小,并且E使它变大。问题是,pygame窗口中的输出不是我想要的。链接中的图像显示发生了什么,当我运行一个程序并试图使图像变大时。 Image of outputPygame - 缩放图像

这里是我的代码:

import pygame 
from pygame.locals import * 
pygame.init() 

import math, sys, os, random, time 

from a_star import * 

tiles_list = [ 
    pygame.image.load('Floor.png'), 
    pygame.image.load('Wall.png'), 
    ] 

PLAN_W = 20 
PLAN_H = 20 

PLAN_STATUS = [[True for i in range(PLAN_W)]for j in range(PLAN_H)] 

OBSTACLES = [ 
    [0,0], 
    [0,1], 
    [0,2]] 

obsta(OBSTACLES, PLAN_STATUS) # function imported from a_star that change PLAN_STATUS cells from OBSTACLES to False 


class World(): 
    def __init__(self): 
     self.screen_width = 800 
     self.screen_height = 600 

     self.screen = pygame.display.set_mode((self.screen_width, self.screen_height)) 
     self.clock = pygame.time.Clock() 

     self.bg_color = (255,255,255) 

     self.tile_size = 48 

     self.map_status = PLAN_STATUS 

     self.tiles_list = tiles_list 

     self.scale_change = 0 

     self.run() 

    def scale_tiles(self): 
     print(self.tile_size) 
     self.new_list = [] 
     for i in self.tiles_list: 
      i = pygame.transform.scale(i, (self.tile_size, self.tile_size)) 
      self.new_list.append(i) 
     self.tiles_list = self.new_list 

    def render_map(self): 
     print(self.tile_size) 
     ''' 
     self.screen.fill(self.bg_color) 
     for x in range(PLAN_H): 
      for y in range(PLAN_W): 
       if self.map_status[y][x]: 
        tile = self.tiles_list[0] 
       elif not self.map_status[y][x]: 
        tile = self.tiles_list[1] 

       self.screen.blit(tile, (x*self.tile_size, y*self.tile_size)) 
''' 

     self.screen.blit(self.tiles_list[0], (400, 300)) 

    def run(self): 
     while True: 


      self.events = pygame.event.get() 
      self.keys = pygame.key.get_pressed() 
      self.mouse_pos = pygame.mouse.get_pos() 
      self.mouse_but = pygame.mouse.get_pressed() 

      #UPDATE 
      self.screen.fill(self.bg_color) 

      #self.scale_tiles() 
      self.render_map() 

      pygame.display.flip() 

      #EVENTS 
      if self.keys[ord('e')] == 1: 
       self.tile_size += 1 
       self.scale_tiles() 
      if self.keys[ord('q')] == 1: 
       self.tile_size -= 1 
       self.scale_tiles() 


      '''for event in pygame.event.get(): 
       if event.type == pygame.KEYDOWN: 
        if event.key == pygame.K_q: 
         print('q') 
         self.scale_change = -1 
        if event.key == pygame.K_e: 
         print('e') 
         self.scale_change = 1 
       if event.type == pygame.KEYUP: 
        if event.key == pygame.K_q or event.key == pygame.K_e: 
         print('stopped key') 
         self.scale_change = 0''' 



      self.clock.tick(50) 

if __name__=="__main__": 
    main = World() 

哪里是在我的代码的问题? 谢谢你的帮助

Floor.png

+0

什么是_a \ _star_? – CristiFati

+0

请阅读[mcve页面](https://stackoverflow.com/help/mcve)。有些东西比如'obsta'和'PLAN_STATUS',这些与示例无关。另外,不要使用星形导入符号(星号“*”),因为它们使代码难以阅读。不过,你可以保留'from pygame.locals import *'。 – skrx

+0

@skrx谢谢,下次我会在脑海中看到它:) –

回答

0

使用图像/面在原有的全球tiles_listself.tiles_list创建new_list不是已缩放图像,否则它似乎增加了不精确每缩放。

for i in tiles_list:不是for i in self.tiles_list:

+0

我不明白,那种简单的事情可能会导致它。非常感谢你 –