2016-11-25 69 views
-4

我试图让相机移动,但当单击q w e a s或d时没有任何效果。我试着问原来的程序员,但是这个失败了,所以我不知道该怎么做。PyGame - 相机不按下按键移动

代码:

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_q]: self.pos[1]-=s 
     if key[pygame.K_e]: 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 = clock.tick()/1000 

    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+=[(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) 

回答

0

你忘了正确缩进最后两行。

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_q]: self.pos[1]-=s 
     if key[pygame.K_e]: 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 = clock.tick()/1000 

    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+=[(cx+int(x),cy+int(y))] 
    pygame.draw.line(screen,(0,0,0),points[0],points[1],1) 


    pygame.display.flip() 

    # these two lines should be inside the `while` loop 
    key = pygame.key.get_pressed() 
    cam.update(dt,key) 
+0

仍然不能正常工作 – pol002

+0

“不工作”是什么意思,@ pol002?你期望什么,你得到了什么?你做了什么调试?你有没有打印出任何中间值来理解你的代码在做什么? – halfer