Использование «рисования» для отображения спрайта на экране по какой-то причине не работает должным образом? - PullRequest
0 голосов
/ 25 апреля 2019

Я просматривал обучающее видео о создании класса (https://www.youtube.com/watch?v=vc1pJ8XdZa0)) и использовании этого класса для создания методов для врага / противника, которые будут использоваться позже в игре, и для перемещения этого персонажа. методы сработали, но он просто отображает изображение на экране: как будто оно постоянно отображается, затем удаляется (исчезает и снова появляется очень быстро), движение также по какой-то причине не работает.

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

x = 0
y = 407
height = 40
width = 87
vel = 5
isJump = False
jumpCount = 10
left = False
right = False
walkCount = 0
walkCount1 = 0
run = True

# === CLASSES === (CamelCase names)

class enemy(object):
    walkLeft1 = [ pygame.image.load("GB1.png"), pygame.image.load("GB2.png"), pygame.image.load("GB3.png"), pygame.image.load("GB4.png") ]
    walkRight1= []
    global vel
    global walkCount1
    for i in walkLeft1:
        walkRight1.append(pygame.transform.flip(i, True, False))

    for x in range(len(walkLeft1)):
        walkLeft1[x] = pygame.transform.smoothscale(walkLeft1[x], (372, 493))

    for x in range(len(walkRight1)):
        walkRight1[x] = pygame.transform.smoothscale(walkRight1[x], (372, 493))

    def __init__(self, x, y, width, height, end):
        global walkCount1
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.end = end
        self.path = [self.x, self.end]
        self.walkCount1 = 0
        self.vel = 3

    def draw(self, win):
        global walkCount1
        self.move()
        if self.walkCount1 + 1 <= 33:
            self.walkCount1 = 0

        """if self.vel > 0:
            DS.blit(self.walkRight1[self.walkCount1 //4], (self.x, self.y))
            self.walkCount1 += 1"""
        if self.vel > 0:
            DS.blit(self.walkLeft1[self.walkCount1 //4], (self.x, self.y))
            self.walkCount1 += 1


    def move(self):
        global walkCount1
        if self.vel > 0:
            if self.x + self.vel < self.path[1]:
                self.x += self.vel
            else:
                self.vel = self.vel * -1
                self.walkCount1 = 0
        else:
            if self.x - self.vel > self.path[0]:
                self.x += self.vel
            else:
                self.vel = self.vel * -1
                self.walkCount1 = 0
man = enemy(1400, 407, 96, 136, 22) 
def redrawGameWindow():
    global walkCount
    pygame.display.update()
    DS.blit(canyon,(0,0))
    lastMoved = "left"
    man.draw(DS) 
    if walkCount + 1 >= 27:
        walkCount = 0
    if left:
        DS.blit(walkLeft[walkCount//3],(x,y))
        walkCount +=1
        lastMoved = "left"
    elif right:
        DS.blit(walkRight[walkCount//3], (x,y))
        walkCount +=1
        lastMoved = "right"
    else: #this is when its moving neither left or right
        if lastMoved == "left":
            DS.blit(char2, (x, y))
        else:
            DS.blit(char, (x, y))



def fight_mode():
    fight = True
    arcade = False
    progress = 0
    global isJump, jumpCount
    global x,y, vel
    global width, height
    global left, right
    px, py, speed = HW, HH, 10
    if (pygame.mixer.get_busy() == True):
            pygame.mixer.music.stop()

    while fight:
        while(progress/4) < 100:
            event_handler()
            DS.fill(BLACK)
            time_count = (random.randint(1,1))
            increase = random.randint(1,20)
            progress += increase
            pygame.draw.rect(DS, green, [50, 700, 402, 29])
            pygame.draw.rect(DS, grey, [50, 701, 401, 27])
            if (progress/4) > 100:
                pygame.draw.rect(DS, green, [50, 700, 401, 28])
            else:
                pygame.draw.rect(DS, green, [50, 700, progress, 28])
            loading(progress/4)
            pygame.display.flip()

            time.sleep(0.2)
        pygame.display.update()


        CLOCK.tick(FPS)
        event_handler()
        redrawGameWindow()
        keys = pygame.key.get_pressed()

        if keys[pygame.K_LEFT] and x > vel:
            x -= vel
            left = True
            right = False
        elif keys[pygame.K_RIGHT] and x < W - width - vel:
            x+= vel
            right = True
            left = False
        else:
            right = False
            left = False
            walkCount = 0

        if not(isJump):
            if keys[pygame.K_SPACE]:
                isJump = True
        else:
            if jumpCount >= -10:
                neg = 1
                if jumpCount < 0:
                    neg = -1
                y-= (jumpCount ** 2) * 0.5 * neg
                jumpCount -= 1
            else:
                isJump = False
                jumpCount = 10

        pygame.display.update()

Я ожидаю, что спрайт будет нормально отображаться на экране, но фактическим выходом будет спрайт, который будет привязан, затем возвращен, затем снова подключен, и т. Д. Я не уверен, что пошло не так, но пока это происходит здесь. Кроме того, я не уверен, что это из-за этого, но движение также не работает.

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