Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ну и что что null? (http://www.flasher.ru/forum/showthread.php?t=157612)

FieryWall 08.06.2011 14:10

Ну и что что null?
 
Часто вылетает известная ошибка, причем в любой момент
"Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null"."
Причем в месте где ее быть не должно, даже когда ставлю проверку - все равно вылетает.
Во собственно код:
Код AS3:

package  
{
        import flash.media.Sound;
        import flash.media.SoundChannel;
        import flash.events.Event;
        import flash.media.SoundTransform;
 
        /**
        * ...
        * @author FieryWall
        */

        public class Sounds
        {
                //...
                public var collision1:Sound;
                public var collision2:Sound;
                //...
 
                //...
                private var collision1S:SoundChannel;
                private var collision2S:SoundChannel;
                //...
 
                public var musicVelume:Number;
                public var soundVelume:Number;
                public function Sounds()
                {
                        //...
                        collision1 = new Сollision1_c();
                        collision2 = new Сollision2_c();
                        //...
 
                        musicVelume = 1;
                        soundVelume = 1;
                }
 
                public function play(sound:Sound, peak:int = 0):void
                {
                        var mt:SoundTransform = new SoundTransform();
                        var st:SoundTransform = new SoundTransform();
                        st.pan = peak;
                        mt.volume = musicVelume;
                        st.volume = soundVelume;
                        switch(sound){
                                //...
                                case collision1:collision1S = collision1.play(0, 1);
                                collision1S.soundTransform = st;
                                collision1S.addEventListener(Event.SOUND_COMPLETE, soundComplite); break;
                                //Ошибку показывает здесь(например), не пойму почему =(
                                case collision2:collision2S = collision2.play(0, 1);
                                collision2S.soundTransform = st;
                                collision2S.addEventListener(Event.SOUND_COMPLETE, soundComplite); break; //Или здесь
                                //...
                        }
                }
 
                public function stop(sound:Sound):void {
                        switch(sound){
                                //...
                                case collision1:if (collision1S) {
                                        collision1S.stop();
                                        collision1S = null;
                                }; break;
                                case collision2:if (collision2S) { 
                                        collision2S.stop();
                                        collision2S = null;
                                }; break;
                                //...
                        }
                }
 
                public function isPlaying(sound:Sound):Boolean {
                        switch(sound){
                                //...
                                case collision1:if (collision1S) {
                                        return true;
                                } else {
                                        return false
                                }; break;
                                case collision2:if (collision2S) {
                                        return true;
                                } else {
                                        return false }; break;
                                //...
                                default:return false;
                        }
                }
 
                public function updateVelume(mv:Number, sv:Number):void {
                        var mt:SoundTransform = new SoundTransform(mv);
                        var st:SoundTransform = new SoundTransform(sv);
                        musicVelume = mv; soundVelume = sv;
                        //...
                        if (collision1S) {
                                collision1S.soundTransform = st;
                        }
                        if (collision2S) {
                                collision2S.soundTransform = st;
                        }
                        //...
                }
 
                private function soundComplite(e:Event):void
                {
                        //...
                        if (e.target === collision1S) {
                                  collision1S = null;
                        }
                        if (e.target === collision2S) {
                                  collision2S = null;
                        }
                        //...
                }
 
        }
 
}

Это клас озвучки, для примера я оставил две переменные типа Sound и типа SoundChannel. Вылетает в функции play. При наведении null у переменных типа SoundChannel

i.o. 08.06.2011 14:17

ну а где вылетает то, собственно?

Добавлено через 1 минуту
а.., прокрутить нужно было...
кто ж так пишет?
Код AS3:

case collision1:collision1S = collision1.play(0, 1); collision1S.soundTransform = st; collision1S.soundTransform = st; collision1S.addEventListener(Event.SOUND_COMPLETE, soundComplite); break; //Ошибку показывает здесь(например), не пойму почему =(

напишите построчно, а не все в одну строчку - дебагер хоть подсветит строку с ошибкой

-De- 08.06.2011 14:23

http://www.adobe.com/livedocs/flash/...tml#play%28%29
шониясно? Может возвращать null. Дёргаете св-во у null.
PS: за такой код убивал бы.

FieryWall 08.06.2011 14:30

Цитата:

Сообщение от -De- (Сообщение 1002044)
PS: за такой код убивал бы.

Чем не нравитсо? :)

Цитата:

Сообщение от i.o. (Сообщение 1002041)

кто ж так пишет?
Код AS3:

case collision1:collision1S = collision1.play(0, 1); collision1S.soundTransform = st; collision1S.soundTransform = st; collision1S.addEventListener(Event.SOUND_COMPLETE, soundComplite); break; //Ошибку показывает здесь(например), не пойму почему =(

напишите построчно, а не все в одну строчку - дебагер хоть подсветит строку с ошибкой

Там очень много звуков, если построчно делить - будет громоздко и не удобно для чтения

КорДум 08.06.2011 14:32

Как раз наоборот.

mayakwd 08.06.2011 14:35

function extract вам в руки.

i.o. 08.06.2011 14:35

Код AS3:

if (collision1S) { return true } else { return false };

это что ли
Код AS3:

return Boolean(collision1S);

?

FieryWall 08.06.2011 14:37

Цитата:

Сообщение от i.o. (Сообщение 1002054)
Код AS3:

if (collision1S) { return true } else { return false };

это что ли
Код AS3:

return Boolean(collision1S);

?

Летит в функции play()

i.o. 08.06.2011 14:40

Цитата:

Летит в функции play()
простите, что? :)

-De- 08.06.2011 14:46

Цитата:

Сообщение от FieryWall (Сообщение 1002048)
Чем не нравитсо? :)

Совершенно нечитабельно. Не возьмут туда, где хоть чуть на код смотрят.
Цитата:

Сообщение от FieryWall (Сообщение 1002048)
Там очень много звуков, если построчно делить - будет громоздко и не удобно для чтения

Откройте для себя циклы.


Часовой пояс GMT +4, время: 14:09.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.