PDA

Просмотр полной версии : dispatchEvent


tov_diatel
19.08.2007, 22:24
В классе 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
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;
}
}
}

та же ошибка!

Dima_DPE
19.08.2007, 23:46
Удали вызов функции Random из конструктора Arrow и ошибки не будет.
И слушай в конструкторе Arrow flash.events.Event.ADDED и когда он произойдет вызови Random() и удали слушатель этого события. Это должно все решить. Пробуй.

tov_diatel
19.08.2007, 23:57
Прости. Я очень плохо разбираюсь.
Вот сделал:
public function Arrow() {
addEventListener(Event.ENTER_FRAME, Update);
addEventListener(Event.ADDED, Random );
}
private function Random() {
flag=0;
x=0;
y=0;
lemx=parent.width;
lemy=parent.height;
xs=Math.random()*5;
ys=Math.random()*5;

}
теперь ошибки такие:
ArgumentError: Error #1063: Argument count mismatch on main::Arrow/::Random(). Expected 0, got 1.
at flash.display::Sprite/flash.display:Sprite::constructChildren()
at flash.display::Sprite$iinit()
at main::Main$iinit()
at flash.display::Sprite/flash.display:Sprite::constructChildren()
at flash.display::Sprite$iinit()
at flash.display::MovieClip$iinit()
at test_fla::MainTimeline$iinit()
ArgumentError: Error #1063: Argument count mismatch on main::Arrow/::Random(). Expected 0, got 1.
at flash.display::DisplayObjectContainer/addChild()
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()

Dima_DPE
20.08.2007, 00:07
public function Arrow() {
//addEventListener(Event.ENTER_FRAME, Update);
addEventListener(Event.ADDED, Random );
}
private function Random(event:Event) {
flag=0;
x=0;
y=0;
lemx=parent.width;
lemy=parent.height;
xs=Math.random()*5;
ys=Math.random()*5;
addEventListener(Event.ENTER_FRAME, Update);
}


Попробуй так

tov_diatel
20.08.2007, 00:23
Спасибо. Ошибок не выдает. Но теперь там вапще какаято каша получилась.

tov_diatel
20.08.2007, 00:26
Там дожно в в текстовом поле +1 когда квадратик об стенку стукаеться.

Dima_DPE
20.08.2007, 00:44
Набросал наскоро. Вроде так. Правь дальше как надо.

tov_diatel
20.08.2007, 02:08
Слушай извини!Я наверно уже наглеюНо башка уже не варит. У меня в квадратике еще и стрелочка естью Она должна показывать направление движения квадратаю Как мне из класса арров передать ей значение?

Dima_DPE
20.08.2007, 02:46
Так и передать

this.myArrowInRect.rotation=Math.atan(ys,xs);

или что-то вроде того. Сам уже во Флеше с 12 часов дня. ;)

tov_diatel
20.08.2007, 02:59
Спасибо я уже сам разобрался!

Nirth
20.08.2007, 13:46
tov_diatel устное предупреждение за название темы.
У вас есть два часа чтобы ознакомится с правилами и прислать мне в личное сообщение нормальное название.