![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
возникла скользкая проблема. Дабы не выкладывать весь код представлю схематично основные моменты.
Есть исполняемый класс A (по имени .fla файла) в безымянном пакете и в той же директориию В этом классе создается экземпляр класа B и С (AS-файлы находится в отдельной папке уровнем ниже и принадлежат одному пакету). У класса B есть свойство bb (класса МувиКлип). На новом кадре скрипт должен вызывать функцию, которая (при определенном положении курсора мыши относительно стола) должна двигать мувиклип внутри экземпляра класса B . Но вместо этого (по адресу C.AS, line *) я вижу ошибку 1120 сразу на два слова. Т.е. неизвестное значение на stage и на b (экземпляр класса B, созданный в исполняемом классе A) Это точно не из-за import ...;. Импортировал в класс С все "родные" классы. Не помогло ни для одного, ни для другого. Выглядит примерно так: package { import uti.*; ... public class A { public var b:B; public var c:C; public function A { b = new B; addChild(b) c = new C; addEventListener(Event.ENTER_FRAME, c.eventFrame) } } } package uti { import ...; ... public class B { public var bb:MovieClip; public function B { ... bb.x = 0; bb.y = 0; addChild(bb); } } } package uti { import ...; ... public class C { public var mover:Number = 5; public function C { } public function eventFrame():void { if (stage.mouseX >= 520 && stage.mouseY >= 370) { b.bb.x -= mover; b.bb.y -= mover; } } } } Последний раз редактировалось switcher!; 12.07.2009 в 23:36. |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
Классы A и B
__________________
...убивать людей не удовольствия ради, но для еды. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
Извиняюсь, торопился и не указал - что классы A и B расширяют класс MovieClip.
А вот C действительно не расширял - я подумал, что он как класс-обработчик событий просто не нуждается в расширении МувиКлипа, ведь он и не должен отображатся на экране. Он только лишь изменяет числа в экземплярах других классов... Поставил ему расширение от Мувиклипа. Теперь компилятор не ругается на stage. Но по прежнему ругается на b (в исполняемом классе A)... Хотя b существует и корректно отображается, если закомментировать оператор if в классе C Напомню, что ошибка (судя по сообщениям компилятора) возникает именно в C.as на линии как раз: Последний раз редактировалось switcher!; 13.07.2009 в 01:38. |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
В классе C нету поля .b, и в методе экземпляра C, работающем в контексте этого экземпляра, не видно поле .b экземпляра класса A. Отсюда и ошибка.
__________________
...убивать людей не удовольствия ради, но для еды. Последний раз редактировалось DeliMIter; 13.07.2009 в 01:44. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
От это у меня сейчас взорвался мозг всего с одного предложения
![]() поле - я так понял есть свойство объекта. Так... его, поля, и не должно быть. Ссылка идет на поле другого класса... Вторую половину не воткнул вообще ![]() и почему .b вы написали через точку ? |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
Чтобы указать, что это свойство.
Метод в контексте класса C не имеет доступа ни к чему, кроме полей экземпляра класса C и полученных аргументов. Просвещайся: http://noregret.org/tutor/scope/
__________________
...убивать людей не удовольствия ради, но для еды. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
как .b свойство ? b это ж полноценная переменная, хранящая экземпляр класса B, по крайней мере - это четко прослеживается в классе A.
Може .bb? Это как раз полноценное свойство... Цитата:
+ читаю пока ссыль (жаль только - там второй скрипт) |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
Приведём аналогию из обычного мира. Если ты C пошёл в зоопарк и твой глаз A передал тебе событие о том, что ты видишь слона B, то это ещё не означает, что ты имеешь возможность помахать хоботом B.bb. А то, что в твоей архитектуре не ты содержишь глаз, а глаз - тебя, то это явная недоработка архитектора.
Свойство = поле объекта. Это синонимы. Выучи базовые принципы ООП, т.е. что такое объекты, методы, поля и свойства, контексты и области видимости. Если ты хочешь программировать на ООП-языке, то без этого не обойтись. Если только, конечно, тебе не доставляет удовольствие спотыкаться на каждом шагу.
__________________
...убивать людей не удовольствия ради, но для еды. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
понял, чего и опасался...
основательно переписывать код очень не хотелось ![]() а за предметный инструктаж - искренняя благодарность! ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|