Python Forum
Movement after KEYUP, only after pause func
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Movement after KEYUP, only after pause func
#1
I've been trying to figure it out for hours. Someone help please? The problem is if I hit the pause key while holding a movement key, the character will continue moving in that direction after its unpaused. The only way to stop it is to hold key for the opposite direction and pause simultaneously, or close.

import pygame
import os
os.environ['SDL_VIDEO_CENTERED'] = '1'
import sys
from pygame.locals import *
pygame.display.set_mode((800, 600))


class Player(pygame.sprite.Sprite):

	def __init__(self):
		global direction
		pygame.sprite.Sprite.__init__(self)
		self.movex = 0
		self.movey = 0
		self.frame = 0
		self.images = []
		img_right = pygame.image.load('assets/charactermodels/hero_right_small.png').convert_alpha()
		img_left = pygame.image.load('assets/charactermodels/hero_left_small.png').convert_alpha()
		img_down = pygame.image.load('assets/charactermodels/hero_front_small.png').convert_alpha()
		img_up = pygame.image.load('assets/charactermodels/hero_back_small.png').convert_alpha()
		self.images.append(img_right)
		self.images.append(img_left)
		self.images.append(img_down)
		self.images.append(img_up)
		self.image = self.images[2]
		self.rect  = self.image.get_rect()
		
	def action(self):
			if self.rect.x >= 280 and self.rect.x <= 320 and self.rect.y >= 440:
				textures["S"] = OH
		
	def control(self, x, y):
		self.movex += x
		self.movey += y
	
	def update(self):
		self.rect.x = self.rect.x + self.movex
		self.rect.y = self.rect.y + self.movey
		if direction == 'right':
			self.image = self.images[0]
		elif direction == 'left':
			self.image = self.images[1]
		elif direction == 'down':
			self.image = self.images[2]
		elif direction == 'up':
			self.image = self.images[3]
		else:
			self.image = self.images[0]
		if self.rect.y <= -55:
			self.rect.y = -55
		if self.rect.x >= 657:
			self.rect.x = 657
		if self.rect.y >= 447:
			self.rect.y = 447
		if self.rect.x <= -25:
			self.rect.x = -25
			
		
		if self.rect.x > 398 and self.rect.x < 435 and self.rect.y > 15 and self.rect.y < 44:
			textures["B1"] = Y
			
def Pause():
	#create menu
	pygame.display.set_caption('***GAME PAUSED***')
	background = pygame.display.set_mode((x*tilesize, y*tilesize))
	
	#Loop Setup
	pause = True
	while pause:
		for event in pygame.event.get():
			if event.type == pygame.KEYDOWN:
				if event.type == pygame.QUIT:
					pygame.quit(); sys.exit()
			
				if event.key == ord('p') or event.key == ord('P'):
					pause = False
					
				if event.key == ord('q'):
					pygame.quit()
					sys.exit()

	pygame.display.set_caption('Mysterious Mr. MAN')





blk = (0, 0 , 0)
direction = 'down'

OH = pygame.image.load('assets/levels/black.png').convert()
B = pygame.image.load('assets/levels/wall_bottom.png').convert()
O = pygame.image.load('assets/itemsobjects/PressMeButton.png').convert()
Y = pygame.image.load('assets/itemsobjects/successButton.png').convert()

textures = {
0:pygame.image.load('assets/levels/floor1.png').convert(),
1:pygame.image.load('assets/levels/wall_left.png').convert(),
2:pygame.image.load('assets/levels/corner_TL.png').convert(),
3:pygame.image.load('assets/levels/corner_TR.png').convert(),
4:pygame.image.load('assets/levels/corner_BL.png').convert(),
5:pygame.image.load('assets/levels/corner_BR.png').convert(),
6:pygame.image.load('assets/levels/wall_top.png').convert(),
7:pygame.image.load('assets/levels/wall_right.png').convert(),
8:B,
9:pygame.image.load('assets/levels/floor2.png').convert(),
10:blk,
"B1":O,
"S":B
}

map = [
[2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, "B1", 0, 0, 0, 0, 0, 9, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 7],
[1, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7],
[4, 8, 8, 8, 8, 8, 8, 8, 8, "S", 8, 8, 8, 8, 8, 8, 8, 8, 8, 5]
]

