版本14和15间的区别
于2006-10-25 15:31:01修订的的版本14
大小: 7044
编辑: czk
备注:
于2008-02-23 15:36:38修订的的版本15
大小: 7044
编辑: localhost
备注: converted to 1.6 markup
删除的内容标记成这样。 加入的内容标记成这样。
行号 2: 行号 2:
[[TableOfContents]] <<TableOfContents>>

Pygame的多媒体

1. 音乐

要在游戏中播放背景音乐,可以使用pygame.mixer.music模块。

  • 使用

    pygame.init()

    进行全部模块的初始化,或者只初始化音频部分:

    pygame.mixer.init()
  • 使用文件名作为参数载入音乐

    pygame.mixer.music.load('/usr/share/example-content/ubuntu Sax.ogg')
    音乐可以是ogg、mp3等格式。载入的音乐不会全部放到内容中,而是以流的形式播放的,即在播放的时候才会一点点从文件中读取。
  • 使用

    pygame.mixer.music.play();

    播放载入的音乐。该函数立即返回,音乐播放在后台进行。play方法还可以使用两个参数

    pygame.mixer.music.play(loops=0, start=0.0)
    loops和start分别代表重复的次数和开始播放的位置。
  • 播放到一半可以使用

    pygame.mixer.music.stop()

    停止播放,还可以用

    pygame.mixer.music.pause()

    暂停播放。暂停播放的音乐可以用

    pygame.mixer.music.unpause()

    来继续播放。使用

    pygame.mixer.music.fadeout(time)
    来进行淡出,在time毫秒的时间内音量由初始值渐变为0,最后停止播放。
  • 可以用

    pygame.mixer.music.set_volume(value)
    来设置播放的音量,音量value的范围为0.0到1.0。
  • 要判断是否在播放音乐,可以使用

    pygame.mixer.music.get_busy()

    ,返回1为正在播放。在音乐播放完成时,可以用事件的方式通知用户程序。使用

    pygame.mixer.music.set_endevent(pygame.USEREVENT + 1)

    ,来设置当音乐播放完成时发送pygame.USEREVENT+1事件给用户程序。当前正有音乐在播放时,可以使用

    pygame.mixer.music.queue(filename)
    来指定下一个要播放的音乐文件,当前的音乐播放完成后自动开始播放指定的下一个。一次只能指定一个等待播放的音乐文件。

注意:同时只能播放一个音乐文件。音乐文件可以很大,系统以流的形式播放。

2. 音效

要在游戏中播放碰撞、爆炸、语音等音效,需要使用pygame.mixer模块。这个模块支持同时播放多个音效文件,多个文件在多个不同的通道Channel中播放,一个通道一次只能播放一个音效文件。

  • 使用

    pygame.init()

    进行全部模块初始化,或者只初始化音频部分

    pygame.mixer.init()
  • 可以这样查看总共有多少个通道

    pygame.mixer.get_num_channels()

    可以使用

    channel = pygame.mixer.Channel(i)

    取得第i个通道。或者使用

    channel = pygame.mixer.find_channel()
    自动取得一个空闲的通道(没有音效正在播放的通道)。
  • 使用

    sound = pygame.mixer.Sound('/usr/share/sounds/KDE_Startup_2.ogg)
    指定文件名载入一个音频文件,并创建一个Sound对象。音频文件可以是wav,ogg等格式。音频文件的内容会被全部载入到内存中。
  • 使用

    channel.play(sound)

    在一个通道中播放一个音效。或者使用

    sound.play()
    自动找一个空闲的通道播放音效。
  • 正在播放的音效可以使用

    sound.stop()

    停止音效sound的播放。或者用

    channel.stop()

    停止在通道channel中播放的音效。正在播放音效的通道还可以用

    channel.pause()

    暂停通道中的音效。暂停的音效还可以用

    channel.unpause()

    继续播放。使用

    channel.fadeout(time)
    来进行淡出,在time毫秒的时间内音量由初始值渐变为0,最后停止播放。
  • 对于一个通道可以用

    channel.get_busy()

    检查它是否正在播放音效。当一个通道中的音效播放完成时,可以通过事件通知给用户程序。使用

    channel.set_endevent(pygame.USEREVENT + 1)

    来设置当音乐播放完成时发送pygame.USEREVENT+1事件给用户程序。使用

    channel.queue(sound) 
    为正在播放音效的通道指定下一个要播放的音效。当前的音效播放完成后,下一个音效会自动播放。一个通道只能有一个等待播放的音效。
  • 使用

    channel.set_volume(value)

    来设置通道中播放的音效的音量。使用

    sound.set_volume(value)
    来设置单个音效的音量。两者的取值范围都是0.0到1.0。音效播放的实际音量是通道音量和音效音量的乘积,比如通道音量0.5,音效音量0.6,则实际播放的音量为0.3。

注意:音效和音乐的区别是:音效要整个文件载入到Sound对象中才能播放,而音乐不用完全载入,而以流的方式播放。

3. 视频

要在游戏中播放片头动画、过场动画等视频画面,可以使用pygame.movie模块。

  • 要播放视频中的音乐,pygame.movie模块需要对音频接口的完全控制,不能初始化mixer模块。因此要这样完成初始化

    pygame.init()
    pygame.mixer.quit()

    或者只初始化

    pygame.display.init()
  • movie = pygame.movie.Movie('filename')
    指定文件名载入视频。视频的格式可以为mpeg1。视频文件不会马上全部载入内存,而是在播放的时候一点一点的载入内存。
  • movie.set_display(pygame.display.set_mode((640,480)))
    指定播放的surface。
  • movie.set_volume(value)
    指定播放的音量。音量的值value的取值范围为0.0到1.0。
  • movie.play()
    播放视频。这个函数会立即返回,视频在后台播放。这个函数可以带一个参数loops,指定重复次数。
  • 正在播放的视频可以用

    movie.stop()

    停止播放。还可以用

    movie.pause()

    暂停播放。可以使用

    movie.skip(seconds)
    使视频前进seconds秒钟。

注:在某些XWindow下,可能需要配置环境变量:

export SDL_VIDEO_YUV_HWACCEL=0

4. CD

如果要在游戏中用音频CD作为背景音乐,则需要用到pygame.cdrom模块。

  • pygame.cdrom.init()
    初始化cdrom模块。
  • pygame.cdrom.get_count()

    查看系统中的光驱数量。用

    cd = pygame.cdrom.CD(id)
    得到指定的光驱对象。id为光驱的编号。
  • cd.init()
    对光驱对象进行初始化。光驱对象必须先初始化才能够使用。
  • cd.get_numtracks()

    查看光驱里的光盘上有多少条音轨。用

    cd.get_track_length(track)
    可以获得指定音轨的时间长度。指定音轨的编号从0开始。
  • cd.play(track)

    播放光盘上指定编号的音轨。音轨从0开始编号。用

    cd.stop()

    停止播放。用

    cd.pause()

    暂停播放。暂停的音轨用

    cd.resume()
    继续播放。
  • cd.get_current()

    得到当前正在播放的音轨。用

    cd.get_busy()
    判断光盘是否正在播放。
  • cd.eject()
    来弹出光盘。

end

Pygame的多媒体 (2008-02-23 15:36:38由localhost编辑)

ch3n2k.com | Copyright (c) 2004-2020 czk.