Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   При создании экземпляра пользовательского класса возникает ошибка (http://www.flasher.ru/forum/showthread.php?t=140134)

OnEg1n 21.05.2010 13:01

При создании экземпляра пользовательского класса возникает ошибка
 
Здравствуйте!
Помогите в проблеме. Есть два класса первый MyRectangle создает прямоугольник и заставляет его двигаться. Как только прямоугольник доходит границы окна приложения он начинает двигаться в другую сторону.

Код AS3:

package main {
        import flash.display.*;
        import flash.events.*;
        import flash.utils.*;
 
        public class MyRectangle extends Sprite{
                var Rect:Shape=new Shape();               
                private var HMove:Boolean=true;                        //Переменные, которые определяют направление
                private var VMove:Boolean=true;                        //по горизонтали или вертикали
                private var speed:Number=10;
 
                public function MyRectangle() {
 
                        drawRectangle(0xFF9900);
                        addChild(Rect);
 
                        addEventListener(Event.ENTER_FRAME,frameListener);
 
 
                        function frameListener(e:Event):void{
 
                                //Перемещение вправо
                                if(HMove==true){
                                        trace("X: "+Rect.x);
                                        if(Rect.x<=stage.stageWidth-stage.width){
                                                Rect.x+=speed;
                                                //e.updateAfterEvent();
                                        }else{
                                                HMove=false;
                                        }
                                }
 
                                //Перемещение влево
                                if(HMove==false){
                                        trace("X: "+Rect.x);
                                        if(Rect.x>stage.x){
                                                Rect.x-=speed;
                                        }else{
                                                HMove=true;
                                        }
                                }
 
                                //Перемещение вверх
                                if(VMove==true){
                                        trace("Y: "+Rect.y);
                                        if(Rect.y<=stage.stageHeight-stage.height){
                                                Rect.y+=speed;
                                                //e.updateAfterEvent();
                                        }else{
                                                VMove=false;
                                        }
                                }
 
                                //Перемещение вниз
                                if(VMove==false){
                                        trace("Y: "+Rect.y);
                                        if(Rect.y>stage.x){
                                                Rect.y-=speed;
                                        }else{
                                                VMove=true;
                                        }
                                }                               
                        }
 
                        //Ф-ция рисует прямоугольник
                        function drawRectangle(color:Number):void{
                                Rect.graphics.lineStyle(1);
                                Rect.graphics.beginFill(color,1);
                                Rect.graphics.drawRect(0,0,75,40);
 
                        }
 
                }
        }
}

Второй класс Brush объявляет переменную figura1.
Код AS3:

package main  {
        import flash.display.*;       
        import main.MyRectangle;
 
 
        public class Brush extends Sprite{
                public var figura1:MyRectangle;
                public function Brush() {
                        figura1=new MyRectangle();               
                }
        }       
}

Когда пытаюсь в переменную записать экземпляр класса MyRectangle, происходит ошибка

Код:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
        at Function/<anonymous>()

Помогите разобраться где я не прав.

enepx 21.05.2010 13:21

вроде так
Код AS3:

var Rect:Shape=new Shape();

нельзя писать. Попробуйте написать в конструкторе.

OnEg1n 21.05.2010 13:45

Не возникнет ли проблем потом когда будет вызываться функция drawRectangle()?

Wolsh 21.05.2010 14:01

1. Зря Вы запихали все функции в конструктор. Вложенные функции - зло.
2. Зачем вообще создавать новый Шейп где-то кроме drawRectangle() ? Держите связанный код вместе, зачем его раскидывать по всему классу.
3. Имена переменных пишутся с маленькой буквы. С большой - только названия классов и интерфейсов (ну и конструкторов соответственно)

OnEg1n 21.05.2010 14:34

Цитата:

1. Зря Вы запихали все функции в конструктор. Вложенные функции - зло.
2. Зачем вообще создавать новый Шейп где-то кроме drawRectangle() ? Держите связанный код вместе, зачем его раскидывать по всему классу.
3. Имена переменных пишутся с маленькой буквы. С большой - только названия классов и интерфейсов (ну и конструкторов соответственно)
Спасибо приму к сведению. И все-таки, что скажите об ошибке? Что она означает и что я не так сделал.?

i.o. 21.05.2010 14:59

поправьте вот так:
Код AS3:

public class MyRectangle extends Sprite{
                private var Rect:Shape;
 
......
 
                public function MyRectangle() {
 
                        Rect = new Shape();
 
                        drawRectangle(0xFF9900);
                        addChild(Rect);

Возможно заработает

enepx 21.05.2010 15:00

Цитата:

Сообщение от OnEg1n (Сообщение 909894)
Спасибо приму к сведению. И все-таки, что скажите об ошибке? Что она означает и что я не так сделал.?

В вашем случае Вы из элементарной задачи сделали мегакод, который не работает. В программировании чем проще, тем лучше.

Сделайте примерно так:
Код AS3:

function drawRectangle(color:Number):Shape {
        var result:Shape = new Shape();
 
        result.graphics.lineStyle(1);
        result.graphics.beginFill(color, 1);
        result.graphics.drawRect(0, 0, 75, 40);
 
        return result;
}
 
var rect:Shape = drawRectangle(0xff0000);
addChild(rect);


OnEg1n 21.05.2010 15:20

Спасибо, буду пробывать.


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

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