Я обнаружил проблему после некоторой отладки, поэтому выкладываю решение здесь на тот случай, если кто-нибудь еще наткнется на него.
Это ошибка во Flex, я использую v3.6, но я не знаю, было ли это исправлено. Когда реплики добавляются в CuePointManager, он выполняет сортировку вставки на основе времени реплики. Однако в одной точке алгоритма он округляет число следующим образом:
var compTime1:Number = Math.round(time * 1000);
var compTime2:Number = Math.round(cuePoint.time * 1000);
А затем он проверяет индекс, который возвращает метод сравнения (где говорится, что реплика должна быть вставлена) без использования округления:
index = getCuePointIndex(cuePoints, true, copy.time, null, 0, 0);
index = (cuePoints[index].time > copy.time) ? 0 : index + 1;
Моя метка 3.3, которая запускается в 5.6000000000000005, имеет это значение из-за ошибки с плавающей запятой - я добавил 0,2 к 5,4. Таким образом, в то время как getCuePointIndex возвращает правильное значение index , ему затем присваивается значение 0 во второй строке, в результате чего оно занимает первое место в списке.
Мое решение - просто выполнить округление по временам подсказок, прежде чем я добавлю их:
trace("pushing cue " + c.id + "@"+ c.time + " - " + ((c.time + c.duration) * 1000) / 1000);
cuePointArr.push({name:c.id + "_start", time:Math.round(c.time * 1000) / 1000, type:"actionscript"});
cuePointArr.push({name:c.id + "_stop", time:Math.round((c.time + c.duration) * 1000) / 1000, type:"actionscript"});
(примечание: с тех пор я добавил части "_start" и "_stop", поскольку у меня возникла проблема с наличием двух сигналов с одинаковым именем)
Надеюсь, это кому-нибудь поможет!