AS3: Как диспетчеризировать событие от actionscript класса

У меня есть маленькое шахматное приложение, которое состоит из ячеек и плат. Когда пользователь перемещает объект в плату, я хочу, чтобы ячейка платы диспетчеризировала событие, таким образом, Совет может слушать его и позвонить слушателю

public class BoardCell extends Canvas
{
  public function Sample():void
  {
      ....Some code
      var e:Event = new Event("newMove")
  dispatchEvent(e);
  }
 }

Однако я не могу поймать событие в родительском классе шахматной доски (Не уверенный, что я прислушиваюсь к нему правильно),

    public class FrontEndBoard extends ChessBoard
{

    private var initialPoition:String;

    public function FrontEndBoard()
    {
        //TODO: implement function
        this.addEventListener(Event.ADDED_TO_STAGE, addedToStage);
        this.addEventListener("newMove", moveEvent);
        super();
    }
6
задан Oleg Tarasenko 21 February 2010 в 07:32
поделиться

3 ответа

у вас есть 2 варианта:

1) вместо this.addEventListener ("newMove", moveEvent); do BoardCell.addEventListener ("newMove", moveEvent);

2) иметь блок событий до родительского (предполагая, что BoardCell является отображаемым дочерним элементом FrontEndBoard, вы устанавливаете его как параметр в конструкторе событий)

var e: Событие = новое событие ("newMove", истина).

5
ответ дан 10 December 2019 в 00:37
поделиться

Событие, которое вы отправляете из класса BoardCell, должно всплыть, чтобы оно было перехвачено в любых родительских классах. Проверьте аргументы конструктора класса Event, где вы можете установить для флага «пузырьки» значение true.

1
ответ дан 10 December 2019 в 00:37
поделиться

Это может быть связано с тем, что вы не располагаете своим WebResponse или StreamReaders:

var request = WebRequest.Create(...);
using (var response = request.GetResponse())
{
    using (var responseStream = response.GetResponseStream())
    {
        using (var reader = new StreamReader(responseStream))
        {
            // use the reader
        }
    }
}
-121--3147264-

Вы можете делать именно то, что вы пытаетесь. Отсутствует только пользовательский конструктор, вызывающий конструктор по умолчанию:

struct Animal
{
    public string name = ""; 
    public static int weight = 20; 

    public Animal(bool someArg) : this() { }
}

Конструктор должен взять хотя бы один параметр, а затем переслать на this () для инициализации членов.

Причина, по которой это работает, заключается в том, что компилятор теперь имеет возможность обнаружить время, когда код должен выполняться для инициализации поля name : всякий раз, когда вы пишете new Animal (someBool) .

С любой структурой вы можете сказать new Animal () , но «пустые» животные могут быть созданы неявно во многих обстоятельствах в работе CLR, и нет способа гарантировать, что пользовательский код будет выполняться каждый раз, когда это произойдет.

-121--2166450-

Я не уверен, насколько точно в вашем приложении иерархически находятся FureEndBoard и BoardCell, но вам может потребоваться сообщить событию «newMove», что оно может пузырь .

var e:Event = new Event("newMove", true);
4
ответ дан 10 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: