Я пытался сделать дневной цикл в своей игре, но как только он превращается в ночь, он не вернется в день - PullRequest
0 голосов
/ 29 января 2019

для еще одной ошибки в моей игре, дневной цикл не будет работать, я попытался перевернуть, где: время = 0 идет, но не повезло, я посмотрел на проблему и нашел только способы сделать день / ночь для других языкови python не нравится, когда я пытаюсь автоматически изменить его на день с помощью других средств.

Как я описал, я попытался перевернуть, где:

Time = 0

входит:

elif Time >= 4800:
    Time = 0
    Raycast('Textures/Screens/Skybox/Earth',0,0,800,600)
    ReDisplayItem()

но не повезло, я даже пытался использовать операторы while, но python это не нравится.

import pygame

#2000,1001

pygame.init()

Screen = "None"

Sobj = "None"

Width = 800

Height = 600

Time = 0

Frame = pygame.display.set_mode((Width,Height))

pygame.display.set_caption("HypoPixel")

FPS = pygame.time.Clock()

def ReDisplayItem():
    if Sobj == "None":
    Raycast('Textures/Extra/ItemBox.png',0,0,160,160)
elif Sobj == "Loom":
    Raycast('Textures/Extra/IBO.png',0,0,160,160)
    Raycast('Textures/Blocks/loom_side.png',10,10,140,140)

def Raycast(TTR, RayXPos, RayYPos, RaySizeX, RaySizeY):
    RaycastThis = pygame.image.load(TTR)
    RaycastThis = pygame.transform.scale(RaycastThis,(RaySizeX,RaySizeY))
    Frame.blit(RaycastThis, (RayXPos, RayYPos))
Loop = True
Raycast('Textures/Screens/Skybox/Earth.png',0,0,800,600)
Raycast('Textures/Extra/ItemBox.png',0,0,160,160)
while Loop == True:
    Time = Time + 1
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
        if event.type == pygame.KEYDOWN:
            if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
                exit()
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_0:
                Raycast('Textures/Extra/ItemBox.png',0,0,160,160)
                Sobj = "None"
            elif event.type == pygame.KEYDOWN and event.key == pygame.K_1:
                Raycast('Textures/Blocks/loom_side.png',10,10,140,140)
                Sobj = "Loom"
    if Time >= 2400:
        Raycast('Textures/Screens/Skybox/EarthNight.png',0,0,800,600)
        ReDisplayItem()
    elif Time >= 4800:
        Time = 0
        Raycast('Textures/Screens/Skybox/Earth',0,0,800,600)
        ReDisplayItem()
    pygame.display.update()

FPS.tick(60) 

Я ожидал, что ночь превратится в день, но ночью она просто потемнела.

1 Ответ

0 голосов
/ 29 января 2019

Когда условие Time >= 4800 выполнено, то также выполняется Time >= 2400.

Список операторов в операторе elif никогда не выполняется, поскольку условие if вычисляется ранее и«выигрывает».

Таким образом, условие if должно быть Time >= 2400 and Time < 4800:

if Time >= 2400 and Time < 4800:
    Raycast('Textures/Screens/Skybox/EarthNight.png',0,0,800,600)
    ReDisplayItem()
elif Time >= 4800:
    Time = 0
    Raycast('Textures/Screens/Skybox/Earth',0,0,800,600)
    ReDisplayItem()

или порядок дел должен быть обратным:

if Time >= 4800:
    Time = 0
    Raycast('Textures/Screens/Skybox/Earth',0,0,800,600)
    ReDisplayItem()
elif Time >= 2400:
    Raycast('Textures/Screens/Skybox/EarthNight.png',0,0,800,600)
    ReDisplayItem()
...