簡體   English   中英

pygame形狀旋轉

[英]Pygame shape rotation

我正在做一個小游戲,按下鍵時無法旋轉一種形狀。 我設法旋轉了形狀,但是當按下鍵時它會繼續旋轉(90度),而不是保持在新位置。 我有一種感覺,它處於某種類型的循環中,但是我似乎無法使它脫離循環。 希望有人能幫忙。 相關代碼位於底部的第六行(elif鍵[K_d])

class Player(pygame.sprite.Sprite):

def __init__(self, screen):
    self.screen = screen
    self.image = pygame.image.load(os.path.join('shape.png'))
    self.rect = self.image.get_rect()
    self.rect.x = 10
    self.rect.y = 540
    #You don't need to define self.width because it is now self.rect.width
    #Same with self.height
    self.speed = 10

def update(self):
    keys = pygame.key.get_pressed()      

    if keys[K_LEFT]:
        self.rect.left -= self.speed
        if self.rect.left < 0: #The left edge
            self.rect.left = 0
    elif keys[K_RIGHT]:
        self.rect.right += self.speed
        if self.rect.right > WINDOW_WIDTH:
            self.rect.right = WINDOW_WIDTH
    elif keys[K_UP]:
        self.rect.top -= self.speed
        if self.rect.top < 0:
            self.rect.top = 0
    elif keys[K_DOWN]:
        self.rect.bottom += self.speed
        if self.rect.bottom > WINDOW_HEIGHT:
            self.rect.bottom = WINDOW_HEIGHT
    ***#THE CODE BELOW IS THE SHAPES ROTATION***.        
    elif keys[K_d]:
        self.image = pygame.transform.rotate(self.image, 90)   

def draw(self, screen=None):
    if screen is None:
        screen = self.screen

    screen.blit(self.image, (self.rect.x, self.rect.y))

據我所知,您實際上是在每幀調用一次更新。

pygame.keys.get_pressed()如果確實按下了“ d”,則每幀返回“ d”。 更好地使用pygame.KEYDOWN和KEYUP事件的事件檢查。 僅在按下鍵並釋放后才觸發它們。

我建議將鍵盤映射添加到主程序類的構造函數(

def __init__(self):

部分)。

我現在僅將d鍵添加到我的示例中,您可以自己添加其他鍵。

self.keymap = {pygame.K_d: False}

然后還在主循環中檢查事件:

while running:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key in self.keymap:
                self.keymap[event.key] = True

        if event.type == pygame.KEYUP:
            if event.key in self.keymap:
                self.keymap[event.key] = False

按下鍵時僅一次觸發KEYDOWN,並且在按下鍵時不會在每一幀都返回True。 它將主類中的變量設置為True,您可以在其他類中使用該變量。

釋放密鑰時,也僅一次觸發KEYUP。 它將鍵映射中的變量重置為False,因此程序已准備好處理該鍵的下一個KEYDOWN事件。

檢查播放器的update方法中的變量:

if Main.keymap[K_d] == True:
    self.image = pygame.transform.rotate(self.image, 90)

這對您有用嗎?

// edit:再次說明這一點,並希望指出代碼中的問題所在:

pygame.keys.get_pressed

如果仍然按下該鍵,則每幀返回True,因此在按住該鍵的同時在每一幀中進行旋轉。

pygame.KEYDOWN

pygame.KEYUP

僅在按下或釋放鍵時才觸發一次,因此即使您一直按下該鍵也不會再次返回True。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM