2010-05-07 1 views
0

Вот пример, который я использовать, когда я хочу создать кнопку с мыши над эффектом:AS3: Как упростить Action Script 3 Code?

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); 

Почему это не работает?

+0

Зачем ему работать? – sharvey

+0

Я согласен с s.harvey, вы не можете просто придумать вещи и ожидать, что это сработает. – davr

ответ

4

Его уже так просто, как он есть. Во-первых

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

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

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

Всегда идти на readbility над чем-то еще. А во-вторых,

this.buttonExample.buttonMode = true; 

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

4

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

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

Затем вызовите его где-нибудь:

setAsButton(this.buttonExample, myaction); 
+1

И вы можете оставить «это». – bitc

+0

Я бы сделал еще один шаг и создаю класс var btn: Btn = new Btn (btnExample); btn.addEventListener (... – maxmc

0

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

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

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

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

Greetz
back2dos

+0

Я также читал, что «с» в AS3 имеет проблемы с производительностью. – Shiki

+0

@Shiki: он не должен иметь доступ к свойствам строго типизированным образом, но в противном случае разрешение свойства становится довольно дорогостоящим конечно, – back2dos

+0

Что вы понимаете под «доступным строго типизированным образом»? – Rihards

3

Если вы чувствуете, что набрав 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 как ссылки на тот же массив, и поскольку массивы являются изменяемыми, не имеет значения, как вы обращаетесь к объекту, он все равно будет изменен. 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; 

Что следует надеяться также сделать оговорки, упомянутые выше равнины.