Original Post
In my program, the w,a,s,d keys control movement. I can get either w+a or s+d to work, but not both.
Here is the input class:
[source lang="python"]class inputs:
videomode = None
l = False
r = False
u = False
d = False
run = True
def getkeys(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
self.l = True
else:
self.l = False
if keys[pygame.K_w]:
self.u = True
else:
self.u = False
if keys[pygame.K_d]:
self.r = True
else:
self.r = False
if keys[pygame.K_s]:
self.d = True
else:
self.d = False[/source]
Here is the input function in the game class (where i suspect the problem is):
[source lang="python"]def iupd(self):
self.i.getkeys()
if self.i.r:
self.player.vx = self.player.speed
else:
self.player.vx = 0
if self.i.l:
self.player.vx = -self.player.speed
else:
self.player.vx = 0
if self.i.d:
self.player.vy = self.player.speed
else:
self.player.vy = 0
if self.i.u:
self.player.vy = -self.player.speed
else:
self.player.vy = 0[/source]
I suspect that something's happening where the right and down get canceled out by the left and up, but I can't see how to correct this.
Please help!
Here is the input class:
[source lang="python"]class inputs:
videomode = None
l = False
r = False
u = False
d = False
run = True
def getkeys(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.run = False
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
self.l = True
else:
self.l = False
if keys[pygame.K_w]:
self.u = True
else:
self.u = False
if keys[pygame.K_d]:
self.r = True
else:
self.r = False
if keys[pygame.K_s]:
self.d = True
else:
self.d = False[/source]
Here is the input function in the game class (where i suspect the problem is):
[source lang="python"]def iupd(self):
self.i.getkeys()
if self.i.r:
self.player.vx = self.player.speed
else:
self.player.vx = 0
if self.i.l:
self.player.vx = -self.player.speed
else:
self.player.vx = 0
if self.i.d:
self.player.vy = self.player.speed
else:
self.player.vy = 0
if self.i.u:
self.player.vy = -self.player.speed
else:
self.player.vy = 0[/source]
I suspect that something's happening where the right and down get canceled out by the left and up, but I can't see how to correct this.
Please help!