Не удается получить объект Python Pygame для изменения направления - PullRequest
0 голосов
/ 12 ноября 2018

Я не могу заставить свой объект в Pygame изменить направление в моем коде.

import pygame

pygame.init()

width = 900
height = 700
background_image = pygame.image.load("board.png")
background_image = pygame.transform.scale(background_image, (900, 700))

virus_pic = pygame.image.load("virus.png")
trojanvirus_pic = pygame.image.load("trojan_virus.png")
armouredvirus_pic = pygame.image.load("armoured_virus.png")

antivirus_pic = pygame.image.load("antivirus.png")
trojanantivirus_pic = pygame.image.load("trojan_antivirus.png")
armouredantivirus_pic = pygame.image.load("armoured_antivirus.png")

screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Anti Virus")

#def anitvirus():

def virus(x_virus,y_virus):
    screen.blit(virus_pic, (x_virus, y_virus))

def intro():
    background_image = pygame.image.load("intro_background.png")
    background_image = pygame.transform.scale(background_image, (900, 700))
    logo_image = pygame.image.load("logo.png")
    logo_image = pygame.transform.scale(logo_image, (600, 200))

    pygame.display.update()
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
                pygame.quit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    main()

        screen.blit(background_image, (0, 0))
        screen.blit(logo_image, (width/2-300,100))

        pygame.display.update()

def main():
    x_virus = 0
    y_virus = 70

    pygame.display.update()
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
                pygame.quit()

        screen.blit(background_image, (0, 0))

        if x_virus != 320:
            x_virus += 1
            virus(x_virus,y_virus)

        if x_virus == 320:
            if y_virus != 400:
                y_virus += 1
                virus(x_virus,y_virus)

        if y_virus == 400:
            if x_virus != 500:
                x_virus += .5
                virus(x_virus,y_virus)

        if x_virus == 500:
            if y_virus != 10:
                y_virus -= 1
                virus(x_virus,y_virus)

Вот код, который делает движение в игре ^

        pygame.display.update()
intro()

Я не знаю, являются ли все операторы if наиболее эффективным способом сделать это. Я пробовал разные вещи, но заявления if, кажется, работают по большей части. Буду признателен за любую помощь. Спасибо.

1 Ответ

0 голосов
/ 12 ноября 2018

Вы не блеете изображение правильно. Давайте посмотрим на эту функцию:

def virus(x_virus,y_virus):
    screen.blit(virus_pic, (x_virus, y_virus))

Вы берете координаты x и y и пытаетесь перевести virus_pic в screen. дело в том, что вы не учитываете другую область видимости, вам нужно передать screen и virus_pic в качестве параметров, иначе ваша функция не будет знать, что они из себя представляют, поэтому измените вашу функцию так, чтобы она выглядела следующим образом

def virus(screen,virus_pic,x_virus,y_virus):
    screen.blit(virus_pic, (x_virus, y_virus))

, а затем измените соответствующий раздел кода в функции main(). Я позволил себе немного упростить его

    if x_virus != 320:
        x_virus += 1

    if x_virus == 320:
        if y_virus != 400:
            y_virus += 1

    if y_virus == 400:
        if x_virus != 500:
            x_virus += .5

    if x_virus == 500:
        if y_virus != 10:
            y_virus -= 1

    virus(screen,virus_pic,x_virus,y_virus)

Дайте мне знать, как это происходит!

EDIT:

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

Вам нужно найти способ сделать эти изменения динамичными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...