【问题标题】:how would I go about moving a piece in my pygame game using the x and y coordinates我将如何使用 x 和 y 坐标在我的 pygame 游戏中移动一块
【发布时间】:2020-08-24 23:41:18
【问题描述】:

我需要帮助将棋子移动到特定坐标。 这是我的代码中移动一块的部分:

    screen.blit(mountain, (300, 500))
    screen.blit(mountain, (300, 400))
def enemy_castle():
    castle = pygame.image.load('castle.png')
    castle = pygame.transform.scale(castle, (100, 100))
    screen.blit(castle, (0, 500))
def player_castle():
    castle = pygame.image.load('castle.png')
    castle = pygame.transform.scale(castle, (100, 100))
    screen.blit(castle, (500, 0))
def enemy_sorcerer():
    s_piece = pygame.image.load('sorcerer.png')
    s_piece = pygame.transform.scale(s_piece, (100, 100))
    screen.blit(s_piece, (400, 0))
    screen.blit(s_piece, (500, 100))

【问题讨论】:

  • 制作象棋一样的游戏

标签: python-3.x image animation pygame mouse


【解决方案1】:

所以你有一个图像,需要绘制到一个特定的位置。因此,不要“硬编码”(500, 0),而是开始将其存储在变量中。

PyGame Rect 类非常适合这个,因为它也可以与blit() 函数一起使用,并且已经有一堆handy collision functions

您可以创建一个 Rect,只需向图像询问其 Rect - 除非它位于 (0,0),因为图像没有位置概念。

castle_image = pygame.image.load('castle.png').convert_alpha()
castle_image = pygame.transform.scale(castle_image, (100, 100))
castle_rect  = castle_image.get_rect()
castle_rect.topleft = ( 500, 0 )
screen.blit( castle_image, castle_rect )

所以现在变量castle_rect 将类似于[ x=500, y=0, width=100, height=100 ]

要移动图片的绘制位置,现在只需调整castle_rect的坐标,例如:

castle_rect.x += 10
castle_rect.y += 100
screen.blit( castle_image, castle_rect )

或者,通过再次重置其坐标来移动整个图像:

castle_rect.topleft = ( 200, 200 )
screen.blit( castle_image, castle_rect )

更有效的方法是在启动时加载和缩放图像一次,然后将它们全部绘制在当前矩形位置的主循环内。

def loadImageWithScale( image_filename, size=(100,100) ):
    """ Load the given image file, then rescale the image to size """
    new_image = pygame.image.load( image_filename ).convert_alpha()
    new_image = pygame.transform.scale( new_image, size )
    return new_image

def getImageRectAt( image, position ):
    return image.get_rect( topleft=position )

# Load images
enemy_castle   = loadImageWithScale( 'castle.png' )
enemy_sorcerer = loadImageWithScale( 'sorcerer.png' )
player_castle  = loadImageWithScale( 'castle.png' )

# Set initial positions
enemy_castle_rect   = getImageRectAt( enemy_castle,   ( 0, 500 ) )
enemy_sorceror_rect = getImageRectAt( enemy_sorceror, ( 400, 0 ) )
player_castle_rect  = getImageRectAt( player_castle,  ( 500, 0 ) )

### Main Loop
clock = pygame.time.Clock()
exiting = False
while not exiting:

    # Handle user-input
    for event in pygame.event.get():
        if ( event.type == pygame.QUIT ):
            exiting = True

    # Update the window, but not more than 60fps
    window.fill( ( 128, 128, 128 ) )
    window.blit( enemy_castle,   enemy_castle_rect )
    window.blit( enemy_sorceror, enemy_sorceror_rect )
    window.blit( player_castle,  player_castle_rect )

    pygame.display.flip()

    # Clamp FPS
    clock.tick_busy_loop( 60 )

pygame.quit()

可能当你得到更多的屏幕元素时,你可以将它们排列成方便的列表,以使绘图代码更简洁。

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多