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

In8Finity 31.05.2010 12:18

почему не двигается объект?
 
Я в главном классе создаю объект land.
А в другом классе хочу его как-то перемещать по экрану.
Объект создаётся, но почему-то не двигается.
Ошибку пишет такую:
Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at Land/landMove()

Подскажите, где я ошибся?
Вот, классы выглядят так:

Код AS3:

package {
 
        import flash.display.*;
        import flash.events.*;
 
        public class Main extends MovieClip {
 
                public var land:Land;
 
                public function Main() {
 
                        land = new Land();
                        addChild(land);
                }
        }
}


Код AS3:

package {
 
        import flash.display.*;
        import flash.events.*;
 
        public class Land extends MovieClip {
 
        public var land:Land;
 
                public function Land() {
 
                        addEventListener(Event.ENTER_FRAME, landMove);
 
                }
 
                public function landMove(evt:Event):void {
                        land.x+=1;
 
                }
        }
}


-De- 31.05.2010 12:27

Кэп сообщает, что переменная public var land:Land; из класса Land не определена, соответственно при попытке доступа к её внутренностям генерируется Error #1009

In8Finity 31.05.2010 12:30

Я только в самом начале изучения AS3.
Поэтому, понимаю, вопросы и ситуации у меня дурацкие.
Но вот разве вот здесь...
Код AS3:

public var land:Land;

...она не определяется?

incvizitor 31.05.2010 12:42

Скажем вы определили тип свойства land и зарезервировали для него место в оперативной памяти. Но надо еще, непосредственно создать объект, для этого нужно написать:

Код AS3:

land=new Land();

Однако мне кажется что в Вашем случае свойство land вообще не нужно, а надо просто писать:

Код AS3:

x+=1;


gloomyBrain 31.05.2010 12:48

Переменная определяется тогда, когда ей присваивается значение.
Код AS3:

public var x:Number; 
// тут вы создали переменную.
// У нее нет никакого значения
// или есть значение-по-умолчанию
 
x = 10;
// тут вы присвоили значение
// переменная определена, т.к. имеет зачение

Напишите не land.x += 1, а this.x += 1.

-De- 31.05.2010 13:22

Тут неплохо бы рассказать про primitive (prime) data types и complex data types, чтоб знать, хотя бы, когда = копирует, а когда заставляет ссылаться на тот же обьект, когда "нет никакого значения", а когда "есть значение по умолчанию". Да, прошлое предложение сформулировано криво. В вики что-то есть, но не всё или непонятно написано.
http://en.wikipedia.org/wiki/ActionS...ata_structures
ну т.е. понять, почему код ниже выводит то, что выводит)
Код AS3:

var a:Number = 1;
var b:Number = a;
a = 2;
trace(b);//1
var l1:Sprite= new Sprite();
var l2:Sprite = l1;
l2.x = 1;
l1.x = 2;
trace(l2.x);//2


OnEg1n 01.06.2010 11:30

У меня есть вопрос, не много затрагивающий данную тему. Опишу Вам ситуацию на базе данного примера. Допустим я создал 2 объекта land и land2. Как только запускается программа объект land начинается двигаться, т.к.

Код AS3:

land.x+1;

С помощью таймера я, через некоторое время, хочу запустить объект land2, причем чтобы движения 1 не зависели от движения 2.
Каким образом мне это сделать?

elcard 01.06.2010 23:12

Сам новичек, но предположу, что стоит смотреть в сторону Timer();

-De- 01.06.2010 23:38

Да, "С помощью таймера" - это хороший ответ, считаю %)
Там вообще-то надо умудриться, чтоб они зависели. А если всё-таки будут зависеть, то советую сменить дилера!

Psycho Tiger 02.06.2010 00:30

Глум, там super.x, скорее =) Знаю, что высосано из пальца - но всё же)


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

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