2016-08-30 2 views
0

Im пытается вызвать функцию (ы) из разных мест. До сих пор не повезло. Это основная функция. Когда я нажимаю кнопку, что-то сделать:AS3 Как вызвать существующую функцию?

button.addEventListener(MouseEvent.CLICK, myFunction1); 
function myFunction1(event:MouseEvent):void 
{ 
    ///dosomeThing1 
} 

У меня есть более чем на одну кнопку (myFunction2..3 ... 4 ... и т.д.)

, но я хотел бы точно так же (myfunction1. .2 и т. Д.) Происходят, когда я получаю определенное случайное число. Например, если случайное число = 1 >>> сделать myfunction1 , если случайное число = 2 >>> сделать myfunction2

Так я попытался это: (этот код в верхней части timelineframe)

function randomRange(minNum:Number, maxNum:Number):Number 
{ 
return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum); 
} 
var myrandomNumber = (randomRange(1, 6)) 
trace(myrandomNumber); //A number between 1 and 6 
if (myrandomNumber == 1) { 
    myFunction1(null); // i tried this (null) stuff 
} 
if (myrandomNumber == 2) { 
    myFunction2(); // i tried also with just braces 
} 

т.д.

генерация случайных чисел в порядке, но я получаю сообщение об ошибке все время, когда я хочу, чтобы вызвать функцию (если я дать простую команду >> smthng.gotoAndStop (х) (вместо функции) это нормально)

весь код не находится в шкале времени кадра (без отдельного файла)

если заявления не внутри какой-либо функции, так же, как вы видите здесь, это ~ своего рода «OnLoad» вещи

Функция работает, если я нажимаю на кнопку, так что она не может быть проблемой, я думаю, просто не знаю, как вызвать ту же функцию из другого места?!? :-)

У кого-нибудь есть идеи? Действительно оцените!

Пожалуйста, оставьте примеры! ! (Rookie программист здесь :-)

благодаря Бен

Обновления:

после консультации Neals (спасибо) я попытался это один:

function randomRange(minNum:Number, maxNum:Number):Number 
{ 
return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum); 
} 
var myrandom = (randomRange(1, 6)) 
trace(myrandom); //A number between 10 and 20 
if (myrandom == 1) { 

wbtungsten():void{ 
color2.redOffset = 70; 
color2.greenOffset = 0; 
color2.blueOffset = -100; 
szin_wb_cam.szin_wb.transform.colorTransform = color2; 
} 
} 
if (myrandom == 2) { 
// another something 
} 

и пару строк ниже:

nav_mc.navtungsten.addEventListener(MouseEvent.CLICK, wbtungsten1); 
private function wbtungsten1(e:MouseEvent) 
{ 
wbtungsten(); 
} 

В этом случае я получаю следующие ошибки: Сцена 1, уровень «AS3», кадр 2, строка 23 1084: Синтаксическая ошибка: ожидающая правша перед точкой с запятой. Сцена 1, «AS3», рамка 2, строка 21 1078: ярлык должен быть простым идентификатором. Сцена 1, уровень «AS3», кадр 2, строка 22 1084: ошибка синтаксиса: ожидание двоеточия перед точкой.

+0

Какие ошибки вы получаете? Где есть инструкции if? Внутри функции? Это все на временной шкале или в разных файлах .as? Пожалуйста, обновите свой вопрос с помощью этой информации, а не ответьте на этот комментарий. –

+1

Поскольку замена функции другой командой работает, проблема, вероятно, не в том, что вы опубликовали, а скорее в самих функциях. Можете ли вы опубликовать пример этих функций? –

+0

ладно спасибо !!! Я обновил вопрос :-) –

ответ

0

Это потому, что ваша функция ожидает события.

ли это вместо:

myFunction1():void{ 
    //do stuff 
} 

addEventListener(MouseEvent.CLICK,doSomethingHelper); 

private function doSomethingHelper(e:MouseEvent){ 
    myFunction1(); 
} 

обновление

Я вижу в вашем обновленном коде вы создаете функцию внутри из if блока. Это делает его недоступным для остальной части вашего кода. Не делай этого. Это ваша функция wbtungsten. Создайте его в другом месте, а затем вызвать его внутри if блока, как wbtungsten();

+0

okay a попробовал! Я получаю несколько сообщений об ошибках, перечисленных ниже ..... (если я не пытаюсь использовать эту функцию, я не получаю никаких ошибок ...) ?!?! Сцена 1, «AS3», рамка 2, строка 21 \t 1078: Этикетка должна быть простым идентификатором. Сцена 1, «AS3», рамка 2, строка 22 \t 1084: Синтаксическая ошибка: ожидается двоеточие перед точкой. Я получаю несколько ошибок. Сцена 1, «AS3», рамка 2, строка 23 \t 1084: Ошибка синтаксиса: ожидайте правду перед точкой с запятой. –

+0

А что на линии 23? –

+0

