Как я могу перетащить изображение на экран, где я нажимаю после нажатия кнопки - PullRequest
1 голос
/ 02 мая 2020

Я создаю игру в пигмеи. Мне нужно иметь возможность размещать танки на экране после того, как я нажму на кнопку танка в нижней части моего экрана.

В настоящее время я жестко запрограммировал позицию спавна, но я не могу разместить танк в позиции щелчка (после нажатия на кнопку танка)

def spawn_tank():
    tank = pygame.image.load("tank.png")
    screen.blit(tank, (250, 350))

Это мой функция основного кода

spawner = False

def main():
    global new_tanks
    global spawner
    run = True
    fps = 90
    tanks = Button((59, 255, 140), 100, 610, 80, 80, text = "Tanks")
    towers = Button((59, 255, 140), 510, 610, 150, 80, text = "Towers")

    blue = pygame.image.load("blue_base.png")
    red = pygame.image.load("red_base.png")

    while run:

        mx, my = pygame.mouse.get_pos()
        pos = (mx, my)
        screen.fill((50, 168, 66))
        x = pos[0]
        y = pos[1]
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

            pygame.draw.rect(screen, (201, 142, 47), (0, 600, 1000, 100))
            pygame.draw.line(screen, (0, 0, 0), (500,0), (500, 600))
            tanks.draw(screen)
            towers.draw(screen)

            tanks = Button((59, 255, 140), 100, 610, 80, 80, text="Tanks")
            mx, my = pygame.mouse.get_pos()
            mouse_pos = (mx, my)

            if tanks.isOver(mouse_pos):
                tanks = Button((0, 255, 0), 100, 610, 80, 80, text="Tanks")
                tanks.draw(screen)
                if event.type == pygame.MOUSEBUTTONDOWN:
                    spawner = True


            else:
                tanks = Button((59, 255, 140), 100, 610, 80, 80, text="Tanks")
                tanks.draw(screen)

            towers = Button((59, 255, 140), 510, 610, 150, 80, text="Towers")
            mx, my = pygame.mouse.get_pos()
            mouse_pos = (mx, my)

            if towers.isOver(mouse_pos):
                towers = Button((0, 255, 0), 510, 610, 150, 80, text="Towers")
                towers.draw(screen)

            else:
                towers = Button((59, 255, 140), 510, 610, 150, 80, text="Towers")
                towers.draw(screen)
            if spawner:
                spawn_tank()


            screen.blit(blue, (0, 100))
            screen.blit(red, (800, 100))

            pygame.display.flip()
            clock.tick(fps)

Мне нужна помощь с размещением танка на экране (где бы я ни щелкал) после нажатия на кнопку танка.

1 Ответ

1 голос
/ 02 мая 2020

screen.blit(tank,pygame.mouse.get_pos()) закрывает бак в позиции мыши. Но это не удовлетворит тебя. Вы должны сохранить положение мыши в списке и перетаскивать танки в главном приложении. L oop.

Добавить список позиций танков и добавить позицию мыши в список, когда появится благодарность:

tank_pos_list = []

def spawn_tank():
    global tank_pos_list 
    tank_pos_list.append(pygame.mouse.get_pos()) 

Нарисуйте резервуары в главном приложении l oop:

def main():
    # [...]

    tank_surf = pygame.image.load("tank.png")

    while run:

        # [...]

        for tank_pos in tank_pos_list:
            screen.blit(tank, tank_pos)

Когда кнопка нажата, установите spawner. Если кнопка нажата и установлена ​​spawner, добавьте новый резервуар. Обратите внимание, вы должны добавить некоторый код, который оценивает его, когда второй щелчок находится в игровой области, но это задача, которую вы должны решить самостоятельно.

if event.type == pygame.MOUSEBUTTONDOWN:
    if spawner:
        spawn_tank()
        spawner = False
    if tanks.isOver(mouse_pos):
        spawner = True

Рекомендую разделить обработку событий и отрисовку объектов. Нарисуйте все объекты в главном приложении l oop, а не в событии l oop:

def main():
    global new_tanks
    global spawner
    run = True
    fps = 90
    tanks = Button((59, 255, 140), 100, 610, 80, 80, text = "Tanks")
    tanks_over = Button((0, 255, 0), 100, 610, 80, 80, text="Tanks")
    towers = Button((59, 255, 140), 510, 610, 150, 80, text = "Towers")
    towers_over = Button((0, 255, 0), 510, 610, 150, 80, text="Towers")

    blue = pygame.image.load("blue_base.png")
    red = pygame.image.load("red_base.png")
    tank_surf = pygame.image.load("tank.png")

    spawner = False

    while run:

        mx, my = pygame.mouse.get_pos()
        pos = (mx, my)
        x = pos[0]
        y = pos[1]

        mouse_pos = (mx, my)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

            if event.type == pygame.MOUSEBUTTONDOWN:
                if spawner:
                    spawn_tank()
                    spawner = False
                if tanks.isOver(mouse_pos):
                    spawner = True

        screen.fill((50, 168, 66))

        pygame.draw.rect(screen, (201, 142, 47), (0, 600, 1000, 100))
        pygame.draw.line(screen, (0, 0, 0), (500,0), (500, 600))

        if tanks.isOver(mouse_pos):
            tanks_over.draw(screen)
        else:
            tanks.draw(screen)

        if towers.isOver(mouse_pos):
            towers_over.draw(screen)
        else:
            towers.draw(screen)

        screen.blit(blue, (0, 100))
        screen.blit(red, (800, 100))

        for tank_pos in tank_pos_list:
            screen.blit(tank_surf, tank_pos)

        pygame.display.flip()
        clock.tick(fps)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...