2016-08-30 43 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可以工作我猜,但解決方案之一是如此簡單和優雅...我不明白爲什麼它不工作。 .. 我做了一個簡單的版本,並在這裏上傳: –