Ir para conteúdo
Fórum Script Brasil

Pooh

Membros
  • Total de itens

    186
  • Registro em

  • Última visita

Tudo que Pooh postou

  1. Olá gFox Existem poucos Mmo's em Flash. O maior e melhor exemplo destes é Adventure Quest sendo o único com sucesso. E mesmo este é muito limitado a sua interatividade pobre. Jeito sempre há meu caro, mas para isso gostaria de lhe dar uma boa dica. Um servidor de MU online pego na internet, apenas configurar alguns parâmetros e o servidor é algo muito, repito muito diferente de se criar um Mmo principalmente ao que se trata um Browser game(jogo bem diferente de Mmorpg, caso de MU); Primeiro vai precisar entender o que é e pra que serve um motor de jogo. Vai ter de definir sua plataforma. E procurar um time com programadores de bons conhecimentos na área escolhida. Aconselho a estudar mais sobre jogos, faça alguns jogos plataforma como pacMan, tetris, space invaders, depois parta para mário e jogos plataforma em geral. Se conseguir fazer isso meu amigo ai sim estará pronto pra pensar em fazer algo como 1 jogo online somente quando o jogo em si não lhe for o empecilho mas somente a integração com Multi-clientes e acessos simultâneos sem sobrecarga de servidor entre outros "pepinos" que lhe possam vir a frente. *Dica: Qualquer um percebe que estás sendo precipitado quando se fala algo sem pesquisar como por exemplo falar que queres um jogo em flash como runescape* Boa Sorte e espero vê-lo postando alguns jogos por aqui ^_^ Abraços Pooh
  2. Pooh

    Login no flash

    Olá amigo ! ficaria muito grato em lhe dar milhões de dicas sobre flash, mas acho injusto lhe ajudar quando a preguiça lhe bate à porta. Basta procurar sobre "Login Flash+php" que irão aparecer vários tutorais e lembre-se de procurar para o seu reespectivo flash. Abraços Pooh
  3. Pooh

    slideshow

    Acabei dando uma cochilada mas ta aqui ^_^ fiz um exemplo bem simples assim você pode customizá-lo mais tarde. não inclui muita coisa, somente ele é auto-ajustável até 14 imagens sendo elas 200x160(mas você pode ajustar pra mais ou para menos); então vamos lá: como Sempre stop(); #include "mc_tween2.as" paramos nossa linha de tempo e chamamos nosso amigo mc_tween2.as; import flash.geom.Point; Chamamos nossa biblioteca de pontos, para que eu possa setar 2 pontos sendo eles o ponto onde os Slides irão aparecer e outro aonde irão aparecer os botões com número do slide. var Status:Boolean = true; // Status de clique var numSlides:Number =5; // número de slides var current:Number=0; //slide atual var i:Number = 0; //contador var numbers:Point = new Point(10,180); //ponto de início dos menus var slidePos:Point = new Point(0,0); //ponto de inicio dos slides Alguns defines comentados. function criaNumbers(numMenu:Number){ for(i=1;i<=numMenu;i++){ _root.attachMovie("menuElement","Element"+i,_root.getNextHighestDepth()); _root["Element"+i]._x=(numbers.x)+(25*i); _root["Element"+i].name=i; _root["Element"+i]._y=numbers.y; _root["Element"+i].elementNumber.text=i; _root["Element"+i].onPress = function(){trans(this.name);} } } Função que vai criar nosso menuzinho, faz nosso contador incremenetar até o numero desejado(no caso 5) então cria um novo movie para cada slide. eu deixei como default o nome dos menuzinhos como "menuElement"(Elemento do Menu); setei o seu parametro name para passar pra função "trans" o seu número ^_^ function trans(transAtual:Number) { if(Status==true){ if(current==0) { attachMovie("Slide"+transAtual,"Slide"+transAtual,_root.getNextHighestDepth()); _root["Slide"+transAtual]._alpha=0; _root["Slide"+transAtual]._x=slidePos.x; _root["Slide"+transAtual]._y=slidePos.y; _root["Slide"+transAtual].alphaTo(100,2); current=transAtual; Status=false; setTimeout(function(){Status=true;},1000); } else { _root["Slide"+current].alphaTo(0,1); setTimeout(deletaMC,1000,_root["Slide"+current]); attachMovie("Slide"+transAtual,"Slide"+transAtual,_root.getNextHighestDepth()); _root["Slide"+transAtual]._alpha=0; _root["Slide"+transAtual]._x=slidePos.x; _root["Slide"+transAtual]._y=slidePos.y; _root["Slide"+transAtual].alphaTo(100,2); current=transAtual; Status=false; } } } Aqui está a mágica ! Não repare na bagunça, não estruturei nada nem otimizei a função, está apenas funcional. Primeiramente ele testa o Status para ver se você pode clikar Depois teste se é a primeira vez que está a usar ou seja current=0; se for então ele apenas faz aparecer o slide selecionado; senão ele faz primeiro desaparecer o slide atual e depois faz aparecer o proximo slide. poderia até ser adicionado 1 delay entre as transições pra n ficar um em cima do outro mas o seu site de referencia não tem esse delay então não me preocupei com isso. após desaparecido o slide atual removemos o Movie com a função deletaMC; function deletaMC(mc:MovieClip) { mc.removeMovieClip(); Status=true; } Aqui deletamos o movieClip que ficou invisivel, e setamos o Status para positivo ou seja, poderás clikar novamente em algun numero :) criaNumbers(numSlides); Executamos nossa função; Em funcionamento : Slides Fotos.html Código fonte: Slides.fla Obs* É necessário ter o plugin mc_tween2.as instalado, caso não tenha, pegue aqui:Mc_Tween Version 2.28.29 Obs2*Não foram colocados preloaders no entando podem ser facilmente ajustados ao código; Bom é isso Espero que isso o tenha ajudado em algo e não apenas lhe confundido mais. qualquer duvida é só postar; E perdoe meus homicidios gramaticais ^_^ Abraços Pooh
  4. Pooh

    slideshow

    Facilmente reproduzido, vou fazer um breve tutorial e depois lhe posto. Abraços Pooh
  5. Olá meu caro :) vosso código não deveria estár funcionando nem no trace. você definiiu "node" como var node = documentos.firstChild.childNodes; ou seja node agora é um childNodes. childNodes é uma array o que faz de node agora uma array. para acessá-lo --> node[x] aonde X é o documento que busca (em vosso caso de 0~2); além disso, para que usaste a variável i ? bom se queres apenas o primeiro "documento" não necessitas dele. então para se ter acesso correto é preciso mudar levemente o código: vosso i só será útil em 1 trace ou em uma list for(var i = 0; i<docs; i++) { trace(node[i].childNodes[0].firstChild.nodeValue); trace(node[i].childNodes[1].firstChild.nodeValue); trace(node[i].childNodes[2].firstChild.nodeValue); } Assim tudo será mostrado porém se queres apenas o primeiro "documento" Codigo.text = node[0].childNodes[0].firstChild.nodeValue; Titulo.text = node[0].childNodes[1].firstChild.nodeValue; Revisao.text = node[0].childNodes[2].firstChild.nodeValue; agora deveria funcionar ^_^ Abraços Pooh
  6. Olá Guilherme ^_^ acabei de olhar o exemplo que mostras-te e é bem simples de reproduzir. não refinei muito porém o básico do que precisa para fazer algo igual está nesse fla que estou por enviar. Mas antes algumas explicações. Como na maioria dos meus trabalhos eu utilizarei a classe "mc_tween2.as" para fazer os fades (aparecer e desaparecer); stop(); #include "mc_tween2.as" var Status:Boolean = false; Começamos parando nosso filme, chamando a classe mc_tween2 e declarando nossa variável de Status; attachMovie("img","Img",_root.getNextHighestDepth()); Img._x=20; Img._y=20; attachMovie("mask","Mask",_root.getNextHighestDepth()); Mask._x = Img._width+40; Mask._y = 20; Mask._alpha=0; attachMovie("lupa","Lupa",_root.getNextHighestDepth()); Lupa._x = Img._x; Lupa._y = Img._y; Lupa._alpha=0; Em seguida, vamos adicionar os movieclips em nosso Stage, estou definindo como default a Lupa e a Mask(local aonde a imagem vai aparecer ampliada) como invisiveis. var maskObj:MovieClip = _root.Mask.maskObj; Declarando novamente como Movieclip apra encurtar o Path (não ter de escrever toda santa hora _root.Mask.MaskObj); Agora vamos à Mágica :lol: _root.onMouseMove = function() { if(Status==true){ Lupa._x = _xmouse-40; Lupa._y = _ymouse-50; maskObj._x=40-(Lupa._x*2); maskObj._y=35-(Lupa._y*2); //LIMITAÇÃO LADO ESQUERDO if(Lupa._x <= Img._x){ Lupa._x = Img._x; maskObj._x = 40-(Lupa._x*2); } //LIMITAÇÃO LADO DIREITO if(Lupa._x >= (Img._width+Img._x-Lupa._width) ) { Lupa._x = (Img._width+Img._x)-Lupa._width; maskObj._x=40-(Lupa._x*2); } //LIMITAÇÃO EM CIMA if(Lupa._y <= Img._y ) { Lupa._y = Img._y; maskObj._y=35-(Lupa._y*2); } //LIMITAÇÃO EM BAIXO if(Lupa._y >= (Img._height+Img._y-Lupa._height) ) { Lupa._y = (Img._height+Img._y-Lupa._height); maskObj._y=35-(Lupa._y*2); } } } Sempre que o mouse se movimentar essa função vai ser executada porém só ira funcionar se Status estiver setada como verdadeiro; definimos que Lupa vai seguir o mouse, porém esses valores -40 e -50 são para que centremos a Lupa (utilizo registro em TopLeft o que me faz ter de subtrair metade dos eixos X e Y para ter a metade como resultado) podemos trocá-los por: Lupa._x = _xmouse-(Lupa._width/2); Lupa._y = _ymouse-(Lupa._height/2); O que nos permitiria mudar o tamanho da lupa sem ter de mudar o código. Porém teria de fazer isso em várias partes do código, já que fiz 1 exemplo bem rápido não me preocupei com o resize se for necessário eu posto outro source para você mas seria preferível que você aproveitasse o caminho e fizesse você mesmo ^_^ Continuando. A Lupa irá seguir o mouse porém com posição inversa e multiplicada por 2. Porquê 2 ? porque foi definido nesse exemplo uma ampliação duplicada. Ow seja a imagem a qual se encontra dentro da mascara é 2 vezes maior que a situada no stage. já a posição inversa é devido a já que a mascara fica parada e quem deve se movimentar é a nossa Imagem Mascarada. Portanto para que desçamos a imagem, na verdade estamos subindo com ela. Como comentado defini 4 limites: 2 para cada eixo, Esquerda, Direita, Cima, Baixo. //LIMITAÇÃO LADO ESQUERDO if(Lupa._x <= Img._x){ Lupa._x = Img._x; maskObj._x = 40-(Lupa._x*2); } Caso nossa lupa ultrapasse o valor X de nossa imagem, ela será travada; //LIMITAÇÃO LADO DIREITO if(Lupa._x >= (Img._width+Img._x-Lupa._width) ) { Lupa._x = (Img._width+Img._x)-Lupa._width; maskObj._x=40-(Lupa._x*2); } Caso ultrapassa o lado direito o mesmo acontecerá, repare que existe uma relação para se ter o limite direito deve-se subtrair o valor da propria lupa(width) já que se trata do registro TopLeft, caso você utilize qualquer registro "Right" não é necessário esse parâmetro; //LIMITAÇÃO EM CIMA if(Lupa._y <= Img._y ) { Lupa._y = Img._y; maskObj._y=35-(Lupa._y*2); } Limitamos bem simples o valor Y de nossa lupacaso ela ultrapasse a linha da imagem //LIMITAÇÃO EM BAIXO if(Lupa._y >= (Img._height+Img._y-Lupa._height) ) { Lupa._y = (Img._height+Img._y-Lupa._height); maskObj._y=35-(Lupa._y*2); } Limitamos em baixo, lembrando novamente da necessidade de subtrair a altura da Lupa. Img.onRollOver = function() { Img.alphaTo(50,2); Lupa.alphaTo(100,2); Mask.alphaTo(100,2); Status=true; } Img.onRollOut = function() { Img.alphaTo(100,2); Lupa.alphaTo(0,2); Mask.alphaTo(0,2); Status=false; } Para que tudo funcione somente quandoo mouse passar por cima da imagem. alphaTo é uma função da classe mc_tween, para mais informações:alphaTo | Documentação Source: Zoom.fla Obs* É necessário ter o plugin mc_tween2.as instalado, caso não tenha, pegue aqui: Mc_Tween Version 2.28.29 Bom, acho que é isso Qualquer dúvida é só postar Abraços Pooh
  7. Olá amigo :lol: Bom espero ter entendido bem seu problema, e pelo que lembro isso é 1 velho problema do flash. Quando queremos mexer com textfields em ActionScript e como no seu caso queremos mexer com Distanciamento temos de criar um "Formato de Texto". Me deixe apresentar um exemplo: Primeiramente crie um campo de texto dinâmico com o noem de Instância de "texto"; depois adicionemos o seguinte código no primeiro frame; var meuTexto:TextField = _root.texto; var meuTextoFormat:TextFormat = meuTexto.getTextFormat(); meuTexto.text = "MEU TEXTO"; meuTextoFormat.letterSpacing = 10; meuTexto.setTextFormat(meuTextoFormat); meuTexto.multiline=false; meuTexto._width=meuTexto.textWidth; meuTexto._height=meuTexto.textHeight; Criamos uma variável de tipo Textfield (Campo de texto) e a relacionamos com o nosso campo. Depois criamos uma variável do tipo TextFormat (formato de texto ou formatação) e a relacionamos com o nosso textfield "meuTexto.getTextFormat()". Em seguida adiciono um texto "MEU TEXTO" e seto o espaçamento desse texto em 10 unidades. aplico a formatação com "setTextFormat". Para acabar com os "enter" definimos Multilinha como false, ou seja ele so escreve em uma única linha. e para que ele seja auto-ajustável, colocamos 2 parâmetros para que o campo de texto se ajuste ao texto inscrito nele. Simples assim. Me desculpe se confundi a sua dúvida. qualquer coisa é só postar. ^_^ Abraços Pooh
  8. Oras, deve haver várias formas de resolver seu problema Uma bem simples é colocar uma verificação. declare uma booleana; var segueMouse:Boolean = true; essa variável vai ser o que lhe dirá se a bola vai ou não seguir o mouse. portanto onClipEvent(mouseMove) { if(segueMouse==true){ this._x = _root._xmouse; this._y = _root._ymouse; } } então adicionamos: _root.onMouseDown = function() { if(segueMouse==true){ segueMouse=false; } } pronto ele para assim que você clikar no Stage. caso você queira que ela volte a seguir no segundo clike adicione _root.onMouseDown = function() { if(segueMouse==true){ segueMouse=false; }else{ segueMouse=true; } } Creio que isso já resolva seu problema :lol: Abraços Pooh
  9. Bom aqui está, vou fazer uma breve explicação e no final tens o código fonte. ^_^ O problema era fazer um sistema o qual simulasse uma "paginação" porém de forma que você não estivesse limitado ao numero de páginas. E também não se limitar a ter de fazer a animação. Não é muito viável depender de prevFrame e nextFrame poderia fazer uma relação assim: Defina um numero máximo de frames entre um logo e outro, e nesses frames faça a animação. Imagine que esse número seja 24. Agora se quer que seu movieClip volte apenas diga para ele: for(i=0;i<24;i++) { _root.mc.prevFrame(); } Com isso ele executa 24 vezes a volta do frame o que faria sua animação "voltar". Porém nem sempre isso seria a melhor escolha pois ficaria parecendo um "espelho" já que a a animação seria feita de trás para frente. Por isso fiz uso da classe de movimento mc_tween2 para eliminar a necessidade de se fazer a animação. vamos lá: stop(); #include "mc_tween2.as" paramos a linha de tempo e incluimos o mc_tween.as, essa declarão so é válida para flash 9, as2 e anteriores. import flash.geom.Point; Importo a biblioteca que me permite usar pontos, já que não gosto de definir 2 coordenadas em variáveis diferentes. var numImgs:Number = 4; //número de imagens var i:Number = 0; // variável de contagem var currentImg:Number = 0; //imagem atual var Status:Boolean = false; //status de clicke var btVoltar:Button = _root.btVoltar; // botão voltar var btAvancar:Button = _root.btAvancar; //botão avançar var centroY:Number=Stage.height/2; //defini uma variável contendo a posição dentral do Stage para cada eixo; var centroX:Number=Stage.width/2; var pontoInicio:Point = new Point(-100,centroY); //ponto de ínicio var pontoFinal:Point = new Point(Stage.width+100,centroY); //ponto final var pontoMeio:Point = new Point(centroX,centroY); // ponto de amostra Cá estão algumas definições todas comentadas, porém as unicas que devem ser melhor explicadas são os pontos. como mostra a imagem, com relação a "Avançar" a imagem parte do pontoInicio e para no PontoMeio que é aonde ela fica exposta. Ao clikar novamente em avançar, a imagem atual vai para o ponto Final e a proxima imagem vai do pontoInicio até o PontoMeio. Quando se tratar de "Voltar" o oposto será feito, elas partirão do pontoFinal até o pontoMeio e a imagem atual vai partir do pontoMeio até o pontoInicio. Simples assim. Código do botão Avançar btAvancar.onPress = function(){ if(Status==false){ Status=true; if(currentImg==0) { attachMovie("Img"+1,"img"+1,_root.getNextHighestDepth()); _root["img"+1]._x=pontoInicio.x; _root["img"+1]._y=pontoInicio.y; _root["img"+1].tween("_x",pontoMeio.x,1,"easeOutElastic"); Status=false; currentImg++; }else{ _root["img"+(currentImg)].tween("_x",pontoFinal.x,1,"easeOutElastic"); setTimeout(deletaMC,500,_root["img"+(currentImg)]); if(currentImg==numImgs) { currentImg=0; } attachMovie("Img"+(currentImg+1),"img"+(currentImg+1),_root.getNextHighestDepth()); _root["img"+(currentImg+1)]._x=pontoInicio.x; _root["img"+(currentImg+1)]._y=pontoInicio.y; _root["img"+(currentImg+1)].tween("_x",pontoMeio.x,1,"easeOutElastic"); currentImg++; } } } É colocada uma verificação em "Status" que seria se o botão está disponível afim de evitar bugs de excesso de clicks. verifica se é a primeira vez que está clikando ou seja imagem atual = 0; tem uma interpretação diferente pra cada botão no caso de avançar a proxima imagem é a primeira, no caso de voltar seria a ultima. Como não sei quantas imagens você as coloque em um MovieClip em que o nome comece com Img e depois venha o numero, como exemplo usei movieclips: "Img1","Img2","Img3","Img4" e exporte todos para action script e no primeiro frame. A ação tween veio da classe mc_tween, ela move o movieClip da posição atual até a desejada. Existem inumera funções todas listadas aki: MC Tween | Documentação A nossa tem as seguintes propriedades: <MovieClip|Sound|TextField>.tween(property(ies), ending value(s) [, seconds, animation type, delay, callback, extra1, extra2]); porém não precisamos usar todas elas usarei apenas "Property" , "ending value", "Seconds" e "Animation type"; _root["img"+numImgs].tween("_x",pontoMeio.x,1,"easeOutElastic"); Temos ai a nossa propriedade sendo o a posição X do movieclip, vamos movelo até o pontoMeio em "1" segundo, o movimento será traçado pela equação de movimento chamada "easeOutElastic"; Todos os movimentos podem ser enconstrados aqui:MC Tween | Tipos de animação Façamos ainda uma verificação para saber quando chegamos à última imagem if(currentImg==numImgs) que nesse caso voltamos à primeira imagem. Código do botão Voltar btVoltar.onPress = function () { if(Status==false){ Status=true; if(currentImg==0) { attachMovie("Img"+numImgs,"img"+numImgs,_root.getNextHighestDepth()); _root["img"+numImgs]._x=pontoFinal.x; _root["img"+numImgs]._y=pontoFinal.y; _root["img"+numImgs].tween("_x",pontoMeio.x,1,"easeOutElastic"); Status=false; currentImg=numImgs; }else{ //MOVIE CLIP ATUAL VAI PARA O PONTO FINAL _root["img"+(currentImg)].tween("_x",pontoInicio.x,1,"easeOutElastic"); setTimeout(deletaMC,500,_root["img"+(currentImg)]); //NOVO MOVIE CLIP VAI PARA O PONTO MEIO if(currentImg==1) { currentImg=numImgs+1; } attachMovie("Img"+(currentImg-1),"img"+(currentImg-1),_root.getNextHighestDepth()); _root["img"+(currentImg-1)]._x=pontoFinal.x; _root["img"+(currentImg-1)]._y=pontoFinal.y; _root["img"+(currentImg-1)].tween("_x",pontoMeio.x,1,"easeOutElastic"); currentImg--; } } } Basicamente igual ao botão avançar com a diferença na verificação de ao invés verificar se chegou à última imagem, ele verifica se chegou à primeira. Função que deleta os MovieClips para não sobrecarregar o filme em caso de muitas imagens fiz questão de colocar uma função que após o clipe de filme chegar a posição "final" ele seja apagado. function deletaMC (mc:MovieClip) { mc.removeMovieClip(); Status=false; } Bom acho que é isso. para otimizar, basta mudar a animation Type para alguma que goste mais, e os pontos, assim pode fazer com que a imagem venha da diagonal ou qualquer outra posição; Não me preocupei em transformar a ação do botão em uma função estruturada, portanto o código ficou meio extenso. Qualquer bug é só relatar Arquivo fonte: Paginação.fla Obs* É necessário ter o plugin mc_tween2.as instalado, caso não tenha, pegue aqui: Mc_Tween Version 2.28.29 Desconsidere alguns massacres linguísticos :lol: Abraços Pooh
  10. ROLL logo estarei postando um fla com a solução, usarei o mc_tween2.as classe com um belo acervo de scripts de movimento. porém o script é ajustável, deixarei variáveis para determinar o numero total de Imagens(logos). Os pontos também serão configuráveis.(ponto de entrada, ponto de Amostra e ponto de saida); Tenho alguns compromisso agora 18:00 por isso estarei de volta a noite para lhe postar a solução.
  11. Esses dias tive uma idéia de relação de classes e porém me deparei com alguns problemas. Imaginem o seguinte: Uma classe que pode receber dados de uma pessoa, e essa pessoa pode ter algumas tarefas. até então eu imaginei uma classe base Pessoa e uma classe Tarefa. porém, eu sempre tenho a mania de fazer programas auto incrementais então, n tenho um numero máximo de pessoas, simplesmente o programa tem de atribuir classes novas ao numero de pessoas que tiver. se por exemplo tiver dez pessoas terei de instaciar classes, uma pra cada pessoa, porém de uma forma dinâmica. ainda depois atribuir a essa classe, subclasses Tarefas, porém unicas de cada Pessoa. Resumindo uma boa duplicação de classes. gostaria de uma luz ou algumas idéias. grato Pooh
×
×
  • Criar Novo...