第二十讲 动画制作及声音载入(三)

来源:互联网 发布:网络聊天用语指南 编辑:程序博客网 时间:2024/05/28 22:08
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

教 学 纲 要

Java 世界 里 最 激 动 人 心 的 时 刻 终 于 到 来 了 , 在 这 一 章 里 你 将 学到 在 主 页 里 播 放 动 画 的 技 巧 , 以 及 载 入 和 播 放 声 音 的 方法 , 掌 握 了 本 章 所 讲 授 的 这 些 技 巧 , 再 加 上 你 脑 子 里 各种 希 奇 古 怪 的 念 头 , 你 就 有 能 力 创 造 出 你 自 己 的 真 正 活灵 活 现 、 有 声 有 色 的 活 动 Web 主 页 来 。

正 文

载 歌 载 舞 的 小 企 鹅

    啊 哈 ! 现 在 我 们 已 经 可 以 把 动 画 做 得相 当 不 错 了 , 不 过 我 们 还 可 以 再 把 它 做 得 尽 善 尽 美 , 总不 能 让 我 们 的 动 画 是 无 声 片 吧 , 加 上 点 儿 声 音 的 确 是 个绝 妙 的 主 意 。 人 们 总 是 在 不 满 足 中 追 求 完 美 , 从 文 字 、图 形 到 动 画 , 虽 然 我 们 干 得 不 错 , 可 还 是 希 望 能 做 得 更好 , Java 恰 恰 为 你 的 精 益 求 精 提 供 了 支 持 , 你 可 以 在 Java 程 序 里 载 入 并 播 放 声 音 文 件 。

    和 Java 只 支 持 Gif 和 Jpg 两 种 图 形 文 件 一样 , 在 有 声 世 界 里 , 它 也 只 支 持 Au 这 一 种 声 音 文 件 的 格式 。 虽 然 这 不 是 一 种 CD 音 质 的 声 音 文 件 , 但 它 已 经 足 以让 你 为 之 欣 喜 若 狂 了 。 设 想 一 下 , 当 别 人 正 在 浏 览 你 的主 页 时 , 突 然 听 见 有 个 声 音 对 他 说 “ 欢 迎 光 临 ” , 那 该是 多 么 出 人 意 料 呀 !

    在 Java 程 序 里 加 载 声 音 文 件 就 如 同 在 你的 录 音 机 里 放 上 一 张 想 听 的 唱 片 一 样 简 单 。 声 音 文 件 的加 载 与 图 片 文 件 的 加 载 非 常 相 似 , 首 先 你 必 须 指 定 一 个包 含 有 声 音 文 件 的 URL , 然 后 用 加 载 声 音 文 件 的 方 法 来 加载 它 。 还 记 得 吗 , 加 载 图 片 时 我 们 用 的 是 getImage 这 个 方法 , 类 似 地 , 加 载 声 音 我 们 用 到 的 方 法 叫 getAudioClip 。 在这 个 方 法 里 , 和 getImage 一 样 , 我 们 应 该 指 定 这 个 声 音 文件 存 放 的 URL , 当 然 Java 里 的 URL 既 可 以 是 本 地 硬 盘 也 可 以是 网 络 上 的 某 一 台 主 机 , 对 Java 而 言 它 们 是 一 样 的 。 和加 载 图 片 一 样 , 加 载 声 音 文 件 也 有 两 种 格 式
    AudioClip getAudioClip ( URL url ) ;
    AudioClip getAudioClip ( URL url , String name );
    AudioClip 是 Java 定 义 的 一 个 类 , 用 它 来处 理 和 控 制 声 音 这 种 特 殊 的 数 据 对 象 。 使 用 它 就 可 以 方便 地 对 声 音 文 件 的 播 放 进 行 控 制 。
例 如 : 要 加 载 一 个 名 为 background.au 的 声 音文 件 , 并 把 它 赋 给 名 为 bg_snd 的 AudioClip 类 型 的 变 量 , 我们 只 需 这 样 写 :
    AudioClip bg_snd = getAudioClip ( getCodeBase( ) , " background.au" );

    加 载 了 声 音 文 件 以 后 , 接 下 来 就 是 播放 它 。 和 录 音 机 一 样 Java 里 也 用 Play 、 Loop 、 Stop 来 控 制唱 片 的 播 放 和 暂 停 。 它 的 使 用 录 音 机 一 样 简 单 , 你 只 需要 用 AudioClip 类 里 提 供 的 play( ) 、 loop( ) 和 stop( ) 方 法 就 可以 很 方 便 地 控 制 它 。

    假 如 你 只 想 播 放 声 音 一 次 , 那 你 就 使用 方 法 play( ) , 在 程 序 里 这 样 写 :
    bg_snd .play ( ) ;
