![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+4 20.02.09]
Регистрация: Feb 2009
Сообщений: 19
|
Сел за AS3 буквально пару дней.
разбираюсь с примером к оффициальному руководству. Пример который про 3Д куб (если кто разбирался с ними). класс fla документа задан как "cube". Сам класс (cube.as): package { import flash.display.MovieClip; import flash.display.Graphics; import flash.events.MouseEvent; import flash.display.Stage; import flash.geom.Matrix3D; import flash.geom.Vector3D; import flash.display.GradientType; public class cube extends MovieClip { public var box:Box3D; // the 3d box private var boxSides:Array = new Array(6); // the 6 faces of the box private var boxMat3D:Matrix3D; private var savedStageX:Number; private var savedStageY:Number; public function cube():void { for (var side:uint = 0; side < 6; side++) { var s:MovieClip = new MovieClip(); s.graphics.beginFill(0x9ff << (side*4), 1); s.graphics.drawRect(0, 0, 256, 256); boxSides[side] = s; } box = new Box3D( boxSides[0], boxSides[1], boxSides[2], boxSides[3], boxSides[4], boxSides[5]); this.addChild(box); this.x = 250; this.y = 250; this.z = 500; boxMat3D = box.transform.matrix3D; savedStageX = stage.mouseX; savedStageY = stage.mouseY; stage.addEventListener(flash.events.MouseEvent.MOUSE_MOVE, mouseMoveH); } private function mouseMoveH(e:MouseEvent) { var diffY:Number = savedStageY - e.stageY; var diffX:Number = savedStageX - e.stageX; savedStageX = e.stageX; savedStageY = e.stageY; boxMat3D.appendRotation(-diffY, Vector3D.X_AXIS); boxMat3D.appendRotation(diffX, Vector3D.Y_AXIS); box.ReorderChildren(); } } } Когда я снимаю значение класса с fla документа и в фрейме действий принудительно вызываю конструктор класса (var cube1:cube = new cube() должен создаться экземпляр класса (если я ничего не путаю), ну и вообщем то ничего не создается (1009 ошибка).Что я не так делаю? Заранее благодарю за беспокойство. исходники прикрепил Последний раз редактировалось wvxvw; 29.08.2009 в 06:21. |
|
|||||
|
[+4 20.02.09]
Регистрация: Feb 2009
Сообщений: 19
|
Кроме вызова конструктора нужно создать еще сам экземпляр, т.е. объявить потомка:
И через класс в этом случае невозможно добраться до сцены таким медодом (stage.addEve...) Ну я так если кому интересно будет. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
Ошибка 1009 вызвана тем, что в конструкторе идёт обращение к stage, который появится только после события ADDED_TO_STAGE, которое нужно дождаться. |
|
|||||
|
[+4 20.02.09]
Регистрация: Feb 2009
Сообщений: 19
|
ну да более правильное объяснение=)
а при каких условиях событие ADDED_TO_STAGE произойдет? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
При addChild.
|
|
|||||
|
[+4 20.02.09]
Регистрация: Feb 2009
Сообщений: 19
|
а если флеш все равно на код ругается и после addChild, в чем проблема?
А если перевожу event на box то проходит, но соответсвенно и отслеживает положение мыши только на box'е. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Прочтите ещё раз последнее предложение в 3 посте.
|
|
|||||
|
[+4 20.02.09]
Регистрация: Feb 2009
Сообщений: 19
|
в fla документе вызывается конструктор и затем экземпляр класса (cube1) добавляем в дисплей лист, т.е. объявляем addChild(cube1); который в свою очередь возбуждает событие ADDED_TO_STAGE, вследствии чего появлется доступ к объекту stage. Я правильно Вас понял?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Правильно.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 02:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|