Форум 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=148497)

MetSerp 04.01.2011 02:26

Цитата:

Если объект не добавлен, то и координата должна быть не определена, то есть даже не равна нулю.
у предопределенных свойств существуют значения по умолчанию в случае с координатами это 0
Цитата:

Честно говоря не понял, о чем ты. Думаю это ничего не исправит.
в данном коде - не исправит.
а если переделать классы шар и шарзлой удалив в них определения одноименных с главным классом свойств или забирать в них ссылку на объект из свойств Main класса должно помочь.
Вообще может исходя из задачи будет проще сориентироваться?

Добавлено через 3 минуты
Цитата:

удивило, что оно не ругнулось насчёт override, что, если private,
насколько я знаю private доступен только внутри класса, потому override нету.

DZHETIGAPA 04.01.2011 22:15

Добавил в класс Shar экземпляр класса SharZloi.НО... теперь поведение объекта класса SharZloi на сцене вообще не понятно. Хотя потом дошел, что теперь отсчет координат объекта класса SharZloi идет относительно объекта класса Shar, ведь мы именно в этот класс добавляем.А мне ведь надо координаты относительно сцены.

Значит, чтобы координаты для обоих объектов классов были одинаковы относительно сцены, то надо добавлять их только в класс Main. Верно я понял?

TanaTiX 04.01.2011 22:23

Можно делать перерасчет относительно любого контейнера, смотрите в сторону globalToLocal и localToGlobal

DZHETIGAPA 05.01.2011 02:38

Вот возникло еще одно непонимание. прошу помощи.

Добавил еще один маленький шарик SharSmall, который удаляется и заново добавляется на сцену в случае столкновения.

Вот код двух классов:

Код AS3:

package  
{
        import flash.display.*;
        import flash.events.*;
        import com.greensock.*;
 
        public class SharSmall extends XYRandom
        {
                private var rad:Number;
 
                public function SharSmall():void
                {
                        this.addEventListener(Event.ADDED_TO_STAGE, added);
                }
 
                private function added(e:Event):void
                {
 
            TweenMax.to(this, 0.5, { x:this.x + 40, yoyo:true, repeat: -1 } );
                        addEventListener(Event.ENTER_FRAME, onFrame);
                        rad = this.width / 2;
 
                }
 
                private function onFrame(e:Event):void
                {
                        if (this.x <= rad) this.x = rad;
                        if (this.x >= stage.stageWidth -rad) this.x = stage.stageWidth -rad;
                        trace("STAGE="+stage.stageWidth)
                }       
        }
}

SWF файл компилируется во Flash CS3, но при каждом столкновении пишет ошибку:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at SharSmall/::onFrame()
при этом продолжается работа, но при каждом столкновении прога тормозит все больше. Ошибка возникает именно при столкновении объектов. То есть если нет столкновения, то и нет ошибки.

Если вместо stage.stageWidth ставлю просто значение 550, то все работает без проблем.

Вот основной класс, где происходит обработка столкновения объектов.
Код AS3:

package  
{
        import flash.display.*;
        import flash.events.*;
        import com.greensock.*;
        import CircleCollision;
        import flash.ui.Mouse;
 
        public class Main extends Sprite
        {
                private var hit1:CircleCollision;
 
                private var  hit2:CircleCollision;
 
                private var shar:Shar;
 
                private var zloi:SharZloi;
 
                private var small:SharSmall;
 
                public function Main():void
                {
                        shar= new Shar();
                        addChild(shar);
 
                        zloi = new SharZloi();
                        addChild(zloi);
 
                        small = new SharSmall();
                        addChild(small);
 
                        Mouse.hide();
 
                        stage.addEventListener(Event.ENTER_FRAME, onFrame)
 
                }
 
                private function onFrame(e:Event):void
                {
                        hit1 = new CircleCollision(zloi as DisplayObject, shar as DisplayObject);
                        addChild(hit1);
 
                        if (hit1.Collision)
                        {
                                trace("BOOM")
                        }
 
                        hit2 = new CircleCollision(shar as DisplayObject, small as DisplayObject);
                        addChild(hit2);
 
                        if (hit2.Collision) //именно тут происходит проверка столкновения.
                        {
                                this.removeChild(small);
                                small = new SharSmall();
                            this.addChild(small);
                        }
                }
        }
}

Жду вашей помощи.


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

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