DanielD2 0 Denunciar post Postado Dezembro 30, 2009 Boa Tarde a todos. Me problema é o seguinte toda a classe que eu crio e tenho que inserir o comando stage.addEventListener ou stage.align, eu já sei que não vai funcionar retorna um erro que é o seguinte: TypeError: Error #1009: Cannot access a property or method of a null object reference. at modulo::AdaptaSite$iinit() at adapta_fla::MainTimeline/adapta_fla::frame1() A classe que está retornando esse erro é a seguinte: package modulo { import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; public class AdaptaSite extends MovieClip { public function AdaptaSite() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.addEventListener(Event.ACTIVATE, mouseAtivo); stage.addEventListener(Event.RESIZE, onResize); } public function mouseAtivo(evento:Event):void { trace("evento ativo: " + evento); } public function onResize(evento:Event):void { trace("stageWidth: " + stage.stageWidth + " stageHeight: " + stage.stageHeight); } } } eu chamo ela assim: import modulo.AdaptaSite; var teste:AdaptaSite = new AdaptaSite(); obviamente o arquivo AdaptaSite.as está na pasta modulo quem puder me ajudar eu agradeço feliz ano novo ate+ PessoAll Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Brito 12 Denunciar post Postado Dezembro 30, 2009 @Edit: Quando você está manipulando as propriedades do stage, você nao sabe de quem "stage" eh objeto ou seja você nao sabe a referencia dele por isso da o erro. Para resolver isso você precisa passar pra essa classe AdaptaSite o palco onde você ta trabalhando.(essa é a primeira maneira de resolver) A segunda é essa aqui abaixo: Ao invés de instanciar a classe pelo frame use o Document Class na barra de propriedades Compartilhar este post Link para o post Compartilhar em outros sites
Foxn 3 Denunciar post Postado Janeiro 2, 2010 O objeto não tem nenhuma referência ao stage até que o objeto seja adicionado a algum lugar no stage. Uma outra solução é executar estes comandos somente depois de adicionado a algum lugar no stage. Uma pequena adaptação resolveria isso; package modulo { import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; public class AdaptaSite extends MovieClip { public function AdaptaSite() { // Executar somente quando for adicionado ao stage this.addEventListener(Event.ADDED_TO_STAGE,adicionadoAoStage) } public function adicionadoAoStage(evento:Event):void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.addEventListener(Event.ACTIVATE, mouseAtivo); stage.addEventListener(Event.RESIZE, onresize); // Remover depois de adicionado para não executar estes comando novamente. this.removeEventListener(Event.ADDED_TO_STAGE,adicionadoAoStage) } public function mouseAtivo(evento:Event):void { trace("evento ativo: " + evento); } public function onresize(evento:Event):void { trace("stageWidth: " + stage.stageWidth + " stageHeight: " + stage.stageHeight); } } } import modulo.AdaptaSite; var teste:AdaptaSite = new AdaptaSite(); this.addChild(teste); []'S Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Brito 12 Denunciar post Postado Janeiro 3, 2010 O objeto não tem nenhuma referência ao stage até que o objeto seja adicionado a algum lugar no stage. Uma outra solução é executar estes comandos somente depois de adicionado a algum lugar no stage. Uma pequena adaptação resolveria isso; package modulo { import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; public class AdaptaSite extends MovieClip { public function AdaptaSite() { // Executar somente quando for adicionado ao stage this.addEventListener(Event.ADDED_TO_STAGE,adicionadoAoStage) } public function adicionadoAoStage(evento:Event):void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.addEventListener(Event.ACTIVATE, mouseAtivo); stage.addEventListener(Event.RESIZE, onresize); // Remover depois de adicionado para não executar estes comando novamente. this.removeEventListener(Event.ADDED_TO_STAGE,adicionadoAoStage) } public function mouseAtivo(evento:Event):void { trace("evento ativo: " + evento); } public function onresize(evento:Event):void { trace("stageWidth: " + stage.stageWidth + " stageHeight: " + stage.stageHeight); } } } import modulo.AdaptaSite; var teste:AdaptaSite = new AdaptaSite(); this.addChild(teste); []'S Não é interessante entregar o código 100% pronto, porque ai não ajuda e sim faz o dever de casa, o intuito seria mais ensinar a pescar. Voltando ao código essa que você citou é uma maneira realmente de resolver mas "quebra" a orientação a objetos, visto que ele so precisa passar o objeto criado no Main para o construtor sem a necessidade de adicionar o evento. Abs Compartilhar este post Link para o post Compartilhar em outros sites
linoart 0 Denunciar post Postado Janeiro 4, 2010 Fiquei curioso, Kisuke. Pq isso quebra a orientação a objetos e como passo o objeto sem adicionar um evento? Abraços, Compartilhar este post Link para o post Compartilhar em outros sites
DanielD2 0 Denunciar post Postado Janeiro 5, 2010 OK! deu certo o que eu fiz foi atrelar o objeto Stage no proprio object corrente. package modulo { import flash.display.Stage; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; public class AdaptaSite { private var mc:MovieClip; private var mcStage:Stage; private var disparaCall:Function; private var propriedade:Object; public function AdaptaSite(_mc:MovieClip,_propriedade:Object = null) { propriedade = {funcao:_propriedade.funcao}; disparaCall = propriedade.funcao; this.mc = _mc; mcStage = _mc.stage; //--> agora faz parte da stage do objeto adcionaEvento(); } public function adcionaEvento():void { mcStage.scaleMode = StageScaleMode.NO_SCALE; mcStage.align = StageAlign.TOP_LEFT; mcStage.addEventListener(Event.RESIZE, eventoMouse); } private function eventoMouse(evento:Event):void { propriedade = {tamW:mcStage.stageWidth,tamH:mcStage.stageHeight} disparaCall(); } public function get propriedades():Object { return propriedade; } } } não sei se foi a maneira mais "cristã", funcionou mto bem... rsrsrs obrigado pessoal mais uma vez Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Janeiro 6, 2010 Fiquei curioso, Kisuke. Pq isso quebra a orientação a objetos e como passo o objeto sem adicionar um evento? Idem. A água que alivia a sede é sempre bem vinda, é fruto da inteligência saber ofertá-la. Apenas falar da fonte sem demonstrar o caminho é apenas uma miragem. Compartilhar este post Link para o post Compartilhar em outros sites
Foxn 3 Denunciar post Postado Janeiro 6, 2010 O kisuke está certo, não é a maneira correta de se fazer, o que ensinei a fazer é mais uma adaptação técnica (popular gambiarra) para resolver o problema, tendo em vista que, para aqueles que estão começando, as vezes fica dificil forçar o usuário a seguir uma OOP mais adeguada, então nem sempre me apego a esses detalhes. Posso dar vários motivos para não fazer isso, mas vou passar um que é bem fácil de entender. Vejamos as cofigurações que ele quis mudar: scaleMode e align. Vocês concordam comigo que nem tanto o align, mas principalmente o scaleMode interfere muito no projeto? Este tipo de mudança se refere como toda a aplicação vai se comportar, interferindo totalmente como os outro elementos vão se comportar no sistema. Não é uma boa pratica você fazer isso por uma classe que pode vir a ser usada em outro lugar, esse tipo de mudança cabe a classe Main do seu projeto. Imagine se você pegar a API do youtube para colocar no seu site e quando você executa um Fullscreen ele mude a escala, alinhamento entre outras coisas no swf e ai? mesmo que quando ele saia do Fullscreen será que sua aplicação ainda vai estar 100% como estava antes? É bem provavel que não. Como eu disse, esse é apenas um dos motivos, poderia listar uma série de razões "conceituais" ou "técnicas", mas por que complicar se eu posso simplificar neste caso. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Janeiro 6, 2010 Muito obrigada Foxn, melhor impossível. Conhecer outras possibilidades e discernir o momento oportuno para usá-las é para quem domina o assunto. Compartilhar a sua experiência enriquece o nosso aprendizado. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Brito 12 Denunciar post Postado Janeiro 6, 2010 É isso ai que o foxn citou e outros motivos tb.Uma maneira bem simples dele resolver isso seria passar o objeto stage para a classe via construtor e la no construtor ele setaria as propriedades que ele quisesse. Abs Compartilhar este post Link para o post Compartilhar em outros sites
linoart 0 Denunciar post Postado Janeiro 6, 2010 Vou perguntar de novo pq esqueceram da minha pergunta. http://forum.imasters.com.br/public/style_emoticons/default/natal_ohmy.gif Pq o Kisuke disse que fazer com ADDED_TO_STAGE quebra a orientação a objetos? Please, me respondam. Fiquei muito curioso com isso. Abraços, Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Janeiro 7, 2010 Vou perguntar de novo pq esqueceram da minha pergunta. http://forum.imasters.com.br/public/style_emoticons/default/natal_ohmy.gif Pq o Kisuke disse que fazer com ADDED_TO_STAGE quebra a orientação a objetos? Please, me respondam. Fiquei muito curioso com isso. Abraços, Ô brother, a gente entrou aqui de gaiato (demos sorte de não levar pedradas, rsrsrs). A fila anda, o autor já resolveu a sua necessidade. Para maiores esclarecimentos, adicione um novo tópico. http://forum.imasters.com.br/public/style_emoticons/default/natal_tongue.gif Compartilhar este post Link para o post Compartilhar em outros sites
linoart 0 Denunciar post Postado Janeiro 7, 2010 Elektra, eu não criei o tópico. Também "entrei de gaiato" e vi um comentário que o Kisuki fez. Vou perguntar de novo: Ele disse que usar ADDED_TO_STAGE quebra a orientação a objetos. Pq quebra? Abraços, Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Brito 12 Denunciar post Postado Janeiro 7, 2010 linoart o que o Event.ADDED_TO_STAGE faz? Ele garante que objetos visuais foram de fato adicionado ao palco, mas no nosso exemplo acima eu não preciso usá-lo, pois eu não quero nada disso eu apenas quero que a minha classe saiba quem eh meu stage, pra saber onde adicionar as coisas. Claro que se eu não preciso usar o event então se eu usa-lo é porque to querendo de uma certa forma driblar o paradigma, pois pra eu conseguir o que eu quero, como já falei mil vezes so preciso passar o stage para o construtor da classe e pimba problema resolvido.Por isso eu disse que "quebra" a oop. Lógico que eu não disse pra você nunca usar, claro que é pra usar sempre que for servir. Abs Compartilhar este post Link para o post Compartilhar em outros sites
Elektra 102 Denunciar post Postado Janeiro 7, 2010 Elektra, eu não criei o tópico. Também "entrei de gaiato" e vi um comentário que o Kisuki fez. Vou perguntar de novo: Ele disse que usar ADDED_TO_STAGE quebra a orientação a objetos. Pq quebra? Abraços, Bem tranquilo, foi só pra furungar com o kisuke. Se puxou, gostei de ver. Grande baiano. Abs. Compartilhar este post Link para o post Compartilhar em outros sites