Python和Pygame值正在更新,但代码未考虑更新?

Python和Pygame值正在更新,但代码未考虑更新?,python,function,class,methods,pygame,Python,Function,Class,Methods,Pygame,我想请你帮忙。我正在学习关于创建外星人游戏的教程,但我对它做了一点修改,无法让它正常工作。我在settingspyfile中有速度值。我在方法增加速度中修改它,并打印它(它实际上像我希望的那样增长)。但是外星人的速度还是一样的。我不明白为什么它不起作用。也许有人能给我指出正确的方向吗 settings.py: 导入pygame 分辨率_宽度=1280 分辨率\高度=720 课程设置: “”“用于存储空间影响的所有设置的类。”“” 定义初始化(自): “”“初始化游戏的静态设置。”“” #屏幕设置

我想请你帮忙。我正在学习关于创建外星人游戏的教程,但我对它做了一点修改,无法让它正常工作。我在
settings
pyfile中有速度值。我在方法
增加速度
中修改它,并打印它(它实际上像我希望的那样增长)。但是外星人的速度还是一样的。我不明白为什么它不起作用。也许有人能给我指出正确的方向吗

settings.py:

导入pygame
分辨率_宽度=1280
分辨率\高度=720
课程设置:
“”“用于存储空间影响的所有设置的类。”“”
定义初始化(自):
“”“初始化游戏的静态设置。”“”
#屏幕设置
#此行用于避免错误:未设置视频模式
self.screen=pygame.display.set_模式((0,0))
self.screen\u width=分辨率\u width
self.screen\u height=分辨率\u height
self.bg_image=pygame.image.load(“images/background_1.png”).convert()
#项目符号设置
self.bullet\u速度=self.screen\u宽度*0.01
self.bullet\u width=self.screen\u width*0.02
self.bullet\u height=self.screen\u height*0.02
self.bullet_color=(0,0,0)
#游戏加速的速度有多快
自加速\刻度=999
#船舶设置
自限值=3
self.initialize\u动态\u设置()
def初始化动态设置(自身):
self.alien_速度=self.screen_宽度*0.003
def增加速度(自):
“”“增加速度设置。”“”
self.alien\u速度*=self.speedup\u刻度
打印(自身速度)
alien.py:

导入pygame
从pygame.sprite导入sprite
从设置导入设置
随机输入
类外星人(精灵):
“”“一个类,用于表示单个外来项。”“”
定义初始(自身、空间影响):
“”“初始化外星人并设置它的起始位置。”“”
super()。\uuuu init\uuuuu()
self.screen=空间\碰撞屏幕
self.settings=settings()
#加载外来图像并设置其rect属性。
self.index=0
self.timer=0
self.image=[]
self.image.append(pygame.image.load('images/alien_1.png'))
self.image.append(pygame.image.load('images/alien_2.png'))
self.image=self.image[self.index]
self.image=pygame.transform.scale(self.image,(80*int)(self.settings.screen_width*0.0019),
40*int(自我设置屏幕宽度*0.0019)))
self.rect=self.image.get_rect()
随机高度=随机均匀(0.01,0.85)
随机宽度=随机均匀(1.1,2)
self.rect.x=int(self.settings.screen\u width*random\u width)
self.rect.y=int(self.settings.screen\u height*random\u height)
#存储外星人的准确水平位置。
self.x=float(self.rect.x)
def更新(自我):
“”“将外星人移到左侧。”“”
self.x-=self.settings.u速度
self.rect.x=self.x
如果self.timer>=0且self.timer=26且self.timer<50:
自动定时器+=1
self.index=1
其他:
self.timer=0
如果self.index==0:
self.image=pygame.image.load(“images/alien_1.png”)
如果self.index==1:
self.image=pygame.image.load(“images/alien_2.png”)
self.image=pygame.transform.scale(self.image,(80*int)(self.settings.screen_width*0.0019),
40*int(self.settings.screen_width*0.0019)))
编辑:当然,在我的主文件中,我正在调用函数
self.settings。提高速度()


编辑2:

import pygame

resolution_width = 1280
resolution_height = 720

class Settings:
    """A class to store all settings for Space Impact."""

    screen_width = resolution_width
    alien_speed = screen_width * 0.003
    speedup_scale = 3
    alien_speed *= speedup_scale

    def __init__(self):
        """Initialize the game's static settings."""
        # Screen settings
        # This line is needed to avoid error: No video mode has been set
        self.screen = pygame.display.set_mode((0, 0))
        self.screen_width = resolution_width
        self.screen_height = resolution_height
        self.bg_image = pygame.image.load("images/background_1.png").convert()

        # Bullet settings
        self.bullet_speed = self.screen_width*0.01
        self.bullet_width = self.screen_width*0.02
        self.bullet_height = self.screen_height*0.02
        self.bullet_color = (0, 0, 0)

        # How quickly the game speeds up
        self.speedup_scale = 3
        # Ship Settings
        self.ships_limit = 3




    def increase_speed(self):
        """Increase speed settings."""
        global alien_speed
        global speedup_scale
        alien_speed *= speedup_scale
        print(self.alien_speed)
编辑3:


多亏了你的评论,我成功地修复了它。谢谢:)

Settings
似乎包含全局设置,但每个
Alien
都创建自己的
设置实例:

类外星人(精灵):
“”“一个类,用于表示单个外来项。”“”
定义初始(自身、空间影响):
# [...]
self.settings=settings()
这意味着每个
Alien
都有自己的
设置
,因此
Alien\u速度

您必须更新
Alien
的每个实例中的设置,这意味着您必须分别为每个
Alien
调用
rease\u speed()

或者只需将
设置的单个实例传递给
外星人
。这就足以更新singleton实例:

class Alien(Sprite):
    """A class to represent a single alien."""

    def __init__(self, space_impact, settings):
        """Initialize alien and set it's starting position."""
        super().__init__()
        self.screen = space_impact.screen
        self.settings = settings
        # [...]
在“main”中:

alien=alien(空间碰撞,自我设置)

另一个选项是将类
设置的属性设置为。实例属性对于每个实例都是唯一的,但类属性由所有实例共享。

设置
似乎包含全局设置,但每个
外来
创建自己的
设置
实例:

类外星人(精灵):
“”“一个类,用于表示单个外来项。”“”
定义初始(自身、空间影响):
# [...]
self.settings=settings()
这意味着每个
Alien
都有自己的
设置
,因此
Alien\u速度

您必须更新
Alien
的每个实例中的设置,这意味着您必须分别为每个
Alien
调用
rease\u speed()

或者只需将
设置的单个实例传递给
外星人
。这就足以更新singleton实例:

class Alien(Sprite):
    """A class to represent a single alien."""

    def __init__(self, space_impact, settings):
        """Initialize alien and set it's starting position."""
        super().__init__()
        self.screen = space_impact.screen
        self.settings = settings
        # [...]
在“main”中:

alien=alien(空间碰撞,自我设置)

另一个选项是将类
设置的属性设置为。实例属性对于每个实例都是唯一的,但是类属性由所有实例共享。

我看到的实例函数看起来像t