2012-06-20 4 views
0

Когда я нажимаю кнопку buttonSprite, он добавляет displaySprite на сцену, и когда я выхожу из кнопки buttonSprite, displaySprite удаляется.Actionscript 3: mouse_over & mouse_out вызывает ошибку # 1009?

Моя проблема заключается в том, что, когда я быстро выворачиваю и выключаю buttonSprite несколько раз, displaySprite не удаляется и появляется сообщение об ошибке (Ошибка № 1009). Даже я набираю «displaySprite = null», он все еще не работает. Какие-либо предложения? Thanks

var buttonSprite:Sprite = new Sprite(); 
addChild(buttonSprite); 
buttonSprite.addEventListener(MouseEvent.MOUSE_OVER, overSprite); 

var displaySprite:Sprite; 

function overSprite(e:MouseEvent):void{ 

    displaySprite = new Sprite(); 
    addChild(displaySprite); 
    buttonSprite.addEventListener(MouseEvent.MOUSE_OUT, outSprite); 

} 
function outSprite(e:MouseEvent):void{ 

    removeChild(displaySprite); 
    displaySprite = null; 

} 

ответ

0

Проблема: MouseEvent.MOUSE_OVER отправляется несколько раз, когда вы наводите указатель мыши на экранный объект. То, что вы должны попробовать, это MouseEvent.ROLL_OVER и MouseEvent.ROLL_OUT, эти два события отправляются один раз.

Что-то вдоль линий:

var buttonSprite:Sprite = new Sprite(); 
addChild(buttonSprite); 
buttonSprite.addEventListener(MouseEvent.ROLL_OVER, overSprite); 
buttonSprite.addEventListener(MouseEvent.ROLL_OUT, outSprite); 
var displaySprite:Sprite; 

function overSprite(e:MouseEvent):void 
{ 
    if(!displaySprite) 
    { 
     displaySprite = new Sprite(); 
     addChild(displaySprite); 
    } 

} 

function outSprite(e:MouseEvent):void{ 
    if(displaySprite) 
    { 
     removeChild(displaySprite); 
     displaySprite = null; 
    } 

} 
1

Там нет никакой гарантии, что события будут срабатывать в порядке.
В вашем случае вам не нужно создавать экземпляр displaySprite несколько раз.
Просто не исключайте его, и объект будет там.

var buttonSprite:Sprite = new Sprite(); 
addChild(buttonSprite); 
buttonSprite.addEventListener(MouseEvent.MOUSE_OVER, overSprite); 

//you only need to create it once. 
var displaySprite:Sprite = new Sprite(); 

function overSprite(e:MouseEvent):void{ 
    addChild(displaySprite); 
    buttonSprite.addEventListener(MouseEvent.MOUSE_OUT, outSprite); 
} 
function outSprite(e:MouseEvent):void{ 
    removeChild(displaySprite); 
} 
Смежные вопросы