2016-08-30 41 views
0

我试图从不同的地方调用一个或多个函数。到目前为止没有任何运气。 这是基本功能。当我按下一个按钮,它做一些事情: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(x)的指令(而不是函数)这很好)

整个代码是在时间轴框架(无单独的文件)

如果陈述并非内部的任何功能,就像你在这里看到的,它是〜种一个“的onLoad”的东西

该函数的工作原理如果我点击按钮,所以它不能成为我想的问题,只是不知道如何从其他地方调用相同的功能? :-)

有没有人有什么想法? 真的很感激!

请留下的例子! !(新手程序员在这里:-)

感谢 本

更新:

后餐点建议(感谢)我想这一个:下面

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:语法错误:在分号之前期待rightbrace。 场景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块内部的功能。这使得其他代码无法访问。不要这样做。这是你的wb钨功能。创建其他地方,然后调用它的if块内像wbtungsten();

+0

好的一个尝试过! 我收到以下列出的几个错误消息..... (如果我不尝试使用这个功能的东西我没有得到任何错误...) ?!?! 场景1,图层'AS3',第2帧,第21行\t 1078:标签必须是简单的标识符。 场景1,图层'AS3',第2帧,第22行\t 1084:语法错误:期望在点之前冒号。 我得到几个错误。 场景1,图层'AS3',第2帧,第23行\t 1084:语法错误:在分号前等待rightbrace。 –

+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"

我有点困惑,这些myfunction1wbtungsten1wbtungsten();等等等等之间的联系,如果你想什么要实现的是每个随机数影响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语句。由于函数引用了一个不存在的变量,所以你会得到一个null。我可以看到你声明var color2:ColorTransform = new ColorTransform();,但跳过“跳”,所以color2.redOffset = 70;对编译器没有任何意义。之前的任何Iffunction东西
将这个线(如下所示):

。在FLA,就成了非常代码顶部/第一行(现在一切后来知道你通过color2 &没有更多null问题的意思)......

var color2:ColorTransform = new ColorTransform(); 

任何其他代码之前声明所有的变量:第一,要么调整这些变量,要么去使用变量的函数。通过这种方式,您可以在进一步使用之前强制编译器读取(&)。

优化代码结构应该是:

1)进口 - 任何Imports被宣布首先在代码
2)变量顶部 - 声明变量。 (如果你认为一个新的后只是滚动回到这里,将其添加)
3)主代码 - 指令代码包含变量&功能...
4)功能 - 主代码将引用或跳转至在这里,每当需要返回前做主要代码(012),

+0

VC.One谢谢你! –

+0

VC.One谢谢你! 我试图解决方案的一个... 我得到这个错误: 类型错误:错误#1009:无法访问空对象引用的属性或方法。 () \t at functioncall_fla :: MainTimeline/wbtungsten() \t at functioncall_fla :: MainTimeline/frame1() –

+0

解决方案2和3可以工作我猜,但解决方案之一是如此简单和优雅...我不明白为什么它不工作。 .. 我做了一个简单的版本,并在这里上传: –