私はフラッシュは初めてではありませんが、flashsc(またはむしろアニメーションcc)でアプリを作成しようとすると、ユーザーの音楽理論(音楽の読み方など)。私が望むのは、ユーザーがスワイプできる別の「スクリーン」を使って、別々のフレームに異なるレッスンを持たせることです。私は、adobeがスワイプギャラリーテンプレートで提供するスワイプコードの複数のコピーを使用しています。actionscriptのeventlistenerを削除する際の問題
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()
もボタンがあります:フレーム5に
、私は次のように使用しますスワイプされているムービークリップ "lsn112"の一部としてそれがポイントに正常に動作しますが、私はイベントリスナーが適切に削除されていないと思う
stop();
fwdtest.addEventListener(MouseEvent.CLICK, GoRootNext112);
function GoRootNext112(event:MouseEvent):void
{
MovieClip(root).nextFrame();
}
:これが関連しているかいないが、コードがある場合に知ってはいけません。ユーザーがギャラリーをスワイプすると、期待通りに機能します。その後、次のギャラリーに移動することができます。次のギャラリーも期待通りに機能します。これまでのところエラーはありません。彼らはその後、ギャラリーに戻って、メニューに戻って、しかし、もし、私は、エラーコード1009を取得:
TypeError: Error #1009: Cannot access a property or method of a null object reference. at MusicTheorySwipe_fla::MainTimeline/slideRightA()[MusicTheorySwipe_fla.MainTimeline::frame6:32] at MusicTheorySwipe_fla::MainTimeline/fl_SwipeToGoToNextPreviousFrameA()[MusicTheorySwipe_fla.MainTimeline::frame6:16] at runtime::ContentPlayer/simulationSendGestureEvent() at runtime::SimulatedContentPlayer/clientSocketDataHandler()
何私を混乱することは、私はこの時点でフレーム5を使用していますということです、まだ私が取得しますエラーはフレーム6を参照しています。フラッシュは、フレーム5にあるにもかかわらず、フレーム6のイベントリスナにジェスチャを送信しようとしているように見えます。しかし、コードに慣れていないので、コードを壊さずにいつeventListenerを削除するのか分かりません。
関連する.fla、.swf、および.xmlファイルを含むzipへのリンクです。 http://speedy.sh/5JP7c/MusicTheorySwipe.zip
これは多くのフレームにわたって使用したい方法であるため、私は本当にあなたの時間を感謝し、これを解決するのに役立ちます。
EDIT
[OK]を、私は、試してみて、どの容疑者を排除することができる最高のようなコードを簡素化しました。
フレーム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();
そして、それが今、まだそれはまだ動作していないすべてのActionScriptです。何か案は?
フレーム5でリスナーTransformGestureEvent.GESTURE_SWIPEを定義し、フレーム6でリスナーを定義しました。フレーム6に達すると、両方が実行を開始します。あなたがそれらを必要としないときにそれらを削除する必要があります –
ええ、それはイベントリスナーとは何かと思っていた、私はちょうど何らかの理由で間違ったものに焦点を当てていた。先端に感謝します。 –