python 多媒体框架pyglet开发

简介

pyglet是一个python下的多媒体框架,利用他我们可以轻易的做出交互丰富的应用。同样的框架还有 pygame,panda3d,这两个学起来更难,学习成本更大。对于只是要熟练掌握python来讲,可以试试pyglet,轻量级。

 

安装Pyglet

从http://pyglet.org/download.html下载Pyglet并安装到你的电脑, 对于不同的平台,安装方法不一样,但都很简单,因为Pyglet没有额外的依赖包。

 win7 64位如果提示:需要python2.4或者更新的版本,请参考StackOverflow:http://code.google.com/p/pyglet/issues/detail?id=488 

全部代码

本文用pyglet搭建一个小游戏,模仿雷电。

import pyglet
import random

from pyglet.window import key 
from pyglet.window import mouse
#from game import resources

game_window=pyglet.window.Window(1200,700)
t=0
lable=pyglet.text.Label('Come On Babby',font_name='Times New Roman',font_size=36,x=game_window.width/2,y=game_window.height/2,anchor_x='center',anchor_y='center')
image=pyglet.image.load('D:/ps/15.jpg')
image_s=pyglet.image.load('D:/ps/QQ .jpg')
image_dabian=pyglet.image.load('D:/ps/13583948916893.jpg')

main_batch=pyglet.graphics.Batch()
#rand_x=random.randint(0,900)
#dabian=pyglet.sprite.Sprite(img=image_dabian,x=rand_x,y=500)
#dabian.scale=0.2
man=pyglet.sprite.Sprite(img=image_s,x=400,y=0);

keys = key.KeyStateHandler()
game_window.push_handlers(keys)


#def dabian_lives(num):
dabian_lives=[]
for i in range(15):
    rand_x=random.randrange(0,1200,1)

    new_sprite=pyglet.sprite.Sprite(img=image_dabian,x=rand_x,y=700)
    new_sprite.scale=0.1
    dabian_lives.append(new_sprite)
    #return dabian_lives  

def check_bounds(self):
    if self.y<-100:
        rand_x=random.randrange(-200,200,10)  
        self.x+=rand_x
        if self.x<0:
            self.x=0
        elif self.x>1200:
            self.x=1200    
        self.y=700
#lives=dabian_lives(5)
@game_window.event 
def on_draw():
    game_window.clear()
    lable.draw()
   # dabian.draw()
    man.draw()
    for live in dabian_lives:
        live.draw()
    
@game_window.event
def on_mouse_press(x,y,button,modif):
    if button==mouse.LEFT:
        print'mouse left was pressed!'

    elif button==mouse.RIGHT:
        print'mouse right was pressed!'
    print x
    print y
#music=pyglet.media.load('D:/ps/xx.mp3')   
#music.play()   

#update thing 
def update(dt):
    if keys[key.LEFT]:
        man.x-=10
    elif keys[key.RIGHT]:
        man.x+=10   
    elif keys[key.UP]:
        man.y+=10
    elif keys[key.DOWN]:
        man.y-=10 
    if man.y>600:
        man.y=600
    elif man.y<0:
        man.y=0
    
    if man.x>1000:
        man.x=1000
    elif man.x<0:
        man.x=0    
    for live in dabian_lives:
        rand_y=random.randrange(0,15,2)
        live.y-=rand_y
      
        check_bounds(live)
    #check_bounds(dabian)
pyglet.clock.schedule_interval(update, 1/100.0)
   
     
pyglet.app.run()

 

代码不长,能够实现键盘控制图片(在pyglet里面称为精灵) 实现物体的动态刷新。

 

首先是显示一个窗口

import pyglet
game_window = pyglet.window.Window(800, 600)
pyglet.app.run()

调用window函数构造一个800*600的窗口,在pyglet里面坐标系是左下角为(0,0)。

其次我们要加载图片资源,并且显示一个文本。

lable=pyglet.text.Label('Come On Babby',font_name='Times New Roman',font_size=36,x=game_window.width/2,y=game_window.height/2,anchor_x='center',anchor_y='center')
image=pyglet.image.load('D:/ps/15.jpg')

通过引用图片来初始化“精灵”,也就是游戏的主角。

man=pyglet.sprite.Sprite(img=image_s,x=400,y=0);
dabian_lives=[]
for i in range(15):
    rand_x=random.randrange(0,1200,1)

    new_sprite=pyglet.sprite.Sprite(img=image_dabian,x=rand_x,y=700)
    new_sprite.scale=0.1
    dabian_lives.append(new_sprite)

精灵已经初始化好了,最后我们调用on_draw()函数把他们绘制到窗口上。

@game_window.event 
def on_draw():
    game_window.clear()
    lable.draw()
    man.draw()
    for live in dabian_lives:
        live.draw()

这里有一个小技巧:我们用了@符号,用于函数的修饰。

@dec1
 @dec2
 def test(arg):
     pass

相当于:dec1(dec2(test(arg)))

 

接下来我们要通过键盘控制精灵,使其移动。如果按键一直被按下,那么精灵就应该一直移动,而不是按一下移动一下。所以我们要检测的是按键的状态,而不是键盘是否被按下。所以我们选择获取按键的句柄。

keys = key.KeyStateHandler()
game_window.push_handlers(keys)
 

接下来就是关键的update()函数,其作用就是定时刷新画面,让画面动起来。同时在这里面进行按键的检测,精灵坐标的检测。check_bounds()函数用于检测精灵是否出界。pyglet.clock.schedule_interval(update, 1/100.0)用于设置刷新的频率,这里用了100hz。

def check_bounds(self):
    if self.y<-100:
        rand_x=random.randrange(-200,200,10)  
        self.x+=rand_x
        if self.x<0:
            self.x=0
        elif self.x>1200:
            self.x=1200    
        self.y=700
def update(dt):
    if keys[key.LEFT]:
        man.x-=10
    elif keys[key.RIGHT]:
        man.x+=10   
    elif keys[key.UP]:
        man.y+=10
    elif keys[key.DOWN]:
        man.y-=10 
    if man.y>600:
        man.y=600
    elif man.y<0:
        man.y=0
    
    if man.x>1000:
        man.x=1000
    elif man.x<0:
        man.x=0    
    for live in dabian_lives:
        rand_y=random.randrange(0,15,2)
        live.y-=rand_y
      
        check_bounds(live)
    )
pyglet.clock.schedule_interval(update, 1/100.0)


最后我么调用:

pyglet.app.run()

让整个程序跑起来!

python 多媒体框架pyglet开发_第1张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-------------------------------------------------------------------

目前先到这里,这些我也只花了几个小时就搞定了,很简单。

不定期更新!!!~~~

你可能感兴趣的:(Python)