Ir para o conteúdo
carcleo

2 problemas com meu swf

Mensagens Recomendadas

carcleo

Olá pessoal.

Bom Dia.

Tenho 2 problemas com o meu swf:

1) Como faço para que, abrindo uma popup a partir do clique em um botão, o bloqueador de popups não seja ativado?

2) Tenho o codigo abaixo com uma tabela que movimenta via start drag por um botão. Acontece que, quando puxo o botão, o startdrag trabalha bem. Mas, quando solto o mouse, aí o stopdtag diz:

TypeError: Error #1009: Não é possível acessar uma propriedade ou um método de uma referência de objeto nula.

at infuteis_fla::MainTimeline/stopScroll2()[infuteis_fla.MainTimeline::frame40:39]

Segue em anexo o fla e o codigo abaixo:

stop();

voltar.addEventListener(MouseEvent.CLICK, volta);

var scrollP:Point = new Point(scroller.x,scroller.y); 
var scrollRange:int = 300; 
var timelineTotalFrames:int = especificacoes.totalFrames; 
var rect:Rectangle = new Rectangle(scroller.x,scroller.y,0,scrollRange-scroller.height); 

especificacoes.stop(); 


function onDown(e:MouseEvent):void 
{ 
scroller.startDrag(false, rect ); 
addEventListener(Event.ENTER_FRAME, onScroll); 
} 

function onUp(e:MouseEvent):void 
{ 
  scroller.stopDrag(); 
  if (hasEventListener(Event.ENTER_FRAME)) 
  {removeEventListener(Event.ENTER_FRAME, onScroll); }
} 

function onScroll(e:Event):void 
{ 
// (scroller.x - scrollP.x) fix if your scroll have a x different from 0 
var calcFrame : int = ((scroller.y - scrollP.y) * timelineTotalFrames) / scrollRange; 
especificacoes.gotoAndStop(calcFrame+1); 
} 

scroller.addEventListener(MouseEvent.MOUSE_DOWN, onDown); 
scroller.addEventListener(MouseEvent.MOUSE_UP, onUp); 
// release mouse outside scroll 
stage.addEventListener(MouseEvent.MOUSE_UP, onUp); 

http://www.bateriasadvance.com.br/infuteis.fla

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

1) antes disso, apresenta uma mensagem ao utilizador a dizer que a tua aplicação não funciona sem popups e para o utilizador permitir popups (ou deixar de usar a tua aplicação). Depois assume que os popups funcionam. Assim ficas com o problema resolvido. :) :) :)

Agora a sério: não faças a tua aplicação depender de popups.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Na verdade, são 33 páginas de um arquivo .pdf que exportei todas as folhas como imagem e criei um arquivo html para rodar figura abaixo de figura. Abrindo como uma popup.

Agora fala sério: Colocar 33 imagens em um arquivo fla e ter 33 scrowls para subir e descer a tela ( a imagem é mais alta que o fla).

Será que tem outra forma de fazer isso?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Voce quer dizer fazer rolar o pdf no swf como se fosse um object text?

Se for isso, me ensina(fazendo favor) como fazer isso em as3?

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

Boas a todos!

1 - Usar popups do browser... :D isso dá sempre uma grande confusão!

...

Agora a sério: não faças a tua aplicação depender de popups.

Também acho que essa é a melhor solução... Ou entao cria os popups no flash directamente (sem ter de abrir novas janelas do browser)

2 - epá! essa tua scroll... tá aí um grande trabalho!! lol! Sugiro que simplifiques mais isso! uma scrollbar é das coisas mais simples de se fazer em flash.

O erro que te está a aparecer, é exactamente o que ele diz:

"Não é possível acessar uma propriedade ou um método de uma referência de objeto nula."

Ou seja, quando carregas a função stopScroll2(), perdes-te a referência ao objecto scrollMC2 (scrollMC2 = null), isto é derivado há maneira que estás a usar para fazer scroll das coisas...

Simplifica o processo, se quiseres posso-te tentar dar umas dicas de como por isso mais dinamico e simples.

Quanto ao uso de pdf em flash, infelizmente isso é (e sempre foi) um problema implementar... sei que através do uso de java se consegue uma coisa dessas, mas dá uma grande trabalheira... :)

Sugiro que faças o que o fil79 diz:

se já tens os documento em imagens porque não abres dentro do proprio swf, usando um movieclip, por exemplo?

Mas ao colocares o pdf como imagens, perdes a opção de poder selecionar o texto... (fica tudo um bitmap)

cumps,

cc


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

