2016-11-25 20 views
-4

カメラを動かそうとしていますが、qをクリックしても効果はありません。私は元のプログラマーに聞いてみたが、それは無駄になったので、私は何をすべきか分からない。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

あなたが適切に最後の2行をインデントするために忘れてしまいました。

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

関連する問題