在上一节中我们知道了事件,以及如何捕捉键盘事件进行响应,本届我们结合第一节何上一节的内容,做一个用键盘控制角色移动的功能,代码如下:

#!/usr/bin/env python

#指定图像文件名称

background_image_filename = './img/Underwater.png'

mouse_image_filename = './img/octopus.png'

#导入pygame库

import pygame

#导入一些常用的函数和常量

from pygame.locals import *

#向sys模块借一个exit函数用来退出程序

from sys import exit

#初始化pygame,为使用硬件做准备

pygame.init()

#创建了一个窗口

screen = pygame.display.set_mode((960, 720), 0, 32)

#设置窗口标题

pygame.display.set_caption("海底世界")

#加载并转换图像

background = pygame.image.load(background_image_filename).convert()

kcursor = pygame.image.load(mouse_image_filename).convert_alpha()

#游戏主循环

x, y = 0, 0

move_x, move_y = 0, 0

while True:

for event in pygame.event.get():

if event.type == QUIT:

exit()

if event.type == KEYDOWN:

#键盘有按下?

if event.key == K_LEFT:

#按下的是左方向键的话,把x坐标减一

move_x = -1

elif event.key == K_RIGHT:

#右方向键则加一

move_x = 1

elif event.key == K_UP:

#类似了

move_y = -1

elif event.key == K_DOWN:

move_y = 1

elif event.type == KEYUP:

#如果用户放开了键盘,图就不要动了

move_x = 0

move_y = 0

#计算出新的坐标

x+= move_x

y+= move_y

screen.fill((0,0,0))

screen.blit(background, (0,0))

screen.blit(kcursor, (x,y))

#在新的位置上画图

pygame.display.update()

当我们运行这个程序的时候,按下方向键就可以把章鱼移动,但是等等!为什么我只能按一下动一下啊……

因为KEYDOWN事件只有在你按下键的那一刻才发生一次,也就是for循环需要有事件发生才会再次执行,你可以试试在按下方向键不松开的时候不停的移动鼠标,这时候章鱼就会一直移动了。

啊??这么麻烦,怎么修改呢?

因为当你按下按键的时候变量值已经进行了修改,所以只需要把计算新坐标后面的代码缩进调整一下,放在跟for循环并列的位置,这样事件发生只会修改坐标的变化数据,不断更新坐标的任务就在while循环里执行了。

修改后的代码;

#!/usr/bin/env python

#指定图像文件名称

background_image_filename = './img/Underwater.png'

mouse_image_filename = './img/octopus.png'

#导入pygame库

import pygame

#导入一些常用的函数和常量

from pygame.locals import *

#向sys模块借一个exit函数用来退出程序

from sys import exit

#初始化pygame,为使用硬件做准备

pygame.init()

#创建了一个窗口

screen = pygame.display.set_mode((960, 720), 0, 32)

#设置窗口标题

pygame.display.set_caption("海底世界")

#加载并转换图像

background = pygame.image.load(background_image_filename).convert()

kcursor = pygame.image.load(mouse_image_filename).convert_alpha()

#游戏主循环

x, y = 0, 0

move_x, move_y = 0, 0

while True:

for event in pygame.event.get():

if event.type == QUIT:

exit()

if event.type == KEYDOWN:

#键盘有按下?

if event.key == K_LEFT:

#按下的是左方向键的话,把x坐标减一

move_x = -1

elif event.key == K_RIGHT:

#右方向键则加一

move_x = 1

elif event.key == K_UP:

#类似了

move_y = -1

elif event.key == K_DOWN:

move_y = 1

elif event.type == KEYUP:

#如果用户放开了键盘,图就不要动了

move_x = 0

move_y = 0

#计算出新的坐标

x+= move_x

y+= move_y

screen.fill((0,0,0))

screen.blit(background, (0,0))

screen.blit(kcursor, (x,y))

#在新的位置上画图

pygame.display.update()

本站内容未经许可,禁止任何网站及个人进行转载。

