Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Actionscript 3.0:控制添加了数组的子movieclips_Arrays_Actionscript 3_Slideshow - Fatal编程技术网

Arrays Actionscript 3.0:控制添加了数组的子movieclips

Arrays Actionscript 3.0:控制添加了数组的子movieclips,arrays,actionscript-3,slideshow,Arrays,Actionscript 3,Slideshow,我正试图建立一个通用的幻灯片放映闪存文件控制按键。。。向右和向左箭头可转到下一张/上一张幻灯片,向下和向上可调用/取消调用单个幻灯片上的单个动画/项目符号/任何内容。 到目前为止,我设法得到了一个文件,可以加载一个movieclip中的所有页面,并使用左右箭头和一个很好的淡出淡入效果,即使是在非常快的速度下也能快速浏览它们。 经过几个小时和大量的谷歌搜索,我一点也不知道现在如何控制单页movieclips。到目前为止,我上传了该文件: 您可以看到,我(到目前为止)试图控制pageHolder.

我正试图建立一个通用的幻灯片放映闪存文件控制按键。。。向右和向左箭头可转到下一张/上一张幻灯片,向下和向上可调用/取消调用单个幻灯片上的单个动画/项目符号/任何内容。 到目前为止,我设法得到了一个文件,可以加载一个movieclip中的所有页面,并使用左右箭头和一个很好的淡出淡入效果,即使是在非常快的速度下也能快速浏览它们。 经过几个小时和大量的谷歌搜索,我一点也不知道现在如何控制单页movieclips。到目前为止,我上传了该文件:

您可以看到,我(到目前为止)试图控制pageHolder.Pages.page1 movieclip到gotoAndStop(2)的尝试只会导致加载到数组中位置0的pageHolder.Pages movieclip转到第2帧,从而显示第二页

迄今为止的代码:

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);
}