Ошибка кодирования ActionScript 3

Мне нужно немного помочь с проблемой кода. Я пытаюсь подключиться к серверу одним нажатием кнопки. Когда я выполняю код, я получаю эту ошибку в своем выводе: 1120: Доступ к неопределенному свойству nc.close

Что странно, потому что я уже объявил свойство nc в функции btnStart. Я работал с кодом, но постоянно получаю одну и ту же досадную ошибку. Если у вас есть предложения, как решить эту проблему, это будет здорово! Спасибо

Код ниже:

btn_One.addEventListener(MouseEvent.CLICK, btnStart);

btn_Two.addEventListener(MouseEvent.CLICK, btnClose);

 function btnStart(event:MouseEvent):void{
    trace("Connecting...");
    var nc:NetConnection = new NetConnection();
    nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    nc.connect("rtmfp://localhost/streamingLive");

}
//// ERROR LINE NC.CLOSE();
function btnClose(event:MouseEvent):void{
   trace("Closing time");
   nc.close();

}

function netStatusHandler(event:NetStatusEvent):void{
    switch(event.info.code){
        case "NetConnection.Connect.Success":
        trace("Awesome connection");
        break;

        case "NetConnection.Connect.Failed":
        trace("Unable to connect");
        break;

        case "NetConnection.Connect.Rejected":
        trace("WHoooops");
        break;

        case "NetGroup.Connect.Success":
        trace("GroupConnection");
        break;

        case "NetGroup.Connect.Failed":
        trace("Group failed");
        break;

        case "NetGroup.Connect.Rejected":
        trace("Ouch!!!");
        break;

        var ns:NetStream = new NetStream();
       ns.publish("live", "streaming");
        ns.attachCamera();
        ns.attachAudio();
        ns.connect(nc);

        var ng:NetGroup = new NetGroup(nc,    groupspec.groupspecWithAuthorizations());
        ng.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);


    }
}

var cam:Camera = Camera.getCamera();
cam.setMode(420, 320, 15);
cam.setQuality(0, 85);

cam.addEventListener(StatusEvent.STATUS, statusHandler);

var vid:Video = new Video();
vid.width = cam.width;
vid.height = cam.height;
vid.x = 100;
vid.y = 100;

vid.attachCamera(cam);
addChild(vid);

var mic:Microphone = Microphone.getMicrophone();
mic.gain = 50;
mic.framesPerPacket = 1;
mic.setSilenceLevel(0, 2000);
mic.codec = SoundCodec.SPEEX;

//camera access permissions
function statusHandler(event:StatusEvent):void 
{ 
    switch (event.code) 
    { 
        case "Camera.Muted": 
            trace("User clicked Deny."); 
            break; 
        case "Camera.Unmuted": 
            trace("User clicked Accept."); 
            break; 
    } 
}

//audio access permissions
function micStatus(event:StatusEvent):void 
{ 
    if (event.code == "Microphone.Unmuted") 
    { 
        trace("Microphone access was allowed."); 
    }  
    else if (event.code == "Microphone.Muted") 
    { 
         trace("Microphone access was denied."); 
    } 
}

//array of camera names
var cameraA:Array = Camera.names;



for ( var i : int = 0; i < cameraA.length; i++){

     trace ( "Camera: ", cameraA[i] );

}

var groupspec:GroupSpecifier = new GroupSpecifier("groupone");
groupspec.multicastEnabled = true;
//group postings
groupspec.postingEnabled = true;
//specific peer posting
groupspec.routingEnabled = true;
//automatic peer discovery
groupspec.serverChannelEnabled = true;

1 ответ

Решение

nc объявлен внутри одной функции, но вы пытаетесь использовать его внутри другой функции. Иногда вы можете просто передать переменную в качестве аргумента, но в этом случае это не очень хорошо сработает. Так что в этом случае сделайте следующее:

var nc:NetConnection = new NetConnection();

function btnStart(event:MouseEvent):void{
    trace("Connecting...");
    // var nc:NetConnection = new NetConnection(); // removed
    nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    nc.connect("rtmfp://localhost/streamingLive");
}

//// ERROR LINE NC.CLOSE();
function btnClose(event:MouseEvent):void{
    trace("Closing time");
    nc.close();
}
Другие вопросы по тегам