python方向键控制角色_用python和pygame游戏编程入门-控制角色移动相关推荐

  1. python弹球游戏绑定鼠标事件_用python和pygame游戏编程入门-弹球[鼠标控制]

    本节我们再将鼠标的事件引入到这个动画中,要做什么呢?就是在动画中,如果按下鼠标左键,小球会停止移动,如果松开左键,小球会移动到鼠标的位置,然后继续刚才的运动:如果按下鼠标左键不放,移动鼠标,小球就会跟 ...

  2. python怎么窗口显示文字_用python和pygame游戏编程入门-显示文字

    上一节我们通过键盘可以控制角色移动,如果要让角色说话,那就要用到文字显示.Pygame可以直接调用系统字体,或者也可以使用TTF字体,TTF就是字体文件,可以从网上下载.为了使用字体,你得先创建一个F ...

  3. python画图的模块_用python和pygame游戏编程入门-画图模块

    在设计一个游戏时,有些时候你可以不加载任何图片,只是绘制一些图形来制作一个游戏. pygame.draw这个模块的作用是在屏幕上绘制各种图形. 函数 作用 rect 绘制矩形 polygon 绘制多边 ...

  4. python游戏使用教程_PYTHON游戏编程入门_IT教程网

    资源名称:PYTHON游戏编程入门 内容简介: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言,在游戏开发领域,Python也得到越来越广泛的应用,并由此受到重视. 本书教授用Py ...

  5. python游戏编程入门-python游戏编程入门

    <Python游戏编程入门> 这些文章负责整理在这本书中的知识点.注意事项和课后习题的尝试实现. 并且对每一个章节给出的最终实例进行分析和注释. 初识pygame:pie游戏 pygame ...

  6. python游戏编程入门 免费-python游戏编程入门 python游戏编程入门课

    python游戏编程入门 python游戏编程入门课 什么是python游戏编程入门?首先我们需要认识什么是Python Python既是一个软件工具包,也是一种语言.Python软件包包含了一个名为 ...

  7. Python,美国顶尖大学里最受欢迎的编程入门语言

    摘要 截止到目前,Python 已经成为目前美国顶尖大学里最受欢迎的计算机编程入门语言.计算机排名前 10 的学校里,有 8 所学校(80%)使用 Python 作为编程入门语言.在计算机排名前 39 ...

  8. 《Python游戏编程入门》——1.2 初识Python

    本节书摘来自异步社区<Python游戏编程入门>一书中的第1章,第1.2节,作者[美]Jonathan S. Harbour ,李强 译,更多章节内容可以访问云栖社区"异步社区& ...

  9. 青少年Python游戏编程入门(Beginning Game Programming for Teens with Python译文)

    青少年Python游戏编程入门 Beginning Game Programming for Teens with Python   Julian Meyer on January 22, 2013 ...

最新文章

  1. 与张小龙同行:微信小程序开发
  2. node.js博客GitHub搭建(hexo)
  3. Elasticsearch kibana一些基本概念
  4. 插件~Nuget中包与包的依赖关系
  5. opencv学习笔记(六)直方图比较图片相似度
  6. 顺时针小球圆周运动Java编程_如何使用CSS实现圆周运动小球的实例
  7. 夺命雷公狗---ECSHOP---01-解决报错问题
  8. android源码灭屏时蓝牙自动配对
  9. 51单片机之串口通信详解及代码示例
  10. z世代消费力白皮书_2019 Z世代消费力白皮书,洞悉2.6亿年轻人消费倾向
  11. 集体的智慧:为什么SaaS打败企业软件?
  12. UVM—virtual sequencer and virtual sequence详解
  13. python如何转换图形_python绘图 转
  14. win7 装显卡驱动后只显示桌面背景 - 解法办法一例
  15. 简要描述CSS 中的定位机制。
  16. 1小时1篇文学会用python进行AI修复!
  17. IOS 判断iPhone刘海屏
  18. android10管理权限,Android 权限管理
  19. 推箱子一关简易劣质版
  20. 学校校园学生寝室管理查寝打分系统 毕业设计毕设源码毕业论文开题报告参考(4)网站和学生功能

热门文章

  1. activiti页面展示流程图乱码_activiti 5.17 流程图中文乱码问题
  2. 12.MYSQL高级(二)
  3. 谢撩,人在斯坦福打SoTA
  4. MoCoV3:何恺明团队新作!解决Transformer自监督训练不稳定问题!
  5. Sigmoid函数与Softmax函数的区别与联系
  6. Java多线程系列(六):深入详解Synchronized同步锁的底层实现
  7. 论文浅尝 | 利用推理链进行视觉问题回答
  8. 论文浅尝 | Generative QA: Learning to Answer the Whole Question
  9. 零基础入门NLP - 新闻文本分类,正式赛第一名方案分享
  10. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之与其它Fragment通信