Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   dispatchEvent (http://www.flasher.ru/forum/showthread.php?t=100085)

tov_diatel 19.08.2007 22:24

dispatchEvent
 
В классе Arrow передаю dispatchEvent вот код класса который его должен принять:
Код:

package main {
    import main.Arrow;
        import flash.text.*;
        import flash.events.EventDispatcher;
        import flash.display.Sprite;
    import flash.events.Event;
   
 
    dynamic public class Text extends Sprite {
                          var arr:Arrow = new Arrow();
                  public var score:Number;
                  public var score1:String;
                 
                  public function Text() {
             
                          score=0;
              var.addEventListener("ArrowHit",handleEvent);       
                         
          }
          private function handleEvent(evt:Event):void {
         

                    score+=1;
                    score1=score.toString();
                        this.quantity.text=score1; 
          }
    }
}

Выдает ошибку:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at main::Arrow/Random()
at main::Arrow$iinit()
at main::Text$iinit()
at flash.display::Sprite/flash.display:Sprite::constructChildren()
at flash.display::Sprite$iinit()
at flash.display::MovieClip$iinit()
at test_fla::MainTimeline$iinit()

Мне кажется виновата строчка var arr:Arrow = new Arrow();
Но что не так?
Подскажите пожалуйста!

Dima_DPE 19.08.2007 22:38

Она не виновата :)
Но судя по сообщению еррора, в функцие Random класс Arrow ты пытаешься обратится к свойству или методу, который не существует. Почитай предыдущий топик и ты поймешь о чем речь. А если в двух словах, то надо видеть класс Arrow.

Dima_DPE 19.08.2007 22:39

var.addEventListener("ArrowHit",handleEvent);

это ляп или у тебя так?

tov_diatel 19.08.2007 22:48

1когда ее убираю ошибок нет (просто не получаю ивент)
2 ляп там arr.addEventListener("ArrowHit",handleEvent);

Dima_DPE 19.08.2007 22:52

Цитата:

Сообщение от tov_diatel
1когда ее убираю ошибок нет (просто не получаю ивент)

Это логично :) Не вызывается конструктор класса и функция Random - в ней то и ерор (теоритически).

Покажи ф-цию Random.

tov_diatel 19.08.2007 22:57

вот весь код Arrow .Прост мне кажеться что ошибка в наследовании.
Код:

package main {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.EventDispatcher;

 
    dynamic public class Arrow extends Sprite {
             
                        public var flag:Number;
                            public var xs:Number;
                        public var ys:Number;
                                public var lemx:Number;
                        public var lemy:Number;
                  public function Arrow() {
                      Random();
                                addEventListener(Event.ENTER_FRAME, Update);
          }
          public function Random() {
                                  flag=0;
                                x=0;
                                y=0;
                                lemx=parent.width;
                                lemy=parent.height;
                                xs=Math.random()*5;
                                ys=Math.random()*5;       
                          }
                  private function Update(evt:Event):void {
                x+=xs;
                                y+=ys;
                if(x>=lemx-width||x<=-1) {
                                        xs=-xs;
                                        if(flag==1){
                                        parent.width=lemx;
                                        parent.height=lemy;
                                        this.dispatchEvent(new Event("ArrowHit"));
                                                          flag=0;
                                                          }else {
                                                                  parent.width-=(parent.width/100)*5;
                                                      parent.height-=(parent.height/100)*5;
                                                                  this.dispatchEvent(new Event("ArrowHit"));
                                                                  flag=1;
                                                                  }
                                } ;
                                if(y>=lemy-height||y<=-1) {
                                        ys=-ys;
                                if(flag==1){       
                                        parent.width=lemx;
                                        parent.height=lemy;
                                this.dispatchEvent(new Event("ArrowHit"));
                                flag=0;
                                }else {
                                        parent.width-=(parent.width/100)*5;
                                        parent.height-=(parent.height/100)*5;
                                        this.dispatchEvent(new Event("ArrowHit"));
                                        flag=1;
                                        }
                                        }
                  }
    }
}


Dima_DPE 19.08.2007 23:04

закоменть все в функцие Random и набери trace(parent);
Наперед скажу. Его просто еще нет.

Решение точно не знаю, но попробуй super() вписать в конструкторе, а есле не поможет думай.

tov_diatel 19.08.2007 23:06

И что делать?

Dima_DPE 19.08.2007 23:12

Код:

import flash.display.*;

var s:Sprite=new Sprite();
trace(s.parent); //null
addChild(s);
trace(s.parent); //[object MainTimeline]

Понимаешь?

tov_diatel 19.08.2007 23:38

так?
Код:

package main {
    import main.Arrow;
        import flash.text.*;
        import flash.events.EventDispatcher;
        import flash.display.Sprite;
    import flash.events.Event;
    import flash.display.*;
 
    dynamic public class Text extends Sprite {
       
                  public var score:Number;
                  public var score1:String;
                 
                  public function Text() {
              var arr:Arrow = new Arrow();
                          addChild(arr);
                          score=0;
              arr.addEventListener("ArrowHit",handleEvent);       
                         
          }
          private function handleEvent(evt:Event):void {
         

                    score+=1;
                    score1=score.toString();
                        this.quantity.text=score1; 
          }
    }
}

та же ошибка!


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

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