Эх сурвалжийг харах

use pygame.clock.tick and pygame.KEYUP

raylu 12 жил өмнө
parent
commit
01eeb9a89a
1 өөрчлөгдсөн 31 нэмэгдсэн , 19 устгасан
  1. 31 19
      troll

+ 31 - 19
troll

@@ -18,32 +18,44 @@ class Tileset(object):
 
 size = width, height = 640, 480
 black = (0, 0, 0)
+render_x = 0
+render_y = 13*16
 
 pygame.init()
 screen = pygame.display.set_mode(size)
 tileset = Tileset(screen)
-pygame.key.set_repeat(100, 100)
+clock = pygame.time.Clock()
+
+keys = {
+	pygame.K_LEFT: False,
+	pygame.K_RIGHT: False,
+	pygame.K_UP: False,
+	pygame.K_DOWN: False,
+}
+def handle_event(event):
+	if event.type == pygame.KEYDOWN:
+		if event.key in keys.iterkeys():
+			keys[event.key] = True
+	elif event.type == pygame.KEYUP:
+		if event.key in keys.iterkeys():
+			keys[event.key] = False
+	elif event.type == pygame.QUIT:
+		sys.exit()
 
-render_x = 0
-render_y = 13*16
 while True:
-	keydown = False
+	clock.tick(60)
 	for event in pygame.event.get():
-		if event.type == pygame.KEYDOWN:
-			keydown = True
-		elif event.type == pygame.QUIT:
-			sys.exit()
-
-	if keydown:
-		pressed_keys = pygame.key.get_pressed()
-		if pressed_keys[pygame.K_RIGHT]:
-			render_x += 16
-		if pressed_keys[pygame.K_LEFT]:
-		  render_x -= 16
-		if pressed_keys[pygame.K_DOWN]:
-		  render_y += 16
-		if pressed_keys[pygame.K_UP]:
-			render_y -= 16
+		handle_event(event)
+
+	SPEED = 4
+	if keys[pygame.K_RIGHT]:
+		render_x += SPEED
+	if keys[pygame.K_LEFT]:
+		render_x -= SPEED
+	if keys[pygame.K_DOWN]:
+		render_y += SPEED
+	if keys[pygame.K_UP]:
+		render_y -= SPEED
 
 	screen.fill(black)
 	tileset.render_person((render_x, render_y))