在actionscript

时间:2016-04-10 11:05:38

标签: android actionscript-3 flash actionscript animate-cc

我不是flash的新手,但我是一个带有动作脚本的noob,试图在flash pro中构建一个应用程序(或者更确切地说是动画cc),它将(希望)教会用户音乐理论(如何阅读音乐等)。我想要的是在不同的框架上进行不同的课程,使用单独的"屏幕"用户可以刷卡。我使用了adobe在其滑动图库模板中提供的滑动代码的多个副本。

在第5帧,我使用以下内容:

stop()

Multitouch.inputMode = MultitouchInputMode.GESTURE;

var currentGalleryItem:Number = 1;
var totalGalleryItems:Number = 10;

stage.addEventListener (TransformGestureEvent.GESTURE_SWIPE, fl_SwipeToGoToNextPreviousFrameB);

function fl_SwipeToGoToNextPreviousFrameB(event:TransformGestureEvent):void
{
    if(event.offsetX == 1)
    {
        if(currentGalleryItem > 1){
            currentGalleryItem--;
            slideRight();
        }
    }
    else if(event.offsetX == -1)
    {
        if(currentGalleryItem < totalGalleryItems){
            currentGalleryItem++;
            slideLeft();
        }
    }
}
var slideCounter:Number = 0;
function slideLeft(){
    lsn112.addEventListener("enterFrame", moveGalleryLeft);
}
function slideRight(){
    lsn112.addEventListener("enterFrame", moveGalleryRight);
}

function moveGalleryLeft(evt:Event){
    lsn112.x -= 128;
    slideCounter++;
    if(slideCounter == 10){
        lsn112.removeEventListener("enterFrame", moveGalleryLeft);
        slideCounter = 0;
    }
}
function moveGalleryRight(evt:Event){
    lsn112.x += 128;
    slideCounter++;
    if(slideCounter == 10){
        lsn112.removeEventListener("enterFrame", moveGalleryRight);
        slideCounter = 0;
    }
}

Home112.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame_22);

function fl_ClickToGoToAndStopAtFrame_22(event:MouseEvent):void
{
    gotoAndStop(2);
}

stop()

第6帧几乎相同,只是变量,函数等的名称不同:

stop()

Multitouch.inputMode = MultitouchInputMode.GESTURE;

var currentGalleryItemA:Number = 1;
var totalGalleryItemsA:Number = 11;

stage.addEventListener (TransformGestureEvent.GESTURE_SWIPE, fl_SwipeToGoToNextPreviousFrameA);

function fl_SwipeToGoToNextPreviousFrameA(event:TransformGestureEvent):void
{
    if(event.offsetX == 1)
    {
        if(currentGalleryItemA > 1){
            currentGalleryItemA--;
            slideRightA();
        }
    }
    else if(event.offsetX == -1)
    {
        if(currentGalleryItemA < totalGalleryItemsA){
            currentGalleryItemA++;
            slideLeftA();
        }
    }
}
var slideCounterA:Number = 0;
function slideLeftA(){
    lsn113.addEventListener("enterFrame", moveGalleryLeftA);
}
function slideRightA(){
    lsn113.addEventListener("enterFrame", moveGalleryRightA);
}

function moveGalleryLeftA(evt:Event){
    lsn113.x -= 128;
    slideCounterA++;
    if(slideCounterA == 10){
        lsn113.removeEventListener("enterFrame", moveGalleryLeftA);
        slideCounterA = 0;
    }
}
function moveGalleryRightA(evt:Event){
    lsn113.x += 128;
    slideCounterA++;
    if(slideCounterA == 10){
        lsn113.removeEventListener("enterFrame", moveGalleryRightA);
        slideCounterA = 0;
    }
}

Home113.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame_23);

function fl_ClickToGoToAndStopAtFrame_23(event:MouseEvent):void
{
    gotoAndStop(2);
}

stop()

还有一个按钮作为动画片段的一部分&#34; lsn112&#34;正在刷卡。不知道这是否相关,但代码是:

stop();

fwdtest.addEventListener(MouseEvent.CLICK, GoRootNext112);

function GoRootNext112(event:MouseEvent):void
{
    MovieClip(root).nextFrame();
}

它可以正常工作,但我认为没有正确删除eventlistener。当用户在图库中滑动时,它会按预期工作。然后他们可以移动到下一个画廊,这也按预期工作。到目前为止没有错误。但是,如果他们然后返回菜单,然后返回到库,我会收到错误代码1009:

  

TypeError:错误#1009:无法访问null的属性或方法   对象参考。在   MusicTheorySwipe_fla :: MainTimeline / slideRightA()[MusicTheorySwipe_fla.MainTimeline :: frame6:32]     在   MusicTheorySwipe_fla :: MainTimeline / fl_SwipeToGoToNextPreviousFrameA()[MusicTheorySwipe_fla.MainTimeline :: frame6:16]     在运行时:: ContentPlayer / simulationSendGestureEvent()at   运行时:: SimulatedContentPlayer / clientSocketDataHandler()

让我感到困惑的是,我现在正在使用第5帧,但是我在引用第6帧时遇到错误。在我看来,闪存试图在第6帧向eventlistener发送手势,即使我是&#39 ; m在第5帧,我猜测的是没有删除的事件监视器。但是,对于代码不熟悉,我不知道何时删除eventlistener而不会破坏代码。

这是指向包含相关.fla,.swf和.xml文件的zip的链接。 http://speedy.sh/5JP7c/MusicTheorySwipe.zip

由于这是我想在许多帧中使用的方法,我非常感谢您的时间和帮助解决这个问题。

修改

好的,我尽可能地简化了代码,试图消除任何嫌疑人。

第5帧:

Multitouch.inputMode = MultitouchInputMode.GESTURE;

stage.addEventListener(TransformGestureEvent.GESTURE_SWIPE , onSwipeA);
var currentGalleryItemA:Number = 1;
var totalGalleryItemsA:Number = 5;
function onSwipeA (e:TransformGestureEvent):void{

//User swiped towards right
if (e.offsetX == 1) {
    if(currentGalleryItemA > 1){
        currentGalleryItemA--;
        lsn113.x += 1280;
    }
}

//User swiped towards left
if (e.offsetX == -1) {
    if(currentGalleryItemA < totalGalleryItemsA){
    currentGalleryItemA++;
    lsn113.x -= 1280;
        if(currentGalleryItemA == totalGalleryItemsA){
        nextFrame()
        }
    }
}
}
stop();

第6帧:

stage.removeEventListener(TransformGestureEvent.GESTURE_SWIPE , onSwipeA);

Multitouch.inputMode = MultitouchInputMode.GESTURE;

stage.addEventListener(TransformGestureEvent.GESTURE_SWIPE , onSwipeB);
var currentGalleryItemB:Number = 1;
var totalGalleryItemsB:Number = 11;
function onSwipeB (e:TransformGestureEvent):void{

//User swiped towards right
if (e.offsetX == 1) {
    if(currentGalleryItemB > 1){
        currentGalleryItemB--;
        lsn112.x += 1280;
    }
}

//User swiped towards left
if (e.offsetX == -1) {
    if(currentGalleryItemB < totalGalleryItemsB){
        currentGalleryItemB++;
        lsn112.x -= 1280;
    }
    if(currentGalleryItemB == totalGalleryItemsB){
        nextFrame()
    }
}
}

stop();

这就是现在的所有动作,但它仍然无法正常工作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在第2帧切换到第6帧时,检查stage是否具有事件侦听器fl_SwipeToGoToNextPreviousFrameA(),如果是,则将其删除。这应该可以解决你的错误。