Как скопировать целочисленную переменную в переменную stati c в python? - PullRequest
0 голосов
/ 04 апреля 2020

Я хотел, чтобы значок маркера появлялся в позиции курсора и оставался там, но я постоянно сталкивался с проблемой значка маркера, всегда следующей за позицией курсора и исчезающей, когда клавиша Z не нажата

Поскольку я уже знаю, что проблема в том, что позиция булавки и курсора обновляется с каждым кадром, я хотел спросить, как я могу сделать значок маркера статическим c, чтобы он был помещен в этот кадр. одно место и не будет двигаться с курсором.

Вот мой код для размещения маркера:

def drop_mark(self, screen, cursorx, cursory):
        Mark = pygame.image.load("Pin.Png").convert_alpha()
        if pygame.key.get_pressed()[pygame.K_z]:
            markx = cursorx
            marky = cursory
            screen.blit(Mark, (markx, marky))

И вот использование функции в коде:

def main():
    screen = pygame.display.set_mode((848, 480))
    clock = pygame.time.Clock()

    CursorSprite = pygame.image.load("WorldMapReticle.png").convert_alpha()
    WorldMapCursor = cursor(CursorSprite, 0, 0)
    while True:
        events = pygame.event.get()
        for e in events:
            if e.type == pygame.QUIT:
                return
        createScreen(screen)
        WorldMapCursor.render(screen)
        WorldMapCursor.move_right()
        WorldMapCursor.move_left()
        WorldMapCursor.move_down()
        WorldMapCursor.move_up()
        WorldMapCursor.drop_mark(screen, WorldMapCursor.x, WorldMapCursor.y)
        pygame.display.flip()
        clock.tick(60)

if __name__ == '__main__':
    main()

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Проблема в том, что вы определяете markx и marky в функции, все, что вам нужно сделать, это определить их вне функции. Затем обновите эти переменные один раз. Лично я бы не вставил if pygame.key.get_pressed()[pygame.K_z]: в функцию, но чтобы сделать это таким образом, я бы сделал следующее:

markx = 0
marky = 0
updated = false
def drop_mark(self, screen, cursorx, cursory):
        global markx, marky, updated
        Mark = pygame.image.load("Pin.Png").convert_alpha()
        if pygame.key.get_pressed()[pygame.K_z]:
            if updated == False:
                markx = cursorx
                marky = cursory
                updated = True
            screen.blit(Mark, (markx, marky))
1 голос
/ 04 апреля 2020

WorldMapCursor является экземпляром класса cursor. Вам совершенно не нужен аргумент cursorx и cursory, поскольку WorldMapCursor имеет атрибуты x и y, и вы можете получить к ним доступ с помощью self.x и self.y в любом методе экземпляра:
(См. Объекты метода , Объекты экземпляра и Атрибут экземпляра )

def drop_mark(self, screen):
        Mark = pygame.image.load("Pin.Png").convert_alpha()
        screen.blit(Mark, (self.x, self.y))

Переместить курсор, когда Z нажата:

WorldMapCursor = cursor(CursorSprite, 0, 0)
while True:
    events = pygame.event.get()
    for e in events:
        if e.type == pygame.QUIT:
            return

        createScreen(screen)
        WorldMapCursor.render(screen)
        if pygame.key.get_pressed()[pygame.K_z]:
            WorldMapCursor.move_right()
            WorldMapCursor.move_left()
            WorldMapCursor.move_down()
            WorldMapCursor.move_up()
        WorldMapCursor.drop_mark(screen)
        pygame.display.flip()
        clock.tick(60)
...