#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