您的位置:首页 > 编程语言 > Python开发

Python游戏编程笔记_BGDwPaP_0301

2015-06-02 08:47 399 查看
对于有C/C++或Java基础的朋友来说,我推荐Swaroop C H的《A Byte of Python》作为转型教材。总体而言,这本书比较简洁清晰,把重点的线索性的知识点梳理了一遍,看完这本书基本上也就对Python有了整体概念了。个人体会是,Python确实是一种可以体现简洁之美的语言

出于个人兴趣,第二本书我选择了Will McGugan的《Beginning Game Development with Python and Pygame》。在阅读过程中,我发现通过代码+注释可以加深对书本知识理解,我也试图逐渐培养自己的代码和注释风格,在这里我把学习过程中用到的代码(以及自己加的注释)在这里展示出来,与同好共享。

标题解释:

BGDwPaP即《Beginning Game Development with Python and Pygame》首字母缩写

0301: 03表示出于原书第三章,01表示是我写的第一篇博客

# -*- coding=utf-8 -*-
# 若无上句,即便是在注释中有中文,也会报错,且这一句必须放在第一句!!

#本程序来源于《Beginning Game Development with Python and Pygame》
#目的是显示一幅背景图,并把鼠标换成定制图像(一只河豚!!)
#程序框架
#1 指定资源位置——背景图和鼠标图
#2 引入所需模块
#3 pygame的初始化
#4 设置窗口、载入背景
#5 一个循环构成程序核心
#   设置退出条件
#   将背景图涂抹至窗口
#   找到鼠标位置,并将鼠标图像替换
#   更新图像(将缓存中的图像显示)

#1 指定资源位置——背景图和鼠标图
background_image_filename='sushiplate.jpg'
cursor_image_filename='fugu.png'
### 用字符串来表示文件路径,直接给出文件名是指,该文件与py文件放在同一目录下

#2 引入所需模块
import pygame
from pygame.locals import *
from sys import exit
### locals中包含很多常用函数和常量

#3 pygame的初始化
pygame.init()
### 初始化pygame中的所有子模块,但耗时略长
### 如果你想节省时间,也可以有针对性地对每一个子模块进行初始化,如pygame.sound.init()

#4 设置窗口、载入背景
screen=pygame.display.set_mode((640,480),0,32)
pygame.display.set_caption("Hello World Redux!")
### pygame用Surface类来对窗口(或全屏幕)进行操作,pygame.display.set_mode的返回值
### 正是这样一个对象
### set_mode的三组参数分别为:(像素长,高),标志值(设置窗口参数),色彩位深度
### set_caption则如其名所述,设置窗口标题。个人觉得此函数的调用方法有些特别,无返回值,
### 并且似乎与刚刚得到的screen也无联系,以后再分析

background=pygame.image.load(background_image_filename).convert()
cursorImage=pygame.image.load(cursor_image_filename).convert_alpha()
### load函数的返回值也是一个Surface对象,不过不同于screen,load的返回值实质上是
### 保存在内存区域一组数据(体现一幅图),但暂时不会显示出来
### convert则是把load获得的结果转换成和窗口一样的设置(色彩位深度)
### 对于鼠标图像使用了convert_alpha, 因为此图像包含alpha通道数据
### 图像的alpha通道可以作为选择区/非选择区的区分,同时也是透明度的体现

#5 一个循环构成程序核心
### 每次屏幕刷新都执行一遍此循环
while True:
#   设置退出条件
for event in pygame.event.get():
if event.type==QUIT:
exit()
### event体现的是程序外的世界(操作系统/鼠标/键盘/游戏手柄)给出的信息

#   将背景图涂抹至窗口
screen.blit(background, (0,0))
### 这一句才是真正确定窗口(背景)显示什么
### 第一个参数是内存中一组图像数据(先load再convert之后得到),第二个数据
### 参考点起始位置,
### 其结果仍然只是表示图像的内存中的一组数据,直到display.update被调用

#   找到鼠标位置,并将鼠标图像替换
x,y=pygame.mouse.get_pos()
x-=cursorImage.get_width()/2
y-=cursorImage.get_height()/2
screen.blit(cursorImage,(x,y))
### 找到鼠标的位置,通过简单运算,将图像中心点(而不是左上角)放在鼠标尖端的正下方
### 再次调用blit,其实我的理解时,再次调用时,就像画油画一样,在背景上
### 的某块区域画上鼠标图像

#   更新图像(将缓存中的图像显示)
pygame.display.update()
### 将内存(或曰Buffer)中的图像数据真正显示在窗口中


本例所需图像资源:

sushiplate.jpg-----http://img.blog.csdn.net/20150602090605922

fugu.png---http://img.blog.csdn.net/20150602090818597
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: