Brauche Hilfe!

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Vadehoc
User
Beiträge: 3
Registriert: Mittwoch 12. März 2014, 21:15

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

@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.
Vadehoc
User
Beiträge: 3
Registriert: Mittwoch 12. März 2014, 21:15

@BlackJack
Vielen vielen Dank!Es klappt jetzt!
BlackJack

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.
Antworten