pygame的一些基础知识
2016-09-27 18:12
106 查看
1.照例,第一个helloworld程序;
因为pygame生成的程序为交互式的,所以我们将标题设置为helloworld
其中import 导入sys 和pygame 模块
而from pygame.locals import * 导入pygame 模块的函数和值这样就可以不用再要调用的值前面添加pygame.locals 比如程序中的QUIT值
pygame.init() 是调用pygame模块时的初始函数,放在所有函数之前
display_surf 是pygame.display.set_mode((400,300))返回的一个pygame.Surface对象,而元组(400,300)代表屏幕设置的长宽
pygame.display.set_caption()当然就是设置的标题啦
然后pygame,.event.get() 就是获取当前所有事件
然后判断是不是需要退出,退出时一般先退出pygame模块,然后在退出程序
因为程序是交互式的,理所当然的要快速刷新界面,pygame.display.update()就是把surface对象不断地显示到屏幕,surface对象没变,所以屏幕一直是黑色的,因为是一直不停的刷新,所以要一直循环
2.一些定义问题;
(1).像素坐标的问题,我们的电脑屏幕是有一个个像素点组成的,所以我们设置窗口长宽时一般都是设置的多少个像素,像素坐标用的是笛卡尔坐标系统,即原点在左上方,然后,然后向下为y,向右为x
(2).关于颜色的问题pygame采用RGB颜色,即通过红绿蓝来显示颜色,每一种颜色的值为0-255,所以颜色一般由三个值组成,pygame中还有一个值为透明度,当没有透明度时,颜色就会覆盖掉原来的颜色,而当我们设置透明度时就会在原来的颜色基础上加一个颜色,比如我们用红色透镜看物体,会在所有的物体上加一个红光;
(3).Surface对象是表示的一个矩形2D图像的对象,我们可以通过pygame函数来改变surface来显示到窗口,但标题栏和边框并属于surface,如helloworld程序中,我们的set_Mode函数就返回一个surface对象,叫做显示surface;
显示surface并不能直接用颜色的透明度,即我们通过,another_surface = surface.convert_alpha()来获取一个surface,然后 进行操作
(4)pygame.Color对象,因为颜色使用RGB表示所以pygame.Color 对象为一个元组具有三个或四个整数,程序需要传入一个Color对象时我们可以用my_color = pygame.Color(255,0,0,122) 来生成一个color对象,当然我们也可以直接传入一个元组(255,0,0,122);
(5)pygame.Rect()也为一个元组,代表一个矩形区域,例如my_rect = pygame.Rect(10,10,400,300)就代表左上角坐标为(10,10)的长为400宽为300的一个矩形区域,并且rect对象可以计算其他点的坐标,如my_rect.right 为410,当然如果my_rect.right重新赋值那么,矩形区域的个点坐标将会被重新计算
3.一些基本的绘制函数;
(1).pygame.Surface对象的fill方法传入一个颜色值将颜色填充到整个对象
(2).pygame.draw.polygon(surface,color,pointList,width),意思就是将pointList中的点用co
4000
lor颜色宽度为width的线在surface上画多边形,当不添加width时,图形为填充的
(3).pygame.draw.line(surface,color,start_point,end_point,width)
pygame.draw.lines(surface,color,closed,pointList,width) :绘制从一个点到下一个点的线,当closed传入False将不会绘制第一个点和最后一个点的连线
pygame.draw.circle(surface,color,center_point,radius,width)
pygame.draw.ellipse(surface,color,rect,width):rect 指的是椭圆所占矩形区域的大小
pygame.draw.rect(surface,color,rect,width) 绘制矩形
4.pygame.PixelArray();
用来获取图像每一个像素点,返回一个像素数组,每一个值都是一个元组可以更改每一个像素的颜色,如pixel_array = pygame.PixelArray(my_surface),pixel_array[200][300]=(255,0,255)
5.pygame产生动画;
pygame产生动画的原理就是不断地刷新图像,比如我们用一个小图片来移动,我们只要把每一次图片放在不同位置然后反复刷新即可
例如产生动画效果
#coding=utf-8
import pygame
import sys
from pygame.locals import *
pygame.init()
display_surf = pygame.display.set_mode((400,400))
pygame.display.set_caption('hello world!')
img = pygame.image.load('hh.png')
x,y = 10,10
FPS = 60
direction = 'right'
while True:
display_surf.fill((255,255,255))
if direction == 'right':
x+=1
if x>380:
direction='down'
elif direction=='down':
y +=1
if y>380:
direction='left'
elif direction=='left':
x -=1
if x<10:
direction='up'
elif direction=='up':
y -=1
if y<10:
direction='right'
for event in pygame.event.get():
if event.type ==QUIT:
pygame.quit()
sys.exit()
display_surf.blit(img,(x,y))
pygame.display.update()
pygame.time.Clock().tick(FPS)
(1).帧速率是每秒程序绘制图像的数目
(2).pygame.time.Clock()可以控制程序的刷新速度,例如fpsClock = pygame.time.Clock(), fpsClock.tick(30)就是代表最大刷新速度为30帧每秒,而在循环中调用tick函数,就是通过上一次调用tick()到当前时间还需要暂停多长时间
(3)pygame.image.load()导入图像返回一个surface对象
(4).display_surf .blit(img,point):代表将img复制到display_surf中,左上角在point处
6.pygame字体
第一步创建一个font对象,第二步生成字体的surface对象,第三步,获取字体的rect,并设置中心位置,第四步,将字体surface对象blit到display_surf上,如:
my_font = pygame.font.Font('mo.ttf',32)
text_surf = my_font.render(u'你好!',True,(0,0,0))
rect = text_surf.get_rect()
rect.center=(200,200)
while True:
display_surf.fill((255,255,255))
display_surf.blit(text_surf,rect)
其中mo.ttf是字体文件
7.pygame播放音乐
(1).播放普通音乐
sound = pygame.mixer.Sound('haha.wav')
sound.play()
import time
time.sleep(10)
sound.stop()
(2).播放背景音乐
<pre name="code" class="python">pygame.mixer.music.load('background.wav')
pygame.mixer.music.play(-1,0.0)
pygame.mixer.music.stop()
-1代表无限循环,0.0代表从头播放,如果为一个浮点数大于0,如12.7,会让音乐从开始播放到文件12.7秒结束
<------------------------------->内容为学习《Making Games with Python and Pygame》一书所做笔记
因为pygame生成的程序为交互式的,所以我们将标题设置为helloworld
#coding=utf-8 import pygame import sys from pygame.locals import * pygame.init() display_surf = pygame.display.set_mode((400,300)) pygame.display.set_caption('hello world!') while True: for event in pygame.event.get(): if event.type ==QUIT: pygame.quit() sys.exit() pygame.display.update()
其中import 导入sys 和pygame 模块
而from pygame.locals import * 导入pygame 模块的函数和值这样就可以不用再要调用的值前面添加pygame.locals 比如程序中的QUIT值
pygame.init() 是调用pygame模块时的初始函数,放在所有函数之前
display_surf 是pygame.display.set_mode((400,300))返回的一个pygame.Surface对象,而元组(400,300)代表屏幕设置的长宽
pygame.display.set_caption()当然就是设置的标题啦
然后pygame,.event.get() 就是获取当前所有事件
然后判断是不是需要退出,退出时一般先退出pygame模块,然后在退出程序
因为程序是交互式的,理所当然的要快速刷新界面,pygame.display.update()就是把surface对象不断地显示到屏幕,surface对象没变,所以屏幕一直是黑色的,因为是一直不停的刷新,所以要一直循环
2.一些定义问题;
(1).像素坐标的问题,我们的电脑屏幕是有一个个像素点组成的,所以我们设置窗口长宽时一般都是设置的多少个像素,像素坐标用的是笛卡尔坐标系统,即原点在左上方,然后,然后向下为y,向右为x
(2).关于颜色的问题pygame采用RGB颜色,即通过红绿蓝来显示颜色,每一种颜色的值为0-255,所以颜色一般由三个值组成,pygame中还有一个值为透明度,当没有透明度时,颜色就会覆盖掉原来的颜色,而当我们设置透明度时就会在原来的颜色基础上加一个颜色,比如我们用红色透镜看物体,会在所有的物体上加一个红光;
(3).Surface对象是表示的一个矩形2D图像的对象,我们可以通过pygame函数来改变surface来显示到窗口,但标题栏和边框并属于surface,如helloworld程序中,我们的set_Mode函数就返回一个surface对象,叫做显示surface;
显示surface并不能直接用颜色的透明度,即我们通过,another_surface = surface.convert_alpha()来获取一个surface,然后 进行操作
(4)pygame.Color对象,因为颜色使用RGB表示所以pygame.Color 对象为一个元组具有三个或四个整数,程序需要传入一个Color对象时我们可以用my_color = pygame.Color(255,0,0,122) 来生成一个color对象,当然我们也可以直接传入一个元组(255,0,0,122);
(5)pygame.Rect()也为一个元组,代表一个矩形区域,例如my_rect = pygame.Rect(10,10,400,300)就代表左上角坐标为(10,10)的长为400宽为300的一个矩形区域,并且rect对象可以计算其他点的坐标,如my_rect.right 为410,当然如果my_rect.right重新赋值那么,矩形区域的个点坐标将会被重新计算
3.一些基本的绘制函数;
(1).pygame.Surface对象的fill方法传入一个颜色值将颜色填充到整个对象
(2).pygame.draw.polygon(surface,color,pointList,width),意思就是将pointList中的点用co
4000
lor颜色宽度为width的线在surface上画多边形,当不添加width时,图形为填充的
(3).pygame.draw.line(surface,color,start_point,end_point,width)
pygame.draw.lines(surface,color,closed,pointList,width) :绘制从一个点到下一个点的线,当closed传入False将不会绘制第一个点和最后一个点的连线
pygame.draw.circle(surface,color,center_point,radius,width)
pygame.draw.ellipse(surface,color,rect,width):rect 指的是椭圆所占矩形区域的大小
pygame.draw.rect(surface,color,rect,width) 绘制矩形
4.pygame.PixelArray();
用来获取图像每一个像素点,返回一个像素数组,每一个值都是一个元组可以更改每一个像素的颜色,如pixel_array = pygame.PixelArray(my_surface),pixel_array[200][300]=(255,0,255)
5.pygame产生动画;
pygame产生动画的原理就是不断地刷新图像,比如我们用一个小图片来移动,我们只要把每一次图片放在不同位置然后反复刷新即可
例如产生动画效果
#coding=utf-8
import pygame
import sys
from pygame.locals import *
pygame.init()
display_surf = pygame.display.set_mode((400,400))
pygame.display.set_caption('hello world!')
img = pygame.image.load('hh.png')
x,y = 10,10
FPS = 60
direction = 'right'
while True:
display_surf.fill((255,255,255))
if direction == 'right':
x+=1
if x>380:
direction='down'
elif direction=='down':
y +=1
if y>380:
direction='left'
elif direction=='left':
x -=1
if x<10:
direction='up'
elif direction=='up':
y -=1
if y<10:
direction='right'
for event in pygame.event.get():
if event.type ==QUIT:
pygame.quit()
sys.exit()
display_surf.blit(img,(x,y))
pygame.display.update()
pygame.time.Clock().tick(FPS)
(1).帧速率是每秒程序绘制图像的数目
(2).pygame.time.Clock()可以控制程序的刷新速度,例如fpsClock = pygame.time.Clock(), fpsClock.tick(30)就是代表最大刷新速度为30帧每秒,而在循环中调用tick函数,就是通过上一次调用tick()到当前时间还需要暂停多长时间
(3)pygame.image.load()导入图像返回一个surface对象
(4).display_surf .blit(img,point):代表将img复制到display_surf中,左上角在point处
6.pygame字体
第一步创建一个font对象,第二步生成字体的surface对象,第三步,获取字体的rect,并设置中心位置,第四步,将字体surface对象blit到display_surf上,如:
my_font = pygame.font.Font('mo.ttf',32)
text_surf = my_font.render(u'你好!',True,(0,0,0))
rect = text_surf.get_rect()
rect.center=(200,200)
while True:
display_surf.fill((255,255,255))
display_surf.blit(text_surf,rect)
其中mo.ttf是字体文件
7.pygame播放音乐
(1).播放普通音乐
sound = pygame.mixer.Sound('haha.wav')
sound.play()
import time
time.sleep(10)
sound.stop()
(2).播放背景音乐
<pre name="code" class="python">pygame.mixer.music.load('background.wav')
pygame.mixer.music.play(-1,0.0)
pygame.mixer.music.stop()
-1代表无限循环,0.0代表从头播放,如果为一个浮点数大于0,如12.7,会让音乐从开始播放到文件12.7秒结束
<------------------------------->内容为学习《Making Games with Python and Pygame》一书所做笔记
相关文章推荐
- 计算机体系结构的一些基础知识
- 关于 XML 的一些基础知识
- 操作系统的一些基础知识
- java学习笔记,关于java的一些基础知识,适用于初学者,第一节
- C++学习(1)--基础知识(1)--一些基本的格式
- OLAP与OLTP的一些基础知识
- 模块的一些基础知识
- javascript学习中的一些心得(基础知识,高手免进)
- 理清了3G的一些基础知识
- WIN32汇编的一些基础知识
- Java的一些基础知识
- socket网络编程的一些基础知识
- 开始学习asp.net,一些基础的知识。
- 一些关于Globus的基础知识
- 模块的一些基础知识
- 关于DNS的一些基础知识
- [转]socket网络编程的一些基础知识
- 学Java前要了解的一些基础知识
- 异常的一些基础知识
- PE文件结构的一些基础知识