:biggrin:

A ideia seria fazeres tu com a nossa ajuda :)

Dá uma olhada neste tutorial:

http://www.gotoandlearn.com/play.php?id=71

Se te forem surgindo dúvidas, avisa que nós tentamos ajudar.  :D

Bom, não sou nada bom em flash.

Pelas coisas que tens mostrado, e pelas dúvidas que tens tido, acho que tens um bom nivel

é normal o pessoal bater com a cabeca na parede de vez em quando  :wallbash:


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

tudo bem.

vou ir fazendo e a medida que forem surgindo dúvidas, aí eu vou postando.

Mas, e sobre as 33 imagens. Que ideia me dás?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

Acho que a sugestão do fil79:

se já tens os documento em imagens porque não abres dentro do proprio swf, usando um movieclip, por exemplo?

é a mais adequada...

Agora depende de ti de como as queres mostrar. (um slideshow por exemplo)


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Barra de scrolling.

Sem contar o peso que vai ficar esse arquivo com 32 imagens.

Atualmente voce ver ele em:

http://www.bateriasadvance.com.br  ->

depois vai no menu Informaçoes ùteis ->

depois no submenu Treinamento Técnico

Irá abrir(se o navegador deixar) uma popup para exibir as 32 imagens

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Hum,

Tentei colocar as imagens, uma abaixo da outra, mas como elas são muito altas (1138px cada) e são 33 imagens, o palco do flash só deixou colocar 4, uma embaixo da outra, depois o flash não baixa mais a barra de rolangem da IDE para eu colocar mais imagens.

Nesse caso, o que eu faço?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

2 - epá! essa tua scroll... tá aí um grande trabalho!! lol! Sugiro que simplifiques mais isso! uma scrollbar é das coisas mais simples de se fazer em flash.

O erro que te está a aparecer, é exactamente o que ele diz:

"Não é possível acessar uma propriedade ou um método de uma referência de objeto nula."

Ou seja, quando carregas a função stopScroll2(), perdes-te a referência ao objecto scrollMC2 (scrollMC2 = null), isto é derivado há maneira que estás a usar para fazer scroll das coisas...

Simplifica o processo, se quiseres posso-te tentar dar umas dicas de como por isso mais dinamico e simples.

Como posso contornar esse problema partindo do código que estou usando?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Bom, achei outro problema.

Esse é o swf

aa.jpg

Acontece que enquanto eu navego nos menus: O que é, Dicas e Treinamento, tudo vai bem.

Porem, quando vou em Especificações Técnicas, que é essa imagem:

width=750 height=468http://www.bateriasadvance.com.br/bb.jpg[/img]

Ao, rolar o scroll e soltar, após ir para qualquer outro menu o swf já se encontra travado.

Segue o as3 desse frame:

stop();

voltar.addEventListener(MouseEvent.CLICK, volta);

var scrollP:Point = new Point(scroller.x,scroller.y); 
var scrollRange:int = 300; 
var timelineTotalFrames:int = especificacoes.totalFrames; 
var rect:Rectangle = new Rectangle(scroller.x,scroller.y,0,scrollRange-scroller.height); 

especificacoes.stop(); 


function onDown(e:MouseEvent):void 
{ 
scroller.startDrag(false, rect ); 
addEventListener(Event.ENTER_FRAME, onScroll); 
} 

function onUp(e:MouseEvent):void 
{ 
  scroller.stopDrag(); 
  if (hasEventListener(Event.ENTER_FRAME)) 
  {removeEventListener(Event.ENTER_FRAME, onScroll); }
} 

function onScroll(e:Event):void 
{ 
// (scroller.x - scrollP.x) fix if your scroll have a x different from 0 
var calcFrame : int = ((scroller.y - scrollP.y) * timelineTotalFrames) / scrollRange; 
especificacoes.gotoAndStop(calcFrame+1); 
} 

scroller.addEventListener(MouseEvent.MOUSE_DOWN, onDown); 
scroller.addEventListener(MouseEvent.MOUSE_UP, onUp); 
// release mouse outside scroll 
stage.addEventListener(MouseEvent.MOUSE_UP, onUp); 

O compilador acusa erro nessa função:

function onUp(e:MouseEvent):void 
{ 
  scroller.stopDrag();    ---> Nessa linha o compilador trava.
  if (hasEventListener(Event.ENTER_FRAME)) 
  {removeEventListener(Event.ENTER_FRAME, onScroll); }
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Bom, conforme orintação de vocês, consegui resolver o problema dos erros de codigo no starDrag usando tweener(classe caurina).

Agora, gostaria de saber se há uma forma de adicionar ao stage, as 33 imagens de 1300px cada. Uma embaixo da outra.

Tem jeito?

Tentei. E ao adicionar a terceira imagem, na quarta imagems, a barra de rolagem da IDE do Flash não desce mais para eu importar.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

boas,

tenho 2 sugestoes para isso:

1 - colocar o pdf para download

2 - carregar as imagens através de 1 xml


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Pensei direito:

Meu movie clipe tem 1000x300.

A área livre para mostrar as imagens é só de 600x200.

Cada imagem tem cerca de 1000pxx1390px.

Ainda que eu coloque por xml no swf, alem desse swf ficar bem pesado, vai ficar pequena demais a exibição das imagens.

Jeito de driblar o bloqueador de popup tem não né? Ou tem sim?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

podes sempre reduzir o _width das imagens para 600px... (e o _height proporcionalmente)

o swf em si, nao irá ficar muito pesado (antes pelo contrario), o que é capaz de demorar é o carregamento das imagens, mas podes sempre por um pre-loader para a coisa... :)

Se precisares posso-te ajudar nisso.

Quanto ao bloqueio dos popups, nao estou a ver nada que posaa "facilmente" resolver o problema, continuo a achar que a melhor solucao seria fazeres load das imagens atraves de um ficheiro xml.

Se alguém tiver ideia de como resolver o problema dos popups, ou saiba como carregar um pdf em flash (de maneira simples), que se chegue à frente! :D

cumps,

cc


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Bom, reduzindo para 600px, a altura deve chegar a 1000px. Só dará para adicionar ao stage umas 6 imagens. E são 33.....

Quanto ao xml, me explica que vou tentar fazer igual.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

ao carregares as imagens por xml, nao adicionas nenhuma imagem no stage...

usa esta estrutra (por exemplo) para o teu xml:

<imagesData>
<img path="img1.jpg"/>
<img path="img2.jpg"/>
<img path="img3.jpg"/>
<img path="img4.jpg"/>
<img path="img5.jpg"/>
<img path="img6.jpg"/>
<img path="img7.jpg"/>
<img path="img8.jpg"/>
</imagesData>

o atributo "path" é o local onde tens as imagens.

depois no flash carregas o xml e fazes load das imagens, algo tipo:

var imagesData:XML;
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, dataLoadedHandler);
loader.load(new URLRequest("imagesData.xml"));

no handler:

function dataLoadedHandler(e:Event):void {

imagesData = new XML(e.target.data);

var imageLoader:Loader;

for( var i:uint = 0; i < imagesData.img.length(); i++) {

	imageLoader = new Loader();
	this.addChild(imageLoader);
	imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
	imageLoader.load(new URLRequest(imagesData.img[i].@path));
}
}

Se nao entenderes bem o que se esta a passar, avisa que tentamos explicar melhor.


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
coxosclassic

ok, essa funcao (handler) servira para alinhares as imagens umas a seguir as outras.

Visto que ja tens todas as imagens carregadas e adicionadas ao stage (this.addChild(imageLoader)), agora precisas de as alinhar correctamente, visto que estao todas por cima uma das outras.

terás de criar mais 1 variavel:

var imageCounter:int = 0 //para ir contando o numero de images que estejam carregadas

Agora para o handler imageLoaded, algo tipo:

function imageLoaded(e:Event):void {

imgCounter++;

       // se todas as imagens estiverem carregadas...
if(imgCounter == imagesData.img.length()) {

	var image:Loader; //referencia para a imagem que vamos alinhar

	for(var j:uint; j < this.numChildren; j++) {

		image = this.getChildAt(j) as Loader;

                        //alinhar a imagem por baixo da anterior...
		if( j > 0) image.y = this.getChildAt(j-1).y + this.getChildAt(j-1).height;
	}
}
}

de seguida teras de implementar a scrollbar para poderes ires "scrollando" todas as imagens.

Basicamente, este codigo esta a replicar o processo que farias no IDE do flash, ao importares as imagens (e alinhares) para o stage...

A única diferenca é que estas a carregar as imagens dinamicamente, e tens ainda a vantagem de poderes incluir ou retirar imagens modificando apenas o xml (nao precisas de compilar o swf outra vez, basta mudar o xml)


Cumps,

cc

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
carcleo

Por ser uma modelo diferente, podes me ajudar na implementação da barra de roangem tambem? (Sei que ja estou pedindo de mais. Porem, se não importares, agradeço)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.