pygame:优化移动的小球

wokaoyan1981 2020-02-09 11:05:59
意图:让红色小球在蓝色背景上面随机移动。
问题:移动不流畅,而且好像只在左上-右下方向运动。

#1 ball.py
import pygame
from random import choice
from settings import Settings


class Ball():
def __init__(self, screen):
ai_settings = Settings()
self.screen = screen

self.image = pygame.image.load('images/ball.png')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()

self.rect.centerx = self.screen_rect.centerx
self.rect.centery = self.screen_rect.centery

self.x_values = [ai_settings.screen_width/2]
self.y_values = [ai_settings.screen_height/2]

def blitme(self):
self.screen.blit(self.image, self.rect)

def fill_walk(self):
x_direction = choice([1, -1])
x_distance = choice([30, 40])
x_step = x_direction * x_distance

y_direction = choice([-1, 1])
y_distance = choice([ 30, 40])
y_step = y_direction * y_distance

next_x = self.x_values[-1] + x_step
next_y = self.y_values[-1] + y_step

self.x_values.append(next_x)
self.y_values.append(next_y)

def update(self):
self.rect.centerx = self.x_values[-1]
self.rect.centery = self.x_values[-1]


#2 moving_ball.py


import pygame
import sys
from settings import Settings
from ball import Ball
import game_functions as gf


class MovingBall():


def run_game(self):
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width,
ai_settings.screen_height))
pygame.display.set_caption("Moving Ball")
ball = Ball(screen)

while True:
gf.check_events()
ball.fill_walk()
ball.update()
gf.update_screen(ai_settings, screen, ball)


moving_ball = MovingBall()
moving_ball.run_game()


#3 game_functions.py
import sys
import pygame

def check_events():
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()

def update_screen(ai_settings, screen, ball):
screen.fill(ai_settings.bg_color)
ball.blitme()
pygame.display.flip()


#4 settings.py

class Settings():
def __init__(self):
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (80, 166, 209)
...全文
203 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wokaoyan1981 2020-02-10
  • 打赏
  • 举报
回复
引用 1 楼 冰风漫天 的回复:
#1 ball.py def update(self): self.rect.centerx = self.x_values[-1] self.rect.centery = self.x_values[-1] 这个应该是self.y_values
的确是,我太粗心大意了。
冰风漫天 2020-02-10
  • 打赏
  • 举报
回复
#1 ball.py def update(self): self.rect.centerx = self.x_values[-1] self.rect.centery = self.x_values[-1] 这个应该是self.y_values

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