Pygame nesneyi çapraz hareket ettirme


#1

klavye tuşları ile ekrandaki bir kareyi hareket ettirmek için aşağıdaki kodları internetten buldum, fakat bu şekilde aynı anda birden çok yöne -mesela hem yukarı hem sağa- gitmek mümkün olmuyor. bunu nasıl yapabilirim?

import pygame, time, sys

pygame.init()
pencere = pygame.display.set_mode((800, 600))
kare = pygame.Rect((50, 50), (100, 100))
devam = 1
pygame.key.set_repeat(10, 10)
while devam == 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                kare.left -= 10
            if event.key == pygame.K_RIGHT:
                kare.right += 10
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                kare.top -= 10
            if event.key == pygame.K_DOWN:
                kare.bottom += 10

    pencere.fill((0, 0, 0))
    pygame.draw.rect(pencere, (0, 255, 0), kare)
    pygame.display.update()
    time.sleep(0.025)

#2

sağ yön tuşu bu şekilde düzeltirseniz olur


import pygame, time, sys

pygame.init()
pencere = pygame.display.set_mode((800, 600))
kare = pygame.Rect((50, 50), (100, 100))
devam = 1
pygame.key.set_repeat(10, 10)
while devam == 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                kare.left -= 10
            if event.key == pygame.K_RIGHT:
                #sağa 10
                kare.right += 10
                #yukarı 10 geri
                kare.top -= 10
                
            if event.key == pygame.K_BACKSPACE:
                kare.right += 10
               
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                kare.top -= 10
            if event.key == pygame.K_DOWN:
                kare.bottom += 10

    pencere.fill((0, 0, 0))
    pygame.draw.rect(pencere, (0, 255, 0), kare)
    pygame.display.update()

#3

aynı anda yukarı ve sağ ok tuşlarına bastığımda sağ üste doğru çapraz gitmeyi kast etmiştim :slight_smile: yani iki tuş aynı anda kendi işlevini yerine getirebilsin istiyorum.


#4

https://www.daniweb.com/programming/software-development/threads/72656/multiple-keypresses-at-once-in-pygame#
yukarıdaki sayfadan pygame.keys.get_pressed() modülünü kullanmam gerektiğini öğrendim.

http://www.pygame.org/docs/ref/key.html#pygame.key.get_pressed
buradan anladığım kadarıyla pygame.keys.get_pressed() klavyedeki her tuşun basılıp basılmadığını 0 ve 1 olarak döndürüyor.

çalışma şeklini tam çözemesem de şuradan nasıl kullanıldığını öğrendim:
https://github.com/search?q=pygame.key.get_pressed&type=Code

neticede kodu aşağıdaki gibi düzenleyip istediğim sonuca ulaştım :slight_smile: :

import pygame, time, sys

pygame.init()
pencere = pygame.display.set_mode((800, 600))
kare = pygame.Rect((50, 50), (100, 100))
devam = 1
pygame.key.set_repeat(10, 10)
while devam == 1:
    keys = pygame.key.get_pressed()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()


        if keys[pygame.K_UP]:
            kare.top -= 10
        if keys[pygame.K_DOWN]:
            kare.bottom += 10
        if keys[pygame.K_RIGHT]:
            kare.right += 10
        if keys[pygame.K_LEFT]:
            kare.left -= 10

    pencere.fill((0, 0, 0))
    pygame.draw.rect(pencere, (0, 255, 0), kare)
    pygame.display.update()
    time.sleep(0.025)

ilginiz için teşekkür ederim @HKMDMR