2017-09-02 35 views
1
import pygame, sys, math 

class Cam: 
    def __init__(self, pos=(0,0,0), rot=(0,0)): 
     self.pos = list(pos) 
     self.rot = list(rot) 

    def update(self, dt, key): 
     s = dt*10 
     if key[pygame.K_r]: self.pos[1]-=s 
     if key[pygame.K_f]: self.pos[1]+=s 

     if key[pygame.K_w]: self.pos[2]+=s 
     if key[pygame.K_s]: self.pos[2]-=s 
     if key[pygame.K_a]: self.pos[0]-=s 
     if key[pygame.K_d]: self.pos[0]+=s 

pygame.init() 
w,h = 400,400; cx,cy=w//2, h//2 
screen = pygame.display.set_mode((w,h)) 
clock = pygame.time.Clock() 

verts=(-1,-1,-1),(1,-1,-1),(1,1,-1),(-1,1,-1),(-1,-1,1),(1,-1,1),(1,1,1),(-1,1,1) 
edges = (0,1),(1,2),(2,3),(3,0),(4,5),(5,6),(6,7),(7,4),(0,4),(1,5),(2,6),(3,7) 

cam = Cam((0,0,-5)) 

while True: 
    dt = 0.1 
    print dt 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 

     screen.fill((255,255,255)) 

     for edge in edges: 
      points = [] 
      for x,y,z in (verts[edge[0]],verts[edge[1]]): 

       x-=cam.pos[0] 
       y-=cam.pos[1] 
       z-=cam.pos[2] 
       f=200/z 
       x,y = x*f, y*f 

       points = points + [(cx+int(x), cy+int(y))] 
      pygame.draw.line(screen, (0,0,0), points[0], points[1], 1) 

     pygame.display.flip() 

     key = pygame.key.get_pressed() 
     cam.update(dt, key) 

這是我的代碼。按下WASDRF應該在按住鍵的同時不斷移動相機,但不是。它沒有。每次我想移動一個像素時,我必須按下鍵。有人可以解釋爲什麼持有鑰匙不起作用嗎?從我發現的所有其他問題來看,這應該起作用。Pygame key holding not working

回答

0

剛剛意識到我的錯誤,所以我想我會自己發佈答案。我將整個代碼的其餘部分放在循環中的for循環之後,意味着每次發生按鍵事件時它只會更新一次。我需要unindent過去sys.exit()