《Python编程:从入门到实践》第十二章,外星人入侵实例中无法获取键盘按键和退出游戏


game_functions.py

import pygame
import sys


def check_enents(ship):
    """响应按键和鼠标事件"""
    for event in pygame.event.get():
        if event == pygame.QUIT:
            sys.exit()
        elif event == pygame.KEYDOWN:
            if event == pygame.K_d:
                ship.rect.centerx+=10


def update_screen(ai_settings,screen,ship):
    """更新屏幕上的图像"""
    # 重绘屏幕
    screen.fill(ai_settings.bg_color)
    ship.blitme()
    pygame.display.flip()

alien_invasion.py

import pygame
from settings import Settings
from ship import Ship
import game_functions as gf


def run_game():
    # 初始化游戏,创建屏幕对象
    pygame.init()
    ai_settings=Settings()  # 创建设置实例
    screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
    ship=Ship(screen)
    pygame.display.set_caption("Alien Invasion")

    # 开始游戏主循环
    while True:
        gf.check_enents(ship)
        gf.update_screen(ai_settings,screen,ship)


run_game()

只能强行终止进程,按红叉无法退出,按d后也没办法向右移动,代码和书上基本一样,求教是哪里错了,和OS X系统有关系么?


找到问题所在了,pygame.QUIT、pygame.KEYDOWN都得用event.tpye,pygame.K_d是表示键盘按下的d,要使用event.key。书上有写但是粗心忽略了……



相关阅读:
动态生成的标签,怎么添加点击事件打开对应的内容网页?
请问.net 的Encoding.UTF8.GetBytes和Encoding.Unicode.GetBytes分别作了什么?
指定域名,无法访问本地node项目(配置server.js端口为3333) 开发工具:webstorm
如何记录每次点击的选中项,并验证值和答案是否一致?
求教php正则替换怎么写
关于thinkphp中的行为扩展和laravel中的中间件
为什么我的eclipse che在docker中运行不起来?
如果通过url传参显示不同的页面
ng-clas的使用问题
laravel5.2为什么在服务器上获取不到session,storage下的sessions下的文件里面存储的有?
null === ? null全等于什么啊
PHP Closure类的bind()和bindTo()怎么用?
echarts 同样的三张图形,数据不一样,放入选项卡,点击后只显示一张
为什么php里的变量不需要特意声明?
golang &的符号疑问.
在学习hibernate中遇到的一个问题。
Laravel怎么设置动态二级目录
背景图像移动时只能在内边距内移动
移动端通知推送的实现原理?
关于浏览器渲染的问题



快速导航

Copyright © 2016 phpStudy |