python - 雨滴往右,除了往下
问题描述
我正在用我的python书做练习,我需要从上到下制作雨滴,当它落在屏幕后面时,它会重新开始。但是使用我的代码,我的雨从左到右,并且不重置,所以它是双重失败,在我给出两个代码 game_functions 和雨滴下,我打开它的主代码只有这些与其他代码的连接。
gf.update_raindrops(ai_settings, raindrops)
raindrops = Group()
gf.create_grid(ai_settings, screen, ship, raindrops)
游戏功能.py
def get_number_raindrops_x(ai_settings, rain_width):
available_space_x = ai_settings.screen_width
number_raindrops_x = int(available_space_x / (2 * rain_width))
return number_raindrops_x
def get_number_rows_rains(ai_settings, ship_height, rain_height):
available_space_y = ai_settings.screen_height
number_rows = int(available_space_y / rain_height)
return number_rows
def create_raindrop(ai_settings, raindrops, screen, raindrop_number, row_number):
raindrop = Raindrop(ai_settings, screen)
raindrop.x = raindrop.rect.width + 2 * raindrop.rect.width * raindrop_number
raindrop.rect.x = raindrop.x
raindrop.y = raindrop.rect.height + 2 * raindrop.rect.height * row_number
raindrop.rect.y = raindrop.y
raindrops.add(raindrop)
def create_grid(ai_settings, screen, ship , raindrops):
raindrop = Raindrop(ai_settings, screen)
number_raindrops_x = get_number_raindrops_x(ai_settings, raindrop.rect.width)
number_rows = get_number_rows_rains(ai_settings, ship.rect.height, raindrop.rect.height)
for row_number in range(number_rows):
for raindrop_number in range(number_raindrops_x):
create_raindrop(ai_settings, raindrops, screen, raindrop_number, row_number)
def check_grid_edges(ai_settings, raindrops):
for raindrop in raindrops.sprites():
if raindrop.check_edges():
change_grid_direction(ai_settings, raindrops)
break
def change_grid_direction(ai_settings, raindrops):
for raindrop in raindrop.sprites():
raindrop.rect.y == ai_settings.rain_drop_speed
def update_raindrops(ai_settings, raindrops):
check_grid_edges(ai_settings, raindrops)
raindrops.update()
雨.py
import pygame
from pygame.sprite import Sprite
class Raindrop(Sprite):
def __init__(self, ai_settings, screen):
super(Raindrop, self).__init__()
self.screen = screen
self.ai_settings = ai_settings
self.image = pygame.image.load('/Users/dominikkolber/Desktop/graphic/drop.png')
self.rect = self.image.get_rect()
self.rect.x = self.rect.width
self.rect.y = self.rect.height
self.x = float(self.rect.x)
def blitme(self):
self.screen.blit(self.image, self.rect)
def check_edges(self):
screen_rect = self.screen.get_rect()
if self.rect.bottom >= screen_rect.bottom:
return True
def update(self):
self.x += (self.ai_settings.rain_drop_speed)
self.rect.x = self.x
解决方案
如果你想让雨落而不是从左到右移动,你必须改变y
坐标而不是x
坐标:
class Raindrop(Sprite):
def __init__(self, ai_settings, screen):
# [...]
self.y = float(self.rect.y)
# [...]
def update(self):
self.y += (self.ai_settings.rain_drop_speed)
self.rect.y = self.y
y
如果雨滴落到底部,您需要通过更改单个雨滴的属性在顶部重新启动它:
def check_grid_edges(ai_settings, raindrops):
for raindrop in raindrops.sprites():
if raindrop.check_edges():
raindrop.y = 0
推荐阅读
- jquery - 将 Web Pack 输出为库
- sql - 结合数据透视表计算比率
- php - 是否可以在 Symfony 控制台中将参数作为命名空间传递?
- gitlab - 错误:合并失败:合并期间出现问题:3:US-ASCII 中的字节序列无效。请再试一次。在 GitLab 上
- matrix - 在 ThreeJS 中绘制镜像对象
- flutter - 在 Flutter 中将 JSON 作为字符串处理
- apache-flink - Beam WordCount TaskManagerFailure NoClassDefFoundError for MetricUpdates$MetricUpdate
- javascript - Deviantart 的 Greasemonkey/Tempermonkey 脚本
- python - 如何对具有n个元素的数组进行排序,其中k个元素在O(n + k log k)中不合适?
- python - 当日期和时间是整数时,如何使用 Pandas 获取 DateTime 对象?