Как заставить шар непрерывно перемещаться по краю экрана? (Python 2.7)

#python #python-2.7 #pygame

#python #python-2.7 #pygame

Вопрос:

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

 #-------------------------------------------------------------------------------
# Name:        U1A4.py
# Purpose:     To animate the ball going around the edge of the screen
#-------------------------------------------------------------------------------

import pygame
import sys
pygame.init()

# Screen
screenSize = (800,600)
displayScreen = pygame.display.set_mode(screenSize,0)
pygame.display.set_caption("Animation Assignment 1")

# Colours
WHITE = (255,255,255)
GREEN = (0,255,0)
RED = (255,0,0)
BLUE = (0,0,255)

displayScreen.fill(WHITE)
pygame.display.update()

# ----------------- Leave animation code here ---------------------------------#

# THU/09/29
# Need to complete the last turn with the ball

x = 50
y = 50
dx = 0
dy = 2
stop = False
while not stop:
    for event in pygame.event.get():
        if event.type ==pygame.QUIT:
            stop = True

    displayScreen.fill(WHITE)

    x = x   dx
    y = y   dy

    if (x>=750):
            dx = 0
            dy = -2

    if (y>=550)and dy>0:
            dy = 0
            dx = 2

    if (x>=750)and dy>0:
            dy = 0
            dx = 2

    if (y>=550)and dy>0:
            dx = 0
            dy = -2


    pygame.draw.circle(displayScreen, GREEN, (x,y),50, 0)
    pygame.display.update()

pygame.quit()
sys.exit()
  

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

Комментарии:

1. Что не так с вашим кодом?

Ответ №1:

Вот мой взгляд на вашу проблему:

 import sys, pygame
pygame.init()
size = width, height = 800, 800
speed = [1, 0]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("ball.bmp")
ballrect = ball.get_rect()
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()
    ballrect = ballrect.move(speed)
    if ballrect.right > width:
        speed = [0, 1]
    if ballrect.left < 0:
        speed = [0, -1]
    if (ballrect.bottom > height) and not (ballrect.left < 0):
        speed = [-1,0]
    if (ballrect.top < 0) and not (ballrect.right > width):
        speed = [1, 0]
    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()
  

Меня немного тошнит.

Редактировать — использовал это для ball.bmp:

http://everitas.rmcclub.ca/wp-content/uploads/2007/11/soccer_ball_1.bmp

Ответ №2:

Шар меняет направление только в углах, поэтому вам просто нужно покрыть четыре случая (два if вложенных в два if ):

 x  = dx
y  = dy

if x >= 750:
  if y >= 550:
    dx = 0
    dy = -2
  elif y <= 50:
    dx = -2
    dy = 0
elif x <= 50:
  if y >= 550:
    dx = 2
    dy = 0
  elif y <= 50:
    dx = 0
    dy = 2