【问题标题】:Eric Matthes alien invasion project, ship will not stay on screenEric Matthes 外星人入侵项目,飞船不会停留在屏幕上
【发布时间】:2020-05-06 14:21:57
【问题描述】:

我正在研究外星人入侵项目 1,并尝试编写代码来限制飞船的移动,使其停留在屏幕上。然而,这并没有发生。我可以让程序以零错误运行,但船不会留在屏幕上。专门限制船只移动的部分在def update(self):

任何帮助都会很棒,谢谢大家!

import pygame 

class Ship():

    def __init__(self, ai_settings, screen):
        # initialize the ship and set its starting position
        self.screen = screen
        self.ai_settings = ai_settings

        # load the ship image and get its rect
        self.image = pygame.image.load('alien_invasion/ship.bmp')
        self.rect = self.image.get_rect()
        self.screen_rect = screen.get_rect()

        self.rect.centerx = self.screen_rect.centerx
        self.rect.bottom = self.screen_rect.bottom

        # start each new ship at the center of the bottom of the screen
        self.center = float(self.rect.centerx)

        # movement flag 
        self.moving_right = False
        self.moving_left = False

    def update(self):
        # update the ships position based on the movement flag
        # update the ships center value, not the rect
        if self.moving_right and self.rect.right < self.screen_rect.right:
            self.center += self.ai_settings.ship_speed_factor
        if self.moving_left and self.rect.left > 0:
            self.center -= self.ai_settings.ship_speed_factor

        # update rect object from self.center
        self.rect.centerx = self.center

    def blitme(self):
        # draw ship at current location
        self.screen.blit(self.image, self.rect)

【问题讨论】:

    标签: python python-3.x visual-studio function pygame


    【解决方案1】:

    我将self.rect.centerx = self.center 放在def update(self): 的开头和结尾,一切似乎都按照设计的方式工作。我仍然不确定为什么书中的代码示例不会产生与下面显示的答案相同的结果。再有洞察力会很棒!

    import pygame 
    
    class Ship():
    
        def __init__(self, ai_settings, screen):
            # initialize the ship and set its starting position
            self.screen = screen
            self.ai_settings = ai_settings
    
            # load the ship image and get its rect
            self.image = pygame.image.load('alien_invasion/ship.bmp')
            self.rect = self.image.get_rect()
            self.screen_rect = screen.get_rect()
    
            self.rect.centerx = self.screen_rect.centerx
            self.rect.bottom = self.screen_rect.bottom
    
            # start each new ship at the center of the bottom of the screen
            self.center = float(self.rect.centerx)
    
            # movement flag 
            self.moving_right = False
            self.moving_left = False
    
        def update(self):
            self.rect.centerx = self.center
            # update the ships position based on the movement flag
            # update the ships center value, not the rect
            if self.moving_right and self.rect.right < self.screen_rect.right:
                self.center += self.ai_settings.ship_speed_factor
            if self.moving_left and self.rect.left > 0:
                self.center -= self.ai_settings.ship_speed_factor
    
            # update rect object from self.center
            self.rect.centerx = self.center
    
        def blitme(self):
            # draw ship at current location
            self.screen.blit(self.image, self.rect)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-04
      • 2020-10-22
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多