pygame的一些基础知识
来源:互联网 发布:iphone4优化 越狱 编辑:程序博客网 时间:2024/06/08 06:05
1.照例,第一个helloworld程序;
因为pygame生成的程序为交互式的,所以我们将标题设置为helloworld
#coding=utf-8import pygameimport sysfrom 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中的点用color颜色宽度为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-8import pygameimport sysfrom 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,10FPS = 60direction = '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 timetime.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的一些基础知识
- 使用pygame的一些心得
- PyGame基础知识-Making Games with Python & Pygame
- Python pygame 简单的pygame
- 模块的一些基础知识
- 模块的一些基础知识
- 操作系统的一些基础知识
- 计算机体系结构的一些基础知识
- Java的一些基础知识
- 操作系统的一些基础知识
- wince的一些基础知识
- 流媒体的一些基础知识
- 一些java的基础知识
- 一些java的基础知识
- 硬盘的一些基础知识
- XSL的一些基础知识!
- ubuntu 的一些基础知识
- js的一些基础知识
- 剑指offer--面试题33:把数组排成最小的数
- 动画按钮实现
- 动态添加的dom方法,调用angular中$scope方法
- Openjudge 2.6基本算法之动态规划:9277 Logs Stacking堆木头
- href无法跳转到angularjs中的指定页面
- pygame的一些基础知识
- Android 线程池的使用
- angular 默认排序问题
- css3 target伪类学习
- 权限管理系统
- less 学习笔记入门
- Android sqlite数据库学习
- eclipse 打包 android apk
- 8.2.1.2 How MySQL Optimizes WHERE Clauses MySQL 优化WHERE 子句