Надеюсь получить здесь несколько советов. Возникли проблемы с тем, что казалось бы базовой навигационной системой для iPad-презентации.Слайд-шоу стиль навигации. addChild & arrays
У меня для этого примера 5 страниц в моей библиотеке, которые я добавил в массив. Эффект, на который я нацелился, когда пользователь перебирается, чтобы перейти на следующую страницу, должен: - Добавить следующую страницу на сцену с помощью addChild (вне поля зрения) - Tween текущая страница выходит из вида, следующая страница в поле зрения - Удалите старую страницу с помощью removeChild.
Причина в том, что у меня будет большое количество страниц с тяжелой анимацией, и я стараюсь, чтобы они не присутствовали на сцене сразу, чтобы предотвратить падение FPS.
Вот мой код. Я пробовал несколько вещей, таких как попытка повторно установить currentPage с массивом, но не повезло. Вытягивал мои волосы на несколько часов!
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.plugins.*;
import flash.events.MouseEvent;
import flash.display.MovieClip;
//touch device swiping
Multitouch.inputMode = MultitouchInputMode.GESTURE;
stage.addEventListener (TransformGestureEvent.GESTURE_SWIPE, fl_SwipeHandler_2);
function fl_SwipeHandler_2(event:TransformGestureEvent):void{
switch(event.offsetX)
{
//swiped right, go back
case 1:
{
prevPage();
break;
}
//swiped left, go forward
case -1:
{
nextPage();
break;
}
}
}
//fill array with movieclip pages from library
var pageArray:Array = [page1, page2, page3, page4, page5];
var currentArray:Number = 0;
//add the first page in the array to the stage as 'currentPage'
var currentPage:MovieClip = new pageArray[currentArray];
addChild(currentPage);
function nextPage(event:TouchEvent):void{
if (currentArray < pageArray.length - 1){
//tween currentPage out to the left, when animation ends removeChild(currentPage);
TweenMax.to(currentPage, 1, {x:-1024,onComplete:removeChild,onCompleteParams:[currentPage]});
//move to the next item in the array
currentArray++
//add the next item in the array to the stage as 'newPage'
var newPage:MovieClip = new pageArray[currentArray]
addChild(newPage);
newPage.x = 1024;
//tween newPage into view
TweenMax.to(newPage, 1, {x:0,onComplete:updatePage});
/*
PROBLEM STARTS HERE:
- if nextPage is executed again, it will try to tween 'currentPage' which has been removed from the stage.
- need to rename/change 'newPage' into 'currentPage' here but don't know how.
*/
}
}
function prevClicked(event:MouseEvent):void{
if (currentArray > 0){
trace("same as nextPage in reverse");
}
}
проблема решена EDIT
Так с помощью aesphere и некоторых проб и ошибок, это, кажется, работает. Одной из основных проблем было отсутствие и () вокруг массивов, например: новая страница1(), новая страница2(). и т. д.
Multitouch.inputMode = MultitouchInputMode.GESTURE;
stage.addEventListener(TransformGestureEvent.GESTURE_SWIPE, fl_SwipeHandler_2);
function fl_SwipeHandler_2(event:TransformGestureEvent):void
{
switch (event.offsetX)
{
case 1 :
{
prevPage();
break;
};
case -1 :
{
nextPage();
break;
}
}
};
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.plugins.*;
import flash.events.MouseEvent;
import flash.display.MovieClip;
var pageArray:Array = [new page1(), new page2(), new page3(), new page4(), new page5()];
var currentPage:Number = 0;
addChild(pageArray[currentPage]);
function nextPage():void
{
if (currentPage < pageArray.length - 1)
{
TweenMax.to(pageArray[currentPage], 1, {x:-1024, onComplete:removeChild, onCompleteParams:[pageArray[currentPage]]});
currentPage++;
pageArray[currentPage].x = 1024;
addChild(pageArray[currentPage]);
TweenMax.to(pageArray[currentPage], 1, {x:0});
}
}
function prevPage():void
{
if (currentPage > 0)
{
TweenMax.to(pageArray[currentPage], 1, {x:1024, onComplete:removeChild, onCompleteParams:[pageArray[currentPage]]});
currentPage--;
pageArray[currentPage].x = -1024;
addChild(pageArray[currentPage]);
TweenMax.to(pageArray[currentPage], 1, {x:0});
}
}
Большое спасибо за помощь. У меня все еще есть некоторые проблемы, но я просто подключил ваш предоставленный код и не мог понять, что делать с onComplete: updatePage, поэтому я удалил его, но когда я тестирую, я получаю эту ошибку: «TypeError: Error # 1034 : Тип Coercion failed: невозможно преобразовать page1 $ в flash.display.DisplayObject. \t at Examples_fla :: MainTimeline/frame1() " – user1172903
Что такое page1, page2, page3 и т. Д.? как вы вытаскиваете вещи из библиотеки? is page1 имя класса или просто имя символа? Если это просто имя, вам нужно убедиться, что вы сначала выбрали «экспорт для ActionScript» в свойствах символа, а не просто [page1, page2 ...] и т. Д., Он станет var pageArray: Array = [новая страница1(), новая страница2(), новая страница3(), новая страница4(), новая страница5()]; – Aesphere