<Python编程>外星人入侵游戏练习踩的坑

<Python编程>

外星人入侵游戏编程练习

1.键盘不动事件

找了半天,找不到键盘按下,飞船不动是什么原因,然后仔细对照自己的代码和书上的代码,发现事件监听错误,如下:

game_functions:

import sys

import pygame

def check_events(ship):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.event == pygame.K_RIGHT:
                # ship.rect.centerx += 100
                ship.moving_right = True
            elif event.event == pygame.K_LEFT:
                ship.moving_left = True
        elif event.type == pygame.KEYUP:
            if event.event == pygame.K_RIGHT:
                ship.moving_right = False
            elif event.event == pygame.K_LEFT:
                ship.moving_left = False
def update_screen(ai_settings, screen, ship):
    screen.fill(ai_settings.bg_color)
    ship.blitme()
    pygame.display.flip()

错误原因分析:

在pygame中,键盘是否按下监听事件是通过 event.type 事件;

而具体按键事件是要通过 event.key事件;

并且在重构ship类代码时也犯了错误:

下面代码时正确的,之前犯的错误是在update()方法中,更新的仍是rect属性,而不是新加的center属性.

import pygame

class Ship():

    def __init__(self, ai_settings, screen):
        #初始化飞船位置
        self.screen = screen
        self.ai_settings = ai_settings

        self.image = pygame.image.load('images/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

        self.center = float(self.rect.centerx)

        self.moving_right = False
        self.moving_left = False

    def update(self):
        if self.moving_right:
            self.center += self.ai_settings.ship_speed_factor
        elif self.moving_left:
            self.center -= self.ai_settings.ship_speed_factor
        self.rect.centerx = self.center

    def blitme(self):
        self.screen.blit(self.image, self.rect)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,538评论 1 11
  • 总体目录 1.1、项目准备 1.2、使用 pygame 创建图形窗口 1.3、理解 图像 并实现图像绘制 1.4...
    IIronMan阅读 6,356评论 2 19
  • 这次呢,让我们重温一下儿时的乐趣,用Python做一个飞机大战的小游戏。接下来,让我们一起走进“飞机大战”。 一....
    HDhandi阅读 1,931评论 1 4
  • 今天看到一篇就媒体对名人死亡事件追踪、报道方式的评论文章,标题是《沉默是罪大的善意》。写的挺好,不过看完我却很想对...
    入定阅读 193评论 0 0
  • 你有一个人去电影院看电影过吗? 我以前总觉得一个人去电影院看电影是多么了不得的事情。我是喜欢看电影的,特别...
    南方树阅读 1,179评论 1 3