2017-09-02 14 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を押すと、キーを押したままカメラを常に動かす必要があります。それはしません。 1ピクセル移動するたびにキーを押す必要があります。誰かが鍵を持っているのがうまくいかない理由を説明できますか?私が見つけた他のすべての質問で判断すると、これはうまくいくはずです。Pygameキーが機能しない。

答えて

0

自分の間違いを認識したので、自分で回答を投稿すると思っていました。私はコードの残りの部分を偶数forループの後に置く。forループの意味は、キープレスのようなイベントが起こるたびに1つしか更新しないという意味である。 sys.exit()を過ぎてすべてをインデントする必要がありました

関連する問題