Прокрутка на мобильных устройствах с помощью AS3 AIR?

Я сгенерировал кнопку вызова XML в клип.

Вот код

import flash.display.MovieClip;
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.plugins.*;
import flash.geom.Rectangle;
import flash.utils.getTimer;
import flash.events.MouseEvent;
import flash.text.*;
import flash.display.*;
TweenPlugin.activate([ThrowPropsPlugin]);

var Buttons = new Button_mc();
var across: int = 2;

function generatebtn() {
  for (var i = 0; i < buttonno; i++) {
    Buttons = new Button_mc();
    Buttons.name = "Button" + i;
    Buttons.TypeofQuestions.text = Gk_mc.storeQuesType[i];
    var row: int = Math.floor(i / across);
    var col: int = i % 2;
    MyMovieClip.mc_2.addChild(Buttons);
    Buttons.x = col * (Buttons.width) + 25;
    Buttons.y = row * (Buttons.height);
    Buttons.buttonMode = true;
    Buttons.addEventListener(MouseEvent.CLICK, accessclicking);
  }

  function accessclicking(e: Event): void {
    trace(e.currentTarget.name);
  }
}
generatebtn();

Он правильно работает с событием нажатия кнопки.

Когда я добавляю больше кода, кнопки, нажимающие Function, не работают. См. ниже код:

// ----- set up masking boundary for list ------ //

var bounds: Rectangle = new Rectangle(0, 0, MyMovieClip.mc_2.width, 600);

var blitMask: BlitMask = new BlitMask(MyMovieClip.mc_2, bounds.x, bounds.y, bounds.width, bounds.height, false);

var t1: uint, t2: uint, y1: Number, y2: Number, yOverlap: Number, yOffset: Number;

blitMask.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);

function mouseDownHandler(event: MouseEvent): void {
  TweenLite.killTweensOf(MyMovieClip.mc_2);
  y1 = y2 = MyMovieClip.mc_2.y;
  yOffset = this.mouseY - MyMovieClip.mc_2.y;
  yOverlap = Math.max(0, MyMovieClip.mc_2.height - bounds.height);
  t1 = t2 = getTimer();
  MyMovieClip.mc_2.stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
  MyMovieClip.mc_2.stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}

function mouseMoveHandler(event: MouseEvent): void {
  var y: Number = this.mouseY - yOffset;

  // -----  mc's position exceeds the bounds, make it drag only half as far with each mouse movement (like iPhone/iPad behavior) ------ //

  if (y > bounds.top) {
    MyMovieClip.mc_2.y = (y + bounds.top) * 0.5;
  } else if (y < bounds.top - yOverlap) {
    MyMovieClip.mc_2.y = (y + bounds.top - yOverlap) * 0.5;
  } else {
    MyMovieClip.mc_2.y = y;
  }

  blitMask.update();
  var t: uint = getTimer();

  // -----If the frame rate is too high, we won't be able to track the velocity as well, so only update the values 20 times per second ------ //

  if (t - t2 > 50) {
    y2 = y1;
    t2 = t1;
    y1 = MyMovieClip.mc_2.y;
    t1 = t;
  }
  event.updateAfterEvent();
}

function mouseUpHandler(event: MouseEvent): void {
  MyMovieClip.mc_2.stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
  MyMovieClip.mc_2.stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
  var time: Number = (getTimer() - t2) / 1000;
  var yVelocity: Number = (MyMovieClip.mc_2.y - y2) / time;
  ThrowPropsPlugin.to(MyMovieClip.mc_2, {
      throwProps: {
        y: {
          velocity: yVelocity,
          max: bounds.top,
          min: bounds.top - yOverlap,
          resistance: 300
        }
      },
      onUpdate: blitMask.update,
      ease: Strong.easeOut
    },
    10, 0.3, 1);
}


/* Drag and Drop
Makes the specified symbol instance move-able with drag and drop.
*/

MyMovieClip.mc_2.addEventListener(MouseEvent.MOUSE_DOWN, fl_ClickToDrag);

function fl_ClickToDrag(event: MouseEvent): void {
  MyMovieClip.mc_2.startDrag();
}

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);

function fl_ReleaseToDrop(event: MouseEvent): void {
  MyMovieClip.mc_2.stopDrag();
}

Прокрутка работает правильно, но я хочу делать прокрутку с помощью нажатия кнопок. Это давняя проблема 6 месяцев назад, но она до сих пор не решена.


person Anas    schedule 07.08.2019    source источник
comment
Кажется, что объект blitMask — это визуально прозрачная вещь, парящая над прокручиваемым содержимым, верно?   -  person Organis    schedule 07.08.2019
comment
да, объект blitMask — это визуально прозрачная вещь, нависающая над прокручиваемым содержимым, я хочу прокручивать и нажимать кнопки.   -  person Anas    schedule 07.08.2019
comment
Что ж, вам следует придумать другой способ прокрутки. Объект blitMask перехватывает все события мыши, клики тоже, и не пропускает их к расположенным под ним кнопкам. Вот оно.   -  person Organis    schedule 07.08.2019
comment
дайте мой исходник. или любой другой простой способ решить эту проблему.   -  person Anas    schedule 08.08.2019


Ответы (1)


Я предполагаю, что ваши кнопки находятся ниже blitMask.

Вы можете сделать так, чтобы события мыши проходили через любой DisplayObject, установив для свойства mouseEnabled значение false.

blitMask.mouseEnabled = false;
person PitchBlackCat    schedule 09.08.2019
comment
см. эту ссылку Я хочу использовать прокрутку с помощью MouseEvent в Каждая кнопка - person Anas; 09.08.2019