运 行 这 条 语 句 的 时 候 , Java 就 会 像 你 按 下了 录 音 机 上 的 Play 键 一 样 开 始 播 放 声 音 , 当 这 个 声 音 文件 播 放 完 以 后 , 它 就 会 自 动 停 止 。

    你 也 许 希 望 有 一 个 循 环 播 放 的 背 景 音乐 , 不 用 人 去 干 预 它 就 能 一 遍 又 一 遍 地 循 环 播 放 所 加 载的 那 个 声 音 文 件 。 在 程 序 里 写 上 下 面 这 句 话 你 的 这 个 愿望 就 能 实 现 。
    bg_snd . loop ( ) ;
    要 是 你 觉 得 它 吵 得 厉 害 , 不 想 再 让 它出 声 了 , 对 录 音 机 你 是 怎 么 做 的 呢 ? 按 Stop 键 。 在 Java 里也 一 样 , 你 只 需 要 像 下 面 这 样 使 用 方 法 stop( ) 就 可 以 让声 音 立 即 停 下 来 。
    bg_snd . stop ( ) ;
    好 啦 ! 学 习 了 声 音 文 件 的 加 载 和 播 放, 我 们 终 于 可 以 给 我 们 的 小 企 鹅 翻 筋 斗 加 上 背 景 音 乐 了, 准 备 好 你 的 音 箱 了 吗 ? 载 歌 载 舞 的 小 企 鹅 很 快 就 要 出场 了 !
程 序 18.3
// tumble.java
import java.awt.*;
import java.applet.AudioClip;    // 引 入 AudioClip 程 序 包

public class tumble extends java.applet.Applet implements Runnable
{
    Image frame[ ];
Thread thd;
int num;
int pause;
Image backgnd;        // 说 明 作 为 背 景 图 片的 Image 对 象
int x,x_pos ;
AudioClip bg_snd ;    // 说 明 用 来 放 背 景 音 乐的 AudioClip 对 象

public void init( )
{
        int i;
String fps;
frame = new Image[17];
thd = null;
num = 0;
for (i = 0; i < frame.length; i )    // 加 载 动画 图 片
frame[i] = getImage(getCodeBase( ), "images/T" i ".gif");
backgnd = getImage (getCodeBase( ),"images/backgnd.gif");   // 加 载 背 景 图 片
bg_snd = getAudioClip(getCodeBase( ),"audio/backsound.au");   // 加 载 背 景 音 乐
fps = getParameter("speed");
if (fps == null)
fps = "10";
pause = 1000 / Integer.parseInt(fps);    // 计 算 每一 帧 图 片 显 示 的 时 间
}
public void start( )
{
        bg_snd.loop ( );    // 循 环 播 放 背 景音 乐
        if (thd == null)
        {
            thd = new Thread(this);    // 产生 线 程
            thd.start( );    // 启 动 线 程
        }
}

public void stop( )
{
        if (thd != null)
        {
            thd.stop( );    // 中 止 线 程
            thd = null;
        }
        if (bg_snd != null)
            bg_snd.stop( );    // 暂 停 背 景音 乐
}
public void run( )
{
        while (true)
{
            try { Thread.sleep(pause); }    // 图 片 显 示 期 间 , 让 进 程 睡 眠
            catch (InterruptedException e) {}
            repaint( );    // 重 画 窗 口
            num = (num 1) % frame.length;    // 对 显 示 帧 数 计 数
            x = ((x 130 5)%(size( ).width 250))-130;   // 计 算 下 一 帧 图 片 显 示 的 位 置
            x_pos= size( ).width-x ;
        }
    }
    public void paint(Graphics g)
    {
        g.drawImage(backgnd,0,0,this);    // 显示 背 景 图 片
        g.drawImage(frame[num], x_pos, 0, this);   // 显 示 动 画 图 片
    }
    public void update(Graphics g)
    {
        paint(g);
    }
}

    这 个 Java 程 序 的 HTML 和 程 序 18.2 的 HTML 一样 , 所 以 你 完 全 可 以 拷 贝 上 一 个 程 序 的 HTML 文 件 , 而 无需 做 什 么 修 改 。 运 行 程 序 时 , 先 把 你 的 音 箱 打 开 , 你 将会 看 到 程 序 里 的 小 企 鹅 在 背 景 音 乐 的 伴 奏 下 一 个 接 一 个地 翻 筋 斗 。

    在 这 个 程 序 里 , 我 们 用 loop 来 播 放 背 景音 乐 , 所 以 只 要 加 载 了 它 , 音 乐 就 会 一 直 不 停 地 响 下 去。 即 使 用 户 已 经 离 开 了 这 个 主 页 。 这 对 于 用 户 而 言 是 很不 礼 貌 的 , 所 以 我 们 在 方 法 stop( ) 里 加 上 了 下 面 两 句 话来 中 止 背 景 音 乐 的 播 放 。
    if (bg_snd != null)
    bg_snd.stop( );

    最 后 我 们 应 该 知 道 , 声 音 文 件 的 播 放和 控 制 是 通 过 AudioClip 类 实 现 的 , 所 以 凡 是 会 出 声 音 的 Java 程 序 开 头 都 应 该 引 入 java.applet.AudioClip 这 个 程 序 包 。 也 就是 说 , 程 序 开 始 都 应 该 有 这 句 话 :
    import java.applet.AudioClip ;

    今 天 就 到 此 为 止 吧 , 你 终 于 可 以 一 边喝 咖 啡 一 边 欣 赏 自 己 做 出 来 的 载 歌 载 舞 的 小 动 画 , 好 好地 休 息 一 下 了 。

