Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Vadehoc
User
Beiträge: 3 Registriert: Mittwoch 12. März 2014, 21:15
Mittwoch 12. März 2014, 21:20
Lerne seit heute so ein bissche PyGame,jedoch lässt sich in meinem Programm aus irgendeinem Grund der Character nicht bewegen.Vielleicht kann mir ja einer von euch helfen!
Code: Alles auswählen
import pygame
pygame.init()
size = width, height = 960, 730
movement = [0, 0]
screen = pygame.display.set_mode(size)
character = pygame.image.load("char.png")
charrect = character.get_rect()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if (event.type == pygame.KEYDOWN):
if event.key == pygame.K_w:
if charrect.top > 0:
movement = [0, -10]
charrect.move(movement)
if event.key == pygame.K_a:
if charrect.left > 0:
movement = [-10, 0]
charrect.move(movement)
if event.key == pygame.K_s:
if charrect.bottom < height:
movement = [0, 10]
charrect.move(movement)
if event.key == pygame.K_d:
if charrect.right < width:
movement = [10, 0]
charrect.move(movement)
screen.fill((255, 255, 255))
screen.blit(character, charrect)
pygame.display.flip()
Zuletzt geändert von Anonymous am Mittwoch 12. März 2014, 21:23, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack
Mittwoch 12. März 2014, 21:29
@Vadehoc: `charrect` wird nicht verändert. Die `move()`-Methode gibt ein *neues* `Rect`-Objekt mit veränderten Koordinaten zurück, mit dem Du aber nichts machst. Das ist als wenn Du einfach so ``x + 1`` schreiben würdest. Dadurch verändert sich der Wert von `x` nicht.
BlackJack
Mittwoch 12. März 2014, 21:43
Klammern um die Bedingung bei ``if`` sind unnötig und mit einem Wörterbuch kann man die Umsetzung von Taste zu relativen Koordinaten deutlich kompakter schreiben (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python
import pygame
def main():
pygame.init()
size = 960, 730
screen = pygame.display.set_mode(size)
screen_rect = screen.get_rect()
character = pygame.image.load('char.png')
character_rect = character.get_rect()
key2movement = {
pygame.K_w: [0, -10],
pygame.K_a: [-10, 0],
pygame.K_s: [0, 10],
pygame.K_d: [10, 0],
}
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
break
if event.type == pygame.KEYDOWN:
character_rect = character_rect.move(
key2movement.get(event.key, [0, 0])
).clamp(screen_rect)
screen.fill((255, 255, 255))
screen.blit(character, character_rect)
pygame.display.flip()
if __name__ == '__main__':
main()
Zuletzt geändert von BlackJack am Donnerstag 13. März 2014, 07:12, insgesamt 1-mal geändert.
Grund: Fehler im Programm behoben.