杰瑞科技汇

Flash电子相册制作教程有哪些关键步骤?

这份教程将引导你创建一个经典的、带有缩略图导航和主图展示区域的电子相册,我们将使用 ActionScript 3.0 (AS3),这是目前最稳定和功能强大的版本。

Flash电子相册制作教程有哪些关键步骤?-图1
(图片来源网络,侵删)

准备工作

  1. 软件安装:确保你已经安装了 Adobe Flash Professional CC 或更高版本(现在软件已更名为 Adobe Animate,但其核心操作和 ActionScript 3.0 依然兼容)。
  2. 图片素材:准备 5-10 张你想要放入相册的图片,为了教程方便,请将它们命名为 jpg, jpg, jpg... 以此类推,并放在一个文件夹中。
  3. 新建文档
    • 打开 Flash,创建一个 ActionScript 3.0 的新文档。
    • 设置舞台大小,800x600 像素。
    • 背景色可以设为灰色(#CCCCCC),以便看清白色元素。

第一步:布局设计

我们将把相册分为三个主要部分:

  1. 主图展示区:顶部大区域,用于显示选中的图片。
  2. 缩略图导航区:底部区域,显示所有图片的缩略图,点击可切换主图。
  3. 标题和描述区:主图下方,显示图片的标题和描述。

操作步骤:

  1. 创建主图展示区

    • 新建一个图层,命名为 Main_Display
    • 使用 矩形工具,在舞台上绘制一个矩形,大小约为 780x400 像素,并填充白色,描边为灰色。
    • 选中这个矩形,按 F8 将其转换为 影片剪辑,命名为 Main_Display_MC
    • 双击进入 Main_Display_MC 的编辑模式,删除里面的矩形图形,只保留空的影片剪辑。
    • 选中这个空的影片剪辑,在属性面板中,给它一个 实例名称main_mc
    • 返回主场景。
  2. 创建缩略图导航区

    Flash电子相册制作教程有哪些关键步骤?-图2
    (图片来源网络,侵删)
    • 新建一个图层,命名为 Thumb_Nav
    • 使用 矩形工具,在主图展示区下方绘制一个矩形,作为缩略图的背景。
    • 新建一个图层,命名为 Thumbnails,这个图层将用于动态加载缩略图。
  3. 和描述区

    • 新建一个图层,命名为 Text
    • 使用 文本工具,在主图展示区下方创建一个 动态文本 框,用于显示标题,在属性面板中给它一个实例名称:title_txt
    • 再创建一个 动态文本 框,用于显示描述,实例名称:desc_txt

第二步:准备图片数据

为了方便管理,我们将图片信息(文件名、标题、描述)存储在一个数组中。

  1. 新建一个图层,命名为 Actions
  2. 选中 Actions 图层的第1帧,按 F9 打开 动作 面板。
  3. 输入以下代码来创建一个数组,请将你的图片文件名和对应的标题、描述填入其中。
// 图片数据数组
// 格式: { image: "图片文件名", title: "图片标题", description: "图片描述" }
var imageData:Array = [
    { image: "1.jpg", title: "美丽的风景", description: "这是一张在湖边拍摄的风景照,宁静而致远。" },
    { image: "2.jpg", title: "城市夜景", description: "繁华的都市夜晚,灯火辉煌,充满了活力。" },
    { image: "3.jpg", title: "可爱的小猫", description: "一只慵懒的小猫正在阳光下打盹。" },
    { image: "4.jpg", title: "山峦叠嶂", description: "雄伟的山脉在云雾中若隐若现,气势磅礴。" },
    { image: "5.jpg", title: "海边日落", description: "夕阳西下,金色的光芒洒在海面上,波光粼粼。" }
];

第三步:加载和显示主图

我们将编写代码来加载并显示第一张图片。

  1. 确保你还在 Actions 图层的动作面板中。
  2. imageData 数组下方,添加以下代码:
// 当前显示的图片索引
var currentIndex:int = 0;
// 加载并显示第一张图片
loadMainImage(currentIndex);
// 加载主图的函数
function loadMainImage(index:int):void {
    // 从数组中获取当前图片的数据
    var currentData:Object = imageData[index];
    // 创建一个Loader对象来加载图片
    var loader:Loader = new Loader();
    // 监听图片加载完成事件
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMainImageLoaded);
    // 开始加载图片
    loader.load(new URLRequest(currentData.image));
    // 在加载前,清空主图展示区
    main_mc.removeChildAt(0);
}
// 主图加载完成后的处理函数
function onMainImageLoaded(e:Event):void {
    // 获取加载完成的图片
    var loadedBitmap:Bitmap = e.target.content as Bitmap;
    // 将图片添加到主图展示区
    main_mc.addChild(loadedBitmap);
    // 更新标题和描述文本txt.text = imageData[currentIndex].title;
    desc_txt.text = imageData[currentIndex].description;
}

代码解释:

Flash电子相册制作教程有哪些关键步骤?-图3
(图片来源网络,侵删)
  • currentIndex:一个变量,用来记录当前正在显示的是第几张图片(从0开始)。
  • loadMainImage(index):一个函数,负责根据传入的 index 加载对应的图片。
  • Loader:Flash 用来加载外部文件(如图片、SWF)的标准类。
  • Event.COMPLETE:图片加载完成后会触发的事件。
  • onMainImageLoaded:当图片加载完成后,这个函数会被自动调用,它负责将图片添加到 main_mc 中,并更新文本框的内容。

Ctrl + Enter 测试一下,你应该能看到舞台上出现了 imageData 数组中定义的第一张图片和它的标题。


第四步:创建缩略图导航

我们将动态创建缩略图,并让它们可以点击。

  1. Actions 图层的代码末尾,添加以下函数和调用:
// 创建缩略图导航
createThumbnails();
// 创建缩略图的函数
function createThumbnails():void {
    // 计算缩略图之间的间距
    var spacing:int = 10;
    // 计算缩略图的总宽度
    var totalWidth:int = ( imageData.length * (100 + spacing) ) - spacing;
    // 计算起始X坐标,使缩略图居中显示
    var startX:int = (stage.stageWidth - totalWidth) / 2 + 50;
    // 循环遍历imageData数组,为每张图片创建一个缩略图
    for (var i:int = 0; i < imageData.length; i++) {
        // 创建一个Loader来加载缩略图
        var thumbLoader:Loader = new Loader();
        thumbLoader.load(new URLRequest(imageData[i].image));
        // 创建一个容器来包裹缩略图,方便添加事件和样式
        var thumbContainer:Sprite = new Sprite();
        thumbContainer.addChild(thumbLoader);
        // 设置容器的位置
        thumbContainer.x = startX + i * (100 + spacing);
        thumbContainer.y = 450; // 缩略图区域的Y坐标
        // 给这个容器一个属性,记录它对应的图片索引
        thumbContainer.index = i;
        // 添加鼠标事件
        thumbContainer.addEventListener(MouseEvent.CLICK, onThumbClick);
        thumbContainer.addEventListener(MouseEvent.ROLL_OVER, onThumbOver);
        thumbContainer.addEventListener(MouseEvent.ROLL_OUT, onThumbOut);
        // 将缩略图容器添加到舞台的Thumbnails图层上
        // 注意:这里我们直接添加到主场景,如果你有专门的图层容器,可以添加到那里
        this.addChild(thumbContainer);
    }
}
// 缩略图点击事件处理函数
function onThumbClick(e:MouseEvent):void {
    // 获取被点击的缩略图对应的索引
    var clickedIndex:int = e.currentTarget.index;
    // 更新当前索引
    currentIndex = clickedIndex;
    // 重新加载主图
    loadMainImage(currentIndex);
}
// 鼠标悬停效果
function onThumbOver(e:MouseEvent):void {
    e.currentTarget.alpha = 1.0; // 完全不透明
}
function onThumbOut(e:MouseEvent):void {
    e.currentTarget.alpha = 0.7; // 半透明
}

代码解释:

  • createThumbnails():这个函数会遍历 imageData 数组,为每一张图片创建一个 Loader 来加载缩略图。
  • Sprite:一个可以包含图形和子对象的轻量级容器,我们用它来包裹缩略图,这样就可以方便地给它添加事件和改变透明度。
  • thumbContainer.index = i:我们给每个缩略图容器添加了一个自定义属性 index,用来存储它对应的图片序号,这样在点击时,我们就能知道是哪张图片被点击了。
  • MouseEvent.CLICK:鼠标点击事件。
  • MouseEvent.ROLL_OVER / ROLL_OUT:鼠标悬停和移出事件,我们用它来制作一个简单的悬停效果(改变透明度)。

再次测试 Ctrl + Enter,现在你应该能看到底部出现了一排缩略图,并且点击任意一张,顶部的主图就会切换到对应的图片。


第五步:添加前进/后退按钮(可选)

为了让相册更易用,我们可以添加“上一张”和“下一张”按钮。

  1. 在舞台上创建按钮

    • Main_Display 图层上,使用 文本工具 输入文字 <-->
    • 分别选中它们,按 F8 转换为 按钮,实例名分别为 prev_btnnext_btn
    • 将它们放置在主图展示区的左右两侧。
  2. 编写按钮事件代码

    • 回到 Actions 图层,在 createThumbnails() 函数调用之后,添加以下代码:
// 给“上一张”按钮添加事件
prev_btn.addEventListener(MouseEvent.CLICK, onPrevClick);
// 给“下一张”按钮添加事件
next_btn.addEventListener(MouseEvent.CLICK, onNextClick);
// “上一张”按钮点击事件
function onPrevClick(e:MouseEvent):void {
    // 如果是第一张,则跳转到最后一张;否则,索引减1
    if (currentIndex > 0) {
        currentIndex--;
    } else {
        currentIndex = imageData.length - 1;
    }
    loadMainImage(currentIndex);
}
// “下一张”按钮点击事件
function onNextClick(e:MouseEvent):void {
    // 如果是最后一张,则跳转到第一张;否则,索引加1
    if (currentIndex < imageData.length - 1) {
        currentIndex++;
    } else {
        currentIndex = 0;
    }
    loadMainImage(currentIndex);
}

你的电子相册功能就基本完成了!你可以测试一下,应该可以通过点击缩略图、上一张/下一张按钮来浏览所有图片。


第六步:优化与美化

一个完整的相册还需要一些细节优化。

  1. 加载提示:在图片加载过程中,显示“加载中...”的文字。

    • Main_Display 图层上,创建一个静态文本,内容为“加载中...”,并将其放在 main_mc 的正下方。
    • 给这个文本一个实例名 loading_txt
    • 修改 loadMainImage 函数,在开始加载时显示提示,加载完成后隐藏。
    // 修改 loadMainImage 函数
    function loadMainImage(index:int):void {
        loading_txt.visible = true; // 显示加载提示
        var currentData:Object = imageData[index];
        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onMainImageLoaded);
        loader.load(new URLRequest(currentData.image));
        // 清空主图区
        if (main_mc.numChildren > 0) {
            main_mc.removeChildAt(0);
        }
    }
    // 修改 onMainImageLoaded 函数
    function onMainImageLoaded(e:Event):void {
        var loadedBitmap:Bitmap = e.target.content as Bitmap;
        main_mc.addChild(loadedBitmap);
        title_txt.text = imageData[currentIndex].title;
        desc_txt.text = imageData[currentIndex].description;
        loading_txt.visible = false; // 隐藏加载提示
    }
  2. 添加淡入淡出效果:让图片切换更平滑。

    • 我们可以使用 TweenLite(一个流行的动画引擎)或 Flash 自带的 Tween 类,这里简单介绍一下使用 Tween 类的方法。
    • 导入必要的类:
    import fl.transitions.Tween;
    import fl.transitions.TweenEvent;
    import fl.transitions.easing.Strong;
    • 修改 onMainImageLoaded 函数:
    function onMainImageLoaded(e:Event):void {
        var loadedBitmap:Bitmap = e.target.content as Bitmap;
        // 设置新图片的初始透明度为0
        loadedBitmap.alpha = 0;
        main_mc.addChild(loadedBitmap);
        // 创建一个Tween,让图片在1秒内淡入到1
        var myTween:Tween = new Tween(loadedBitmap, "alpha", Strong.easeOut, 0, 1, 1, true);
        title_txt.text = imageData[currentIndex].title;
        desc_txt.text = imageData[currentIndex].description;
        loading_txt.visible = false;
    }
  3. 为缩略图添加边框或选中效果:让当前显示的图片对应的缩略图与众不同。

    • onThumbClick 函数中,除了加载新图片,我们还要更新缩略图的样式。
    function onThumbClick(e:MouseEvent):void {
        var clickedIndex:int = e.currentTarget.index;
        currentIndex = clickedIndex;
        // 在加载新图之前,先重置所有缩略图的样式
        resetThumbnails();
        // 高亮当前选中的缩略图
        e.currentTarget.alpha = 1.0;
        // 可以在这里添加一个边框效果,比如画一个矩形
        // e.currentTarget.addChild( ...画一个红色矩形... );
        loadMainImage(currentIndex);
    }
    // 重置所有缩略图样式的函数
    function resetThumbnails():void {
        for (var i:int = 0; i < this.numChildren; i++) {
            var child:Object = this.getChildAt(i);
            // 假设缩略图容器都是Sprite类型
            if (child is Sprite && child.hasOwnProperty("index")) {
                child.alpha = 0.7;
            }
        }
    }

总结与最终代码

恭喜你!你已经成功创建了一个功能完善的 Flash 电子相册,这个教程涵盖了:

  • 场景布局:划分主图、缩略图、文本区域。
  • 数据管理:使用数组存储图片信息。
  • 动态加载:使用 Loader 类加载外部图片。
  • 事件处理:处理鼠标点击和悬停事件。
  • 循环逻辑:实现上一张/下一张的无缝循环。
  • 用户体验优化:加载提示、淡入淡出效果、选中高亮。

你可以基于这个基础,继续添加更多功能,

  • 自动播放功能(使用 Timer 类)。
  • 图片切换动画(如滑动、百叶窗等)。
  • 全屏查看功能。
  • 添加背景音乐。

希望这份详细的教程能对你有所帮助!

分享:
扫描分享到社交APP
上一篇
下一篇