2014-01-18 2 views
0

Я пытаюсь использовать переменную экземпляра в качестве значения параметра в методе, но это дает мне ошибку. «Инициализатор параметров неизвестен или не является константой времени компиляции»AS3: Использование переменных экземпляра в качестве значений параметра по умолчанию

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

public function attack(target:Fighter=this.target):void { 

} 
+2

Вы не можете использовать this.target в качестве аргумента. Аргументы - это значения, выходящие за рамки вашего класса. У вас есть несколько вариантов. Например, вы можете сделать это: 'public function attack (target: Fighter): void { if (target == null) target = this.target; } 'или вы можете атаковать только в том случае, если цель была ранее установлена ​​(возможно, с использованием функции publicTestTarget (newTarget: Target): void' и т. Д. Трудно сказать, что было бы лучшим решением, не зная больше о вашем игра –

ответ

2

насчет:

public function attack(target:Fighter):void 
{ 
    if(target == null) 
     target = this.target; 
} 

и быть честным, может быть, это легче назвать одну из переменных _target, чтобы избежать путаницы. Вы можете использовать target = _target; вместо this..

1

Вы не можете установить необязательный параметр таким образом. Вы можете установить необязательные параметры по умолчанию, но не ссылку. В этом случае, если вы хотите сохранить его по желанию вы можете сделать что-то вроде этого (или что @George Profenza предложенного):

public function attack(target:Fighter=null):void { 
    target = target ? target : this.target; 
} 

Я вижу, что вы отметили правильный ответ уже, но я объясню, что с вами по умолчанию не имеют нулевых параметров до this.target, вам выгодно использовать это решение, поэтому вам не нужно проходить null каждый раз, когда вы вызываете атаку(), то есть вы можете сделать attack() вместо attack(null).

Смежные вопросы