您的fnCheckDate
功能在輸入框架上被調用,但該功能從未做過任何事情,除了設置i
。另一個功能 - fnDateSym
- 根據i
的值設置visible
屬性。這是你想要的 - 但fnDateSym
永遠不會在你的發佈代碼中的任何地方調用。
這可能只是因爲你遺漏了一些代碼。我猜你可能會從其他地方撥打fnDateSym
,並期望它使用fnCheckDate
設置的全球i
。是的,它將使用全球i
。但fnCheckDate
不設置全球i
:
var i = france_map.currentFrame;
的var
關鍵字聲明當前範圍內的變量。一個函數創建一個新的作用域。換句話說,你聲明瞭一個函數本地的變量i
,並將currentFrame
的值賦值爲 - 而不是全局範圍(var i = 1
)中已有的變量i
。當你的函數退出,當地i
「丟失」 - 與全球i
沒有改變 - 它仍然是1
所以速戰速決是簡單地將其更改爲:
i = france_map.currentFrame;
現在,您並未聲明新變量,而是設置全局變量i
的值。
ETA:「教你如何釣魚,而不是給你一個魚」有點...一個簡單的方法來調試這些類型的問題是檢查使用trace
函數的變量的值。例如:
function fnDateSym (evt:Event):void
{
trace("i is:", i);
dates_array[i].visible=true;
}
現在,如果你看不到任何痕跡,這意味着你的函數不叫在所有的輸出窗口。如果你經常看到「我是:1」,那麼你知道i
不會改變,並且這是問題的根源。您可以使用trace(i) - 我只是傾向於向跟蹤中添加某種文本 - 使您可以更輕鬆地分辨出輸出中的每行是什麼,以及何時存在更多跟蹤。
無關,只是有點代碼審查的...
注意ENTER_FRAME
被觸發每幀刷新。即,這並不意味着「當我在時間線上輸入新的幀」。它只是意味着,「當一個框架在玩家中繪製」。換句話說,它被稱爲每秒24次 - 或者您在Flash中選擇的任何幀速率 - 無論currentFrame
是否不更改(例如因爲您稱爲france_map.stop()
)。
這對你的情況可能沒有問題 - 畢竟,設置visible
到true
每秒24次實際上不會引起任何副作用。但是,如果你做的不僅僅是這些,它可能是浪費 - 或者它可能會導致意想不到的問題,因爲它比你想要的更頻繁地被調用。
的一種方式,以使類似「進入時間表幀」事件的東西是:
var previousFrame:int; // used for storing the last currentFrame we encountered
mc.addEventListener(Event.ENTER_FRAME, enterFrameListener);
function enterFrameListener(event:Event):void
{
// Are we on a different frame than last time?
if (previousFrame != mc.currentFrame)
{
currentFrameChanged();
previousFrame = mc.currentFrame;
}
}
function currentFrameChanged()
{
// Do stuff that should be done when the current frame changes
// - rather than on every frame refresh.
}
很難告訴你究竟是如何做的事情(再次,因爲它似乎在通話fnDateSym
被遺漏) - 但取決於如何調用fnDateSym
,大多數情況下根本不需要fnCheckDate
。只要做到:
dates_array[france_map.currentFrame] = true;
除此之外,只爲「正派」,你可能要申報類型i
:
var i:int = 0;
感謝幫助。我改變了我我變得我,它的工作。但是,我做了你我建議並用date_array [france_map.currentFrame]替換函數fnCheckDate!我不知道EnterFrame,所以我很高興你花時間來解釋和給出一個替代方案。非常感謝! – Jeryl
哦,是的,我打電話給代碼中較高的fnDateSym,但我忘了複製/粘貼它:) – Jeryl