簡體   English   中英

對未在 pygame 中注冊的矩形坐標的更新?

[英]Updates to a rectangles co-ordinates not being registered in pygame?

我正在嘗試自學在 pygame 中編寫代碼,目前正在為家庭項目制作一個簡單的游戲。 我編寫的代碼認為它應該根據玩家的輸入在游戲循環的每次迭代中更新玩家矩形的坐標。 但是,矩形的坐標正在重置,而不是更改。 任何幫助,將不勝感激。

import pygame, sys

from pygame.locals import*
from sys import exit

pygame.init()

##Set up the colours
WHITE =(255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
ORANGE = (255, 165, 0)
PINK = (255, 192, 203)
YELLOW = (255, 255, 0)
KHAKI = (189, 183, 107)
MAGENTA = (255, 0, 255)

##Set up the window
WINDOWHEIGHT = 500
WINDOWWIDTH = 1000
screen = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption('Tower')


##Set up level variable    
level = 1

##Run game loop
while True:
    ##Check for quit event
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit(); sys.exit()


    ##Check for level
    if level == 1:
        screen.fill(WHITE)
        MOVESPEED = 10

    ##Enemy rectangles
        e1 = pygame.Rect(200, 0, 50, 100)
        e2 = pygame.Rect(250, 50, 50, 100) 
        e3 = pygame.Rect(300, 100, 50, 100)
        e4 = pygame.Rect(450, 250, 50, 100)
        e5 = pygame.Rect(500, 300, 50, 100)
        e6 = pygame.Rect(550, 350, 50, 100)

        enemies = [e1, e2, e3, e4, e5, e6]

    ##Draw enemy rectangles
        pygame.draw.rect(screen, RED, e1, 0)
        pygame.draw.rect(screen, RED, e2, 0)
        pygame.draw.rect(screen, RED, e3, 0)
        pygame.draw.rect(screen, RED, e4, 0)
        pygame.draw.rect(screen, RED, e5, 0)
        pygame.draw.rect(screen, RED, e6, 0)

    ##Player rectangle
        player = pygame.Rect(25, 25, 50, 50)

    ##Change keyboard variables

        if event.type == KEYDOWN:
            if event.key == K_LEFT or event.key == K_a:
                moveRight = False
                moveLeft = True
            if event.key == K_RIGHT or event.key == K_d:
                moveLeft = False
                moveRight = True
            if event.key == K_UP or event.key == K_w:
                moveDown = False
                moveUp = True
            if event.key == K_DOWN or event.key == K_s:
                moveUp = False
                moveDown = True
        if event.type == KEYUP:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
            if event.key == K_LEFT or event.key == K_a:
                moveLeft = False
            if event.key == K_RIGHT or event.key == K_d:
                moveRight = False
            if event.key == K_UP or event.key == K_w:
                moveUp = False
            if event.key == K_DOWN or event.key == K_s:
                moveDown = False    
    ##Move the player with the keyboard

        if event.type == KEYDOWN:
            if event.key == K_LEFT or event.key == K_a:
                player.left -= MOVESPEED
            if event.key == K_DOWN or event.key == K_s:
                player.top += MOVESPEED
            if event.key == K_RIGHT or event.key == K_d:
                player.left += MOVESPEED
            if event.key == K_UP or event.key == K_w:
                player.top -= MOVESPEED

    ##Check if player is in the window
        if player.top < 0:
    #The player has moved past the top
            player.top += 1

        if player.bottom > WINDOWHEIGHT:
    #The player has moved past the bottom
            player.top -= 1

        if player.left < 0:
    #The player has moved past the left side
            player.left += 1

        if player.right > WINDOWWIDTH:
    #The player has moved past the right side
            player.left -= 1

    #Draw player onto the screen
        pygame.draw.rect(screen, GREEN, player)
        pygame.display.flip()

您在每次循環迭代中一次又一次地定義敵人和玩家。 您需要定義一次。 然后更新並在循環中繪制它們。 這是您問題的解決方案。

我嘗試了一些更改的代碼。 為簡單起見,我刪除了您目前未使用的部分,並合並了一些 if 條件。

這是我的代碼:

import pygame, sys

from pygame.locals import *
from sys import exit


#SET UP
pygame.init()

WHITE =(255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

WINDOWHEIGHT = 500
WINDOWWIDTH = 1000
MOVESPEED = 10

e1 = pygame.Rect(200, 0, 50, 100)
e2 = pygame.Rect(250, 50, 50, 100) 
e3 = pygame.Rect(300, 100, 50, 100)
e4 = pygame.Rect(450, 250, 50, 100)
e5 = pygame.Rect(500, 300, 50, 100)
e6 = pygame.Rect(550, 350, 50, 100)

player = pygame.Rect(25, 25, 50, 50)

screen = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption('Tower')

##GAME LOOP
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()

            if (event.key == K_LEFT or event.key == K_a) and player.left > MOVESPEED:
                player.left -= MOVESPEED
                player.right -= MOVESPEED

            if (event.key == K_RIGHT or event.key == K_d) and player.right < WINDOWWIDTH - MOVESPEED:
                player.left += MOVESPEED
                player.right += MOVESPEED

            if (event.key == K_DOWN or event.key == K_s) and player.bottom < WINDOWHEIGHT - MOVESPEED:
                player.top += MOVESPEED
                player.bottom += MOVESPEED

            if (event.key == K_UP or event.key == K_w) and player.top > MOVESPEED:
                player.top -= MOVESPEED
                player.bottom -= MOVESPEED

    #DRAW SCREEN AT EACH ITERATION
    screen.fill(WHITE)

    pygame.draw.rect(screen, RED, e1, 0)
    pygame.draw.rect(screen, RED, e2, 0)
    pygame.draw.rect(screen, RED, e3, 0)
    pygame.draw.rect(screen, RED, e4, 0)
    pygame.draw.rect(screen, RED, e5, 0)
    pygame.draw.rect(screen, RED, e6, 0)

    pygame.draw.rect(screen, GREEN, player)

    pygame.display.flip()

暫無
暫無

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

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