我不是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();
这就是现在的所有动作,但它仍然无法正常工作。有什么想法吗?
答案 0 :(得分:0)
在第2帧切换到第6帧时,检查stage是否具有事件侦听器fl_SwipeToGoToNextPreviousFrameA(),如果是,则将其删除。这应该可以解决你的错误。