小 结

    学 习 完 今 天 的 课 程 , 本 书 已 经 接 近 尾声 , 你 已 经 学 会 了 Java 编 程 的 大 部 分 技 巧 , 接 下 来 的 事就 是 用 你 已 经 掌 握 的 Java 知 识 , 去 实 现 你 脑 子 里 各 种 稀奇 古 怪 的 想 法 , 做 出 让 人 惊 叹 的 主 页 来 。 最 后 我 再 对 今天 所 学 的 内 容 作 一 个 小 结 。

  • 制 作 动 画 之 前 , 你 应 该 先 准 备 好 一 组 图 片 ,你 的 动 画 就 是 从 这 一 组 图 片 中 产 生 出 来 的 。
  • 制 作 动 态 效 果 的 程 序 , 你 必 须 用 到 多 线 程 ,多 线 程 程 序 是 通 过 实 现 Runnable 接 口 得 到 的 。
  • 按 照 固 定 的 步 骤 , 一 步 一 步 地 写 好 start( ) 、 stop( ) 和 run( ) 就 可 以 完 成 多 线 程 程 序 。
  • 在 start( ) 里 , 产 生 新 的 线 程 , 我 们 用 它 来 播放 动 画 。 用 stop( ) 中 止 线 程 。 在 run( ) 里 写 播 放 动 画 的 代码 。
  • 在 程 序 里 加 上 自 己 的 update 方 法 就 可 以 消 除 动画 里 的 闪 烁 现 象 。
  • 连 续 翻 筋 斗 的 小 企 鹅 是 通 过 一 边 显 示 动 画 图片 , 一 边 改 变 显 示 位 置 实 现 的 。
  • 在 动 画 里 加 上 背 景 音 乐 真 是 再 绝 妙 不 过 了 , getAudioClip 使 你 能 够 加 载 Au 格 式 的 声 音 文 件 , 然 后 我 们 用 AudioClip 类 里 的 play 、 loop 和 stop 来 控 制 它 的 播 放 。

原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 b2公交车路线 b2驾驶证怎么考 b2维生素 b2公交车 b2幽灵轰炸机 www.b2 维生素b2多少钱 b2证 厦门b2路 b2能开什么车 常州b2 b2维生素的作用 维生素b2用量 维生素b2功效 维生素b2的功效 b2的作用和功效 美国隐形轰炸机 广州b2公交路线 b2考试项目 b2车 常州b2路线 维生素b2的作用与功效 b2可以开什么车 b2驾照怎么考 b2路公交车路线 b-2轰炸机 b2证能开什么车 bii 三b 3b走势带连线 tr3b 维生素b3 b3轰炸机 b3 3b 技嘉b85md3v 3b走势图带连线 tr3b反重力飞行器 3招教你看懂b超单 3b近500期走势带连线 3b走势近30期