python对象停止在边界移动

时间:2018-01-08 18:31:18

标签: python pygame

我正在尝试,我试图让一个圆圈沿着一条线移动,但一旦到达屏幕边缘就停止。一旦发生这种情况,我就不能再回头了。可能只是一个我没有看到的简单修复,让某人指出我正确的方向会很有帮助。请记住我还是初学者。

from pygame import *
import random
import math
import os #Displays the pygame window at the top left of the screen
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d, %d" %(0,25)

init() #Starts pygame
font.init()
LENGTH = 1000 #Creates Screen that is 1000 X 700
WIDTH = 700
SIZE = (LENGTH, WIDTH)
Screen = display.set_mode(SIZE)

#Defines colours
BLACK = (0,0,0)
WHITE = (255,255,255)
RED = (255,0,0)

running = True
CaptainY = 350
Key = 0

while running:
    for evnt in event.get(): # checks all events that happen
        if evnt.type == QUIT: # if event type is quit the program stops running
            running = False
        if evnt.type == KEYDOWN:
            Key = evnt.key
        if evnt.type == KEYUP:
            Key = 0

    if 20 < CaptainY < 680:
        if Key == K_UP:
            CaptainY -= 5
        if Key == K_DOWN:
            CaptainY += 5    

    draw.rect(Screen, BLACK, (0,0, LENGTH, WIDTH))
    draw.circle(Screen, WHITE, (950, CaptainY), 15)

    if Key == K_ESCAPE:
        print(CaptainY)

    display.flip()

quit()

1 个答案:

答案 0 :(得分:2)

该程序正在执行您所说的操作:仅当y位置介于20和680之间时才移动。如果它小于20,则此条件不会是True并且圈子不再能够移动了。

# You only move if this is True.
if 20 < CaptainY < 680:

不要停止移动,而应该向后移动位置,以便圆圈最终停留在屏幕上。这是一个完整的例子,还有一些更改:

import pygame  # Avoid * imports, since they make code harder to read and cause bugs.

pygame.init()
screen = pygame.display.set_mode((1000, 700))
HEIGHT = screen.get_height()

BLACK = (0,0,0)
WHITE = (255,255,255)
clock = pygame.time.Clock()  # Use a clock to limit the frame rate.
running = True
captain_y = 350
captain_radius = 15

while running:
    # Handle events.
    for evnt in pygame.event.get():
        if evnt.type == pygame.QUIT:
            running = False
        elif evnt.type == pygame.KEYDOWN:
            if evnt.key == pygame.K_ESCAPE:
                running = False

    # To see if a key is being held down, use `pygame.key.get_pressed()`.
    pressed_keys = pygame.key.get_pressed()
    # Move if up or down keys are pressed.
    if pressed_keys[pygame.K_UP]:
        captain_y -= 5
    elif pressed_keys[pygame.K_DOWN]:
        captain_y += 5

    # Update the game.
    # Reset the position if the circle is off screen.
    if captain_y - captain_radius <= 0:
        captain_y = 0 + captain_radius
    elif captain_y + captain_radius >= HEIGHT:
        captain_y = HEIGHT - captain_radius

    # Draw everything.
    screen.fill(BLACK)
    pygame.draw.circle(screen, WHITE, (950, captain_y), captain_radius)

    pygame.display.flip()
    clock.tick(60)  # Cap the frame rate at 60 fps.

pygame.quit()