tilesize = 40
x = 20
y = 15
fps = 24
ani = 4
worldx = x * tilesize
worldy = y * tilesize
player = Player()   # spawn player
player.rect.x = 300   # go to x
player.rect.y = 200  # go to y
player_list = pygame.sprite.Group()
player_list.add(player)
steps = 2 #how many pixels to move
player_coord = (player.rect.x, player.rect.y)

pygame.init()
pygame.display.set_caption('Mysterious Mr. MAN')
background = pygame.display.set_mode((x*tilesize, y*tilesize))
background.fill(blk)

main = True

while main:
	for event in pygame.event.get():
		print(event)
		if event.type == pygame.QUIT:
			pygame.quit(); sys.exit()
			main = False
			
		if event.type == pygame.KEYDOWN:
				
			if event.key == pygame.K_SPACE:
				player.action()
				
			if event.key == pygame.K_LEFT or event.key == ord('a'):
				print('Start: ', player_coord)
				player.control(-steps,0)
				direction = 'left'
				
			if event.key == pygame.K_RIGHT or event.key == ord('d'):
				print('Start: ', player_coord)
				player.control(steps,0)
				direction = 'right'
				
			if event.key == pygame.K_UP or event.key == ord('w'):
				print('Start: ', player_coord)
				player.control(0, -steps)
				direction = 'up'
				
			if event.key == pygame.K_DOWN or event.key == ord('s'):
				print('Start: ', player_coord)
				player.control(0, steps)
				direction = 'down'

			if event.key == ord('p') or event.key == ord('P'):
				player.control(0, 0)
				Pause()

		if event.type == pygame.KEYUP:			
			if event.key == pygame.K_LEFT or event.key == ord('a'):
				print('EndPos: ', player_coord)
				print()
				print()
				player.control(steps,0)
			if event.key == pygame.K_RIGHT or event.key == ord('d'):
				print('EndPos: ', player_coord)
				print()
				print()
				player.control(-steps,0)
			if event.key == pygame.K_UP or event.key == ord('w'):
				print('EndPos: ', player_coord)
				print()
				print()
				player.control(0, steps)
			if event.key == pygame.K_DOWN or event.key == ord('s'):
				print('EndPos: ', player_coord)
				player.control(0, -steps)
				print()
				print()
			
				
			
			if event.key == ord('q'):
				pygame.quit()
				sys.exit()
				main = False
				
		
	for row in range(y):
		for column in range(x):
			background.blit(textures[map[row][column]], (column*tilesize, row*tilesize))
			
	player_coord = (player.rect.x, player.rect.y)
	player.update() #update sprite
	player_list.draw(background) # draw player
	pygame.display.flip()
	pygame.display.update()
	steps = 2
	
	continue
Reply


Messages In This Thread
Movement after KEYUP, only after pause func - by esteel - Aug-21-2018, 10:19 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Laggy Game Movement game_slayer_99 12 4,799 Oct-05-2022, 11:34 AM
Last Post: metulburr
  [PyGame] Particle movement mystery XavierPlatinum 10 3,271 Jul-09-2022, 04:28 AM
Last Post: deanhystad
  [PyGame] Isometric Movement on Tiled Map Josselin 0 2,485 Nov-02-2021, 06:56 AM
Last Post: Josselin
  [PyGame] object's movement to left leave shadow on the screen Zhaleh 3 3,298 Aug-02-2020, 09:59 PM
Last Post: nilamo
  Using classes for room movement (text game) Lawr3y 3 6,721 Aug-20-2019, 12:40 AM
Last Post: Lawr3y
  Problem with coding for movement keys Aresofthesea 3 3,572 Jul-05-2019, 07:05 PM
Last Post: nilamo
  Pygame Movement X/Y coord TheHumbleIdiot 2 3,604 Mar-19-2019, 02:21 PM
Last Post: TheHumbleIdiot
  [PyGame] Game doesn't work after pause Owenix 2 3,256 Sep-20-2018, 08:44 PM
Last Post: nilamo
  [PyGame] How to stop the sprite's movement when it touches the edges of the screen? mrmn 5 11,900 May-13-2018, 06:33 PM
Last Post: mrmn
  Python Pygame help pause event Trajme 0 3,464 Dec-06-2017, 09:14 PM
Last Post: Trajme

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020