Опять же, в нижней части вашего вопроса (не в комментариях), пожалуйста, отправьте код, который у вас есть, который вызывает ошибки. Вы говорите, что устали. ОК. Покажи мне.И я попытаюсь понять, что не так. Я просто должен видеть это в контексте. И чтобы уточнить, весь ваш код находится в кадре 2? Обычно у людей есть определенный слой, называемый «код», и весь код идет на кадр 1, а не 2 –

1

(1)
Что касается: «Функция работает, если я нажимаю на кнопку», но как-то вы не можете назвать его с помощью myFunction1(null); или просто myFunction1(); , Это говорит мне, что ваша функция выглядит как этот

function myFunction1(event:MouseEvent):void 

, потому что он связан с щелчками мыши можно запустить только через «нажмите кнопку» событие заметили. Для того, чтобы быть в состоянии иметь возможность запускать функцию независимо от количества кликов или прямой вызов (например: myFunction1();), а затем определить, как ...

function myFunction1(event:Event = null):void 

(2)
Я не проверял код, но я угадайте, что этот раздел вызовет проблему.

if (myrandom == 1) { 

wbtungsten():void{ 
color2.redOffset = 70; 
color2.greenOffset = 0; 
color2.blueOffset = -100; 
szin_wb_cam.szin_wb.transform.colorTransform = color2; 
} 

особенно эта линия wbtungsten():void{ ... что вы пытаетесь достичь с ним точно? Создание новой функции внутри оператора If? Прекратите это делать, это не работает, как вы можете видеть.

Возможное исправление: Что-то вроде ниже должно работать.

if (myrandom == 1) 
{ 
    color2.redOffset = 70; 
    color2.greenOffset = 0; 
    color2.blueOffset = -100; 
    szin_wb_cam.szin_wb.transform.colorTransform = color2; 

    wbtungsten(); //call the function called "wbtungsten" 
} 

(3)
Относительно этой цитаты:

"...but I wanted to exactly the same (myfunction1..2 etc) happen when I get a specific random number. For example if random number = 1 >>> do myfunction1 if random number = 2 >>> do myfunction2"

Я немного запутался о связи между этими myfunction1 и wbtungsten1 и wbtungsten(); и т.д. и т.п. Если то, что вы пытаетесь для достижения того, что каждое случайное число влияет на красные, зеленые и синие смещения color2, тогда вы должны сделать что-то вроде:

if (myrandom == 1) 
{ 
    change_Color(70, 0, -100); 
} 

if (myrandom == 2) 
{ 
    change_Color(10, 25, 5); //some other numbers for testing 
} 

function change_Color(redNum:Number, greenNum:Number, blueNum:Number) : void 
{ 
    color2.redOffset = redNum; 
    color2.greenOffset = greenNum; 
    color2.blueOffset = blueNum; 

    szin_wb_cam.szin_wb.transform.colorTransform = color2; 
} 

Что происходит выше, вы вызываете одну и ту же функцию из каждого случайного числа, но вы даете функции разные параметры (настройки) для работы. Возможно, вышеуказанная функция change_Color достигает того, что ваш wbtungsten():void{ пытался выполнить, но я не могу быть уверен.

...

Edit : Regarding "It is pretty simple code now... .i dont get it why it isnt working"

Проблема заключается в структуре вашего кода. Помните, что Flash Player обрабатывает код по строкам вниз, если только вы не переходите к более поздней строке. У вас есть if операторы, которые прыгают прямо в функцию.Поскольку функция ссылается на переменную, которая не существует, вы получите нуль. Я вижу, что вы объявили var color2:ColorTransform = new ColorTransform();, но «прыжок» пропустил его, поэтому color2.redOffset = 70; ничего не значит для компилятора.

Решение:
Поместите эту линию (как показано ниже) перед любым If или function вещи. В вашем FLA, становится очень сверху/первая строка кода (теперь все остальное потом знает, что вы имеете в виду color2 & не более null вопросов) ...

var color2:ColorTransform = new ColorTransform(); 

Объявите все переменные первых, прежде чем какой-либо другой код, либо настраивает эти переменные, либо переходит к функциям, использующим переменные. Таким образом вы вынуждаете компилятор читать (&) их до их дальнейшего использования.

Оптимальная структура кода должна быть:

1) импорт - Любой Imports объявлены первым в верхней части кода
2) переменных - Объявите переменные. (Если вы думаете о новой позже просто прокрутить назад здесь, чтобы добавить его)
3) основной код - код команды с участием переменных & функции ...
4) функции - Главный код будет ссылаться или перейти к здесь всякий раз, когда требуется, прежде чем возвращаться к следующей известной строке инструкций в , главный код at (3) ..

+0

VC.One спасибо! –

+0

VC.One спасибо! Я пробовал решение ONE ... Я получаю эту ошибку: TypeError: Ошибка # 1009: Не удается получить доступ к свойству или методу ссылки на нулевой объект. \t в functioncall_fla :: MainTimeline/wbtungsten() \t в functioncall_fla :: MainTimeline/Frame1() –

+0

Solution 2 и 3 может работать я думаю, но решение один такой простой и элегантный ... я не понимаю, почему оно не работает. .. Я сделал упрощенную версию и загрузил здесь: –

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