Arrays Actionscript 3.0:控制添加了数组的子movieclips
我正试图建立一个通用的幻灯片放映闪存文件控制按键。。。向右和向左箭头可转到下一张/上一张幻灯片,向下和向上可调用/取消调用单个幻灯片上的单个动画/项目符号/任何内容。 到目前为止,我设法得到了一个文件,可以加载一个movieclip中的所有页面,并使用左右箭头和一个很好的淡出淡入效果,即使是在非常快的速度下也能快速浏览它们。 经过几个小时和大量的谷歌搜索,我一点也不知道现在如何控制单页movieclips。到目前为止,我上传了该文件: 您可以看到,我(到目前为止)试图控制pageHolder.Pages.page1 movieclip到gotoAndStop(2)的尝试只会导致加载到数组中位置0的pageHolder.Pages movieclip转到第2帧,从而显示第二页 迄今为止的代码:Arrays Actionscript 3.0:控制添加了数组的子movieclips,arrays,actionscript-3,slideshow,Arrays,Actionscript 3,Slideshow,我正试图建立一个通用的幻灯片放映闪存文件控制按键。。。向右和向左箭头可转到下一张/上一张幻灯片,向下和向上可调用/取消调用单个幻灯片上的单个动画/项目符号/任何内容。 到目前为止,我设法得到了一个文件,可以加载一个movieclip中的所有页面,并使用左右箭头和一个很好的淡出淡入效果,即使是在非常快的速度下也能快速浏览它们。 经过几个小时和大量的谷歌搜索,我一点也不知道现在如何控制单页movieclips。到目前为止,我上传了该文件: 您可以看到,我(到目前为止)试图控制pageHolder.
import flash.display.Sprite;
import flash.events.MouseEvent;
import com.greensock.*;
import flash.display.MovieClip;
// instantiate a variable to find number of pages
var numberOfPages:Pages = new Pages();
// instantiate an array to hold the page movieclips
var pageArray:Array = new Array();
// instantiate a container to hold the pages
var pageHolder:Sprite = new Sprite();
// declare variables that will hold reference to the current page IDs
var targetIDold:int = 0;
var targetIDnew:int = 0;
// declare a variable that will hold the current direction of slide movement
var movement:int = -1;
// call a function that builds the application
// pass in the number of pages in fl_prevSlide
buildApp(numberOfPages.totalFrames);
// this function builds the application
function buildApp(n:int):void
{
// declare variables for the pages
var p:Pages;
// instantiate a new Page, send its playhead to the current value of i+1
// it is necessary to add 1 to the value of i, since i starts at 0, while the timeline starts at 1
for (var i:int = 0; i < n; i++)
{
p = new Pages();
p.gotoAndStop(i + 1);
pageArray.push(p);
}
// set the position of the pageHolder relative to the buttonHolder
pageHolder.x = pageHolder.y = 0;
// add the first page (at index 0) from pageArray to pageHolder
pageHolder.addChild(pageArray[targetIDnew]);
// add pageHolder and buttonHolder to the stage
addChild(pageHolder);
}
//Adding Listener and corresponding function to change between slides
stage.addEventListener(KeyboardEvent.KEY_DOWN, f_changeSlide);
function f_changeSlide(evt:KeyboardEvent):void
{
if(evt.keyCode == 37) // left arrow
{
f_prevSlide();
}
else if (evt.keyCode == 39 || evt.keyCode == 32) // right arrow or space
{
f_nextSlide();
}
}
function f_prevSlide():void
{
if(targetIDnew > 0)
{
movement = -1;
targetIDnew -= 1;
f_addPage();
}
}
function f_nextSlide():void
{
if(targetIDnew < (numberOfPages.totalFrames - 1))
{
movement = 1;
targetIDnew += 1;
f_addPage();
}
}
function f_addPage():void
{
// use the targetID variable to access the corresponding index in the pageArray and assign it to a temporary variable
targetIDold = targetIDnew - movement;
var _mcOld:MovieClip = MovieClip(pageArray[targetIDold]);
var _mcNew:MovieClip = MovieClip(pageArray[targetIDnew]);
//avoid flickering
if (_mcNew.alpha == 1) {
_mcNew.alpha = 0;
}
// add the temp variable to pageHolder
pageHolder.addChild(_mcNew);
// tween the temp variable to the specified properties, then call a function to remove the previous page
// new page gets faded in, old page gets faded out
TweenMax.to(_mcNew, 1.5, {alpha:1});
TweenMax.to(_mcOld, 1.5, {alpha:0, onComplete:f_removePage});
}
function f_removePage():void
{
// previous page will always be at index 0; remove it
// the new page just added will drop down to index 0 when the previous page is removed
pageHolder.removeChildAt(0);
}
//Trying to advance / decrease the timeline in the movieclips of the single pages by pressing down / up
stage.addEventListener(KeyboardEvent.KEY_DOWN, f_changeFrame);
function f_changeFrame(evt:KeyboardEvent):void
{
if(evt.keyCode == 40) // down arrow
{
f_nextFrame();
}
else if (evt.keyCode == 38) // up arrow
{
f_prevFrame();
}
}
function f_nextFrame():void
{
var w:uint = pageHolder.numChildren - 1 ;
(pageHolder.getChildAt(w) as MovieClip).gotoAndStop(currentFrame + 1);
// for (var i:uint = 0; i < pageHolder.numChildren; i++)
// {
// trace (+i+'.\t name:' + pageHolder.getChildAt(i).name + '\t type:' + typeof (pageHolder.getChildAt(i)));
// }
trace ("down!");
}
function f_prevFrame():void
{
var w:uint = pageHolder.numChildren - 1 ;
(pageHolder.getChildAt(w) as MovieClip).gotoAndStop(currentFrame - 1);
// for (var i:uint = 0; i < pageHolder.numChildren; i++)
// {
// trace (+i+'.\t name:' + pageHolder.getChildAt(i).name + '\t type:' + typeof (pageHolder.getChildAt(i)));
// }
trace ("up!");
}
导入flash.display.Sprite;
导入flash.events.MouseEvent;
导入com.greensock.*;
导入flash.display.MovieClip;
//实例化一个变量以查找页数
var numberOfPages:Pages=新页面();
//实例化一个数组以保存页面movieclips
var pageArray:Array=new Array();
//实例化一个容器来保存页面
var pageHolder:Sprite=新Sprite();
//声明将包含对当前页面ID的引用的变量
var targetIDold:int=0;
var targetIDnew:int=0;
//声明一个变量,该变量将保持滑动运动的当前方向
变量移动:int=-1;
//调用生成应用程序的函数
//在fl_幻灯片中输入页数
buildApp(页数.总帧数);
//此函数用于构建应用程序
函数buildApp(n:int):无效
{
//为页面声明变量
var-p:Pages;
//实例化一个新页面,将其播放头发送到当前值i+1
//有必要将1添加到i的值中,因为i从0开始,而时间线从1开始
对于(变量i:int=0;i0)
{
运动=-1;
targetIDnew-=1;
f_addPage();
}
}
函数f_nextSlide():void
{
如果(targetIDnew<(numberOfPages.totalFrames-1))
{
运动=1;
targetIDnew+=1;
f_addPage();
}
}
函数f_addPage():void
{
//使用targetID变量访问pageArray中的相应索引,并将其分配给临时变量
targetIDold=targetIDnew-移动;
var_mcOld:MovieClip=MovieClip(pageArray[targetIDold]);
var_mcNew:MovieClip=MovieClip(pageArray[targetIDnew]);
//避免闪烁
如果(_mcNew.alpha==1){
_mcNew.alpha=0;
}
//将temp变量添加到pageHolder
pageHolder.addChild(_mcNew);
//将temp变量设置为指定的属性,然后调用函数删除上一页
//新页面淡入,旧页面淡出
TweenMax.to(_mcNew,1.5,{alpha:1});
TweenMax.to(_mcOld,1.5,{alpha:0,onComplete:f_removePage});
}
函数f_removePage():void
{
//上一页将始终位于索引0处;请将其删除
//删除上一页时,刚刚添加的新页将下降到索引0
pageHolder.removeChildAt(0);
}
//尝试通过按下/向上键来提前/缩短单个页面的电影剪辑中的时间线
stage.addEventListener(KeyboardEvent.KEY\u DOWN,f\u changeFrame);
函数f_changeFrame(evt:KeyboardEvent):无效
{
if(evt.keyCode==40)//向下箭头
{
f_nextFrame();
}
else if(evt.keyCode==38)//向上箭头
{
f_prevFrame();
}
}
函数f_nextFrame():void
{
变量w:uint=pageHolder.numChildren-1;
(pageHolder.getChildAt(w)作为MovieClip.gotoAndStop(当前帧+1);
//对于(变量i:uint=0;i
编辑:稍微澄清一下代码
编辑2:TL;DR:问题是这三个函数的最后一位代码无法控制mc page1的时间线,mc page1是mc pages的子代,它被逐帧推送到数组中,并在运行时加载到sprite pageHolder中。如何控制单页movieclips的时间线?终于开始工作了。这将是一个完美的powerpoint替代品:D 您需要将单个幻灯片命名为
page0
、page1
等,然后可以使用此代码控制其时间轴(只需替换上述问题中列出的功能):
你能更具体地描述一下这句话吗?“我一点也不明白
function f_nextFrame():void
{
var temp:uint = pageHolder.numChildren - 1;
var frame:uint = ((pageHolder.getChildAt(temp) as MovieClip)["page" + targetIDnew].currentFrame);
(pageHolder.getChildAt(temp) as MovieClip)["page" + targetIDnew].gotoAndStop(frame + 1);
}
function f_prevFrame():void
{
var temp:uint = pageHolder.numChildren - 1;
var frame:uint = ((pageHolder.getChildAt(temp) as MovieClip)["page" + targetIDnew].currentFrame);
(pageHolder.getChildAt(temp) as MovieClip)["page" + targetIDnew].gotoAndStop(frame - 1);
}