![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Jul 2011
Сообщений: 79
|
Заголовок не полностью отражает суть вопроса.По порядку
У меня есть пара вопросов,в actionscript 3 примерно с месяц (меня на летнюю практику отправили и дали разбираться с as3 и alternativa3d) всё познать не успеваю. Собственно вопрос следующим образом Есть класс сцена в котором прописывается парсер создаются контроллеры пишутся stage.align и прочее. в main файле пишется и всё! Всё прекрасно работает.Почему?В сцене создаётся эмбед xml файла парсится и так далее. хочется сделать по иному,чтобы в объект класса сцены передавался xml. Но в классе сцена производятся следующие манипуляции stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE ..... stage3D = stage.stage3Ds[0]; stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate); stage3D.requestContext3D(); (Ну что-то в этом духе не охото расписывать,но здесь вероятно придётся создавать тоже stage да?) Судя по всему придётся всё onEnterFrame и прочее подобные вещи переносить в main да? Вообще хочется понять разницу между подходами.В первом случае extended я вообще ничего не вызываю,но при этом всё выполняется.(Простите если глупый вопрос,просто в голове не как не уляжется). Выдаёт ошибку что stage находится в Scene. То есть нужно производить инициализацию stage(всякие align и прочее) и stage3D(stage.stage3ds[0] и т.д.) в Main а потом передавать в сцену? Извините за сумбурность текста и вопросов,написал как мог. |
|
|||||
|
в первом случае (наследование: Main extends Scene ) main это объект Main со всеми свойствами\методами Stage, при его создании выполняется и все то, что прописано в конструкторе Stage
во втором случае (композиция) main просто несет на борту объект Stage, все что будет в нем сделано/определено доступно только через него же (через sc в твоем контексте) инициализацию, связанную со stage, можно производить и в sc, но после того как stage будет в нем доступен (получит ссылку или будет добавлен в дисплейЛист, если это DisplayObject) |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 79
|
А в какой момент объявляется stage? stage он же имеет тип InteractiveObject и как я понимаю чтобы его передать мне нужно его иницилизировать в main?(При этом когда я делал extends Scene в сцене я нигде не объявлял stage, он просто есть откуда-то и я им пользуюсь) то бишь я попытался сделать так:
package
{
import flash.display.Sprite;
import flash.display.Stage3D;
import flash.events.Event;
import flash.utils.ByteArray;
import Scene;
/**
* ...
* @author sa
*/
public class Main
{
[Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class;
public function Main()
{
var file:ByteArray = ((new EmbedModel()) as ByteArray);
var str:String = file.readUTFBytes( file.length );
var xml:XML = new XML( str );
var sc:Scene = new Scene(xml, stage, stage3D);
}
}
}
мне нужно в мэйне объявить что-то вроде var eventsource:InteractiveObject; var stage3D:Stage3D; .... eventsource=stage; stage3D = stage.stage3Ds[0]; var sc:Scene=new Scene(xml,eventsource,stage3D); Вообще мне желательна композиция чтобы без расширения класса импортировать в любое приложение свои классы и они бы прекрасно работали. Последний раз редактировалось savva; 21.07.2011 в 11:49. |
|
|||||
|
>> А в какой момент объявляется stage?
stage нигде не объявляется, это ссылка на объект Stage плеера, она есть у всех диплейОбжектов ( когда они добавлены в дисплей лист) >> он же имеет тип InteractiveObject и как я понимаю чтобы его передать мне нужно его иницилизировать в main та же песня: это ссылка\указатель, чтобы ее передать не надо ничего инициализировать.. боюсь мы немного на разных языках говорим, сори |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 79
|
Хорошо,тогда поставлю вопрос следующим образом.
Как мне сделать класс Main таким образом чтобы все работы со stage такие как : stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE ..... stage3D = stage.stage3Ds[0]; stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate); stage3D.requestContext3D(); package
{
import flash.display.Sprite;
import flash.display.Stage3D;
import flash.events.Event;
import flash.utils.ByteArray;
import Scene;
/**
* ...
* @author sa
*/
public class Main
{
[Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class;
public function Main()
{
var file:ByteArray = ((new EmbedModel()) as ByteArray);
var str:String = file.readUTFBytes( file.length );
var xml:XML = new XML( str );
var sc:Scene = new Scene(xml, /*сюда нужно передать stage*/);
}
}
}
.........
public class Main extends Sprite
{
[Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class;
public function Main()
{
var sc:Scene = new Scene();
}
}
}
Как передать stage в класс сцена? Последний раз редактировалось savva; 21.07.2011 в 12:50. |
|
|||||
|
вариант 1 (Scene - дисплейОбжект, имеет доступ к stage после addChild(sc))
public class Main extends Sprite { [Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class; public function Main():void { var file:ByteArray = ((new EmbedModel()) as ByteArray); var str:String = file.readUTFBytes( file.length ); var xml:XML = new XML( str ); var sc:Scene = new Scene(xml); addChild(sc);// после этого stage будет доступен в самом sc } } public class Scene extends Sprite { public function Scene(xml:XML) { trace( "xml : " + xml ); addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // здесь stage это 'родное' свойство Sprite, доступное после добавления 'на сцену' stage.align = StageAlign.TOP_LEFT; } } public class Main extends Sprite { [Embed("FormMain.xml", mimeType = "application/octet-stream")] private static const EmbedModel:Class; public function Main():void { var file:ByteArray = ((new EmbedModel()) as ByteArray); var str:String = file.readUTFBytes( file.length ); var xml:XML = new XML( str ); var sc:Scene = new Scene(xml, stage); } } Последний раз редактировалось silin; 21.07.2011 в 14:29. |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 79
|
Спасибо большое,работают оба варианта.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 21:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|