微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

雨滴往右走,除了往下

如何解决雨滴往右走,除了往下

我正在用我的python书做练习,我需要从上到下制作雨滴,当它落在屏幕后面时,它会重新开始。但是在我的代码中,我的雨从左到右,并且没有重置,所以它是双重失败,在我给出两个代码 game_functions 和raindrop 下,我打开它的主代码只有这些与其他代码的连接。

 gf.update_raindrops(ai_settings,raindrops)
raindrops = Group()
gf.create_grid(ai_settings,screen,ship,raindrops)

game_functions.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,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,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,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()

rain.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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。