您的位置:首页 > 其它

pygame的一些基础知识

2016-09-27 18:12 106 查看
1.照例,第一个helloworld程序;

     因为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》一书所做笔记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: