2017-09-02 11 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) 

Dies ist mein Code. Wenn Sie WASDRF drücken, sollte sich die Kamera ständig bewegen, während Sie die Taste gedrückt halten, aber nein. Es tut es nicht. Ich muss die Taste jedes Mal drücken, wenn ich ein Pixel bewegen möchte. Kann jemand erklären, warum das Halten des Schlüssels nicht funktioniert? Nach all den anderen Fragen, die ich gefunden habe, sollte dies funktionieren.Pygame-Schlüssel funktioniert nicht

Antwort

0

Habe gerade meinen Fehler erkannt, also dachte ich, ich würde die Antwort selbst posten. Ich habe den ganzen Rest des Codes nach der Even for-Schleife IN in die Event-Schleife gelegt, was bedeutet, dass sie nur jedes Mal aktualisieren würde, wenn ein Event wie ein Tastendruck passiert ist. Ich musste alles hinter sys.exit()

independent