Вместо установки значения на _root вы также можете установить его на _global. Если вы не укажете область видимости явным образом, то / появится / то, что локальное значение (в функции / объекте) переопределит _root, а затем _root переопределит _global. Я вижу, что разные вещи используют _global вместо _root, но я не уверен в реальной выгоде.
Если вы хотите, чтобы ваши определения функций в экземпляре попробуйте это:
onClipEvent (load)
{
this.failwhale = function (levelNum)
{
_root.gotoAndStop("fail");
failFrom = levelNum;
}
this.guardSightCollision = function(guardName, guardSightName)
{
if (_root.guardName.guardSightName.hitTest(_x, _y+radius, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x, _y-radius, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x-radius, _y, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x+radius, _y, true))
{
failwhale(1);
}
}
}
onClipEvent (enterFrame)
{
this.guardSightCollision(guard1, guard1Sight);
}
В противном случае вы должны разместить их на временной шкале родительского объекта (или корневой временной шкалы) и указать направление объекта, например:
myobject.failwhale = function (levelNum)
{
_root.gotoAndStop("fail");
failFrom = levelNum;
}
myobject.guardSightCollision = function(guardName, guardSightName)
{
if (_root.guardName.guardSightName.hitTest(_x, _y+radius, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x, _y-radius, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x-radius, _y, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x+radius, _y, true))
{
failwhale(1);
}
}
myobject.onEnterFrame = function()
{
this.guardSightCollision(guard1, guard1Sight);
}
Кроме того, я бы настоятельно рекомендовал вводить ваши переменные / аргументы как для проверки ошибок компиляции, так и для некоторого увеличения скорости.