[英]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.