AS3: Как упростить код Action Script 3? - PullRequest
0 голосов
/ 07 мая 2010

Вот пример, который я должен использовать, когда хочу создать кнопку с эффектом наведения мыши:

    this.buttonExample.buttonMode = true;
    this.buttonExample.useHandCursor = true;
    this.buttonExample.addEventListener(MouseEvent.CLICK,myaction);

Я новичок в AS3 - есть ли способ упростить этот код следующим образом:

    this.buttonExample.buttonMode = true;.useHandCursor = true;.addEventListener(MouseEvent.CLICK,myaction);

почему не работает?

Ответы [ 4 ]

4 голосов
/ 07 мая 2010

Если вы часто используете этот шаблон, вы можете сделать вспомогательную функцию:

public function setAsButton(button:Sprite, clickHandler:Function):void {
  button.buttonMode = button.userHandCursor = true;
  button.addEventListener(MouseEvent.CLICK, clickHandler);
}

Тогда позвоните куда-нибудь:

setAsButton(this.buttonExample, myaction);
4 голосов
/ 07 мая 2010

Это уже так просто, как может.Во-первых,

this.buttonExample.buttonMode = true;
this.buttonExample.useHandCursor = true;
this.buttonExample.addEventListener(MouseEvent.CLICK,myaction)

гораздо более читабельно, чем

this.buttonExample.buttonMode = true;.useHandCursor = true;.addEventListener(MouseEvent.CLICK,myaction);

. Всегда обращайте внимание на читаемость поверх всего остального.А во-вторых,

this.buttonExample.buttonMode = true; 

не возвращает объект, поэтому вы не можете взаимодействовать с чем-либо.

3 голосов
/ 07 мая 2010

Если вы чувствуете, что ввод this.buttonExample снова и снова слишком повторяется, просто присвойте этот объект переменной и используйте эту переменную в остальных операторах:

var b : Button = this.buttonExample;
b.buttonMode = true;
b.useHandCursor = true;
b.addEventListener(...);

Как уже упоминалось, есть и оператор with, но его использование не рекомендуется, поскольку он затрудняет чтение кода и может привести к странным результатам:

with (this.buttonExample) {
  buttonMode = true;
  useHandCursor = true;
  addEventListener(...);
}

Конечно, вы можете комбинировать эти предложения с другими приемами, такими как цепочки заданий:

var b : Button = this.buttonExample;
b.buttonMode = b.useHandCursor = true;
b.addEventListener(...);

Будьте очень осторожно, чтобы только таким образом связывать назначения, если назначенное значение неизменное (например, true, false, числа и строки, но нет (массивы или большинство других объектов), потому что тот же самый объект будет назначен всем переменным на левой стороне. Если значение является неизменным, это не имеет значения, но если оно изменчиво, вы можете получить странные результаты, как в этом примере:

 a = b = [ ];
 a.push(1);
 b.push(2);
 trace(a); // outputs 1, 2
 trace(b); // also outputs 1, 2

Причина этого результата в том, что a и b оба ссылаются на один и тот же массив 1028 *, и поскольку массивы являются изменяемыми, не имеет значения, как вы обращаетесь к объекту, он все равно будет изменен , a и b не ссылаются на разные массивы только потому, что они являются разными переменными.

Вы можете подумать, что можете сделать что-то вроде следующего, но это будет не работать.

// this will NOT work
var b : Button = this.buttonExample;
(b.buttonMode = b.useHandCursor = true).addEventListener(...);

Причина, по которой стоит сказать b.buttonMode = b.useHandCursor = true, но не добавлять .addEventListener(...), заключается в том, что значением выражения присваивания (например, b.buttonMode = true) является значение , присвоенное в левой части. (например, true). Если вы добавите .addEventListener(...) к этому, вы, по сути, говорите true.addEventListener(...), что явно не то, что вы хотите. Другими словами

b.buttonMode = b.useHandCursor = false;

эквивалентно

b.useHandCursor = false;
b.buttonMode = b.useHandCursor;

Который, как мы надеемся, также сделает перечисленные выше оговорки простыми.

0 голосов
/ 07 мая 2010

вы можете использовать оператор with . однако я бы не советовал вам делать это, поскольку это приводит к большой двусмысленности и неясности.

также вы можете иметь несколько назначений:

this.buttonExample.buttonMode = this.buttonExample.useHandCursor = true;

иногда это полезно, но для удобства чтения не стоит злоупотреблять им.

Greetz
back2dos

...