fckool Posted May 11, 2009 at 05:14 PM Report #263062 Posted May 11, 2009 at 05:14 PM Olá, Eu sou inciante em programação actionscript, estou a desenvolver um jogo em que é necessário encontrar objectos num determinado cenário. Então aqui vão as minhas dúvidas. 1 - Como é que eu consigo atribuir uma certa pontuação por cada objecto encontrado? 2 - Queria contabilizar depois os pontos de cada objecto encontrado, mediante o tempo que o fez. Quanto mais rápido mais pontos, e somar os 2. Pontos por objecto + Pontos por tempo. É possivel? Peço desculpa se estou a exagerar no pedido, mas é muito importante eu desenvolver isto, é um projecto para a escola. Obrigado
scorch Posted May 11, 2009 at 05:59 PM Report #263073 Posted May 11, 2009 at 05:59 PM Para a primeira, verificas se a localização do que controlas é igual à do objecto. PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.
zubimaster Posted May 11, 2009 at 07:27 PM Report #263119 Posted May 11, 2009 at 07:27 PM Não faço a minima ideia dos conhecimentos que tens mas cá vai 😛 : Primeiro declaras uma variável, tipo: var pontos = 0 Depois, podes utilizar 'IFs' para a situação que pretendes. Para aumentares esse valor podes fazer por exemplo: pontos += 100 Cumps
fckool Posted May 12, 2009 at 02:01 AM Author Report #263231 Posted May 12, 2009 at 02:01 AM Eu percebi mais ao menos. Alguem em sabe dizer como identifico um objecto num cénário ao carregar nele? Sei que para aumentar o numero de pontos terei que usar um if em que caso esta mesma condição que quero saber como se faz, for verdadeira, incrementa a variavel dos pontos. Se alguem me puder ajudar..
pouic Posted May 12, 2009 at 08:28 AM Report #263246 Posted May 12, 2009 at 08:28 AM Boas, podes começar por criar o teu fla do projecto e assim até será mais simples para alguém tentar ajudar. Para criares um objecto num cenário e ao carregares nele saberes qual foi pressionado podes utilizar algo como: //Número de obejctos a criar var nObjectos:Number = 5; //Posicao em X inicial var posX:Number = 20; //Posicao em Y inicial var posY:Number = 20; //Criar objectos até ao número máximo for (var i=0;i<nObjectos;i++){ //Criar o meu obejcto var myMovieClip:MovieClip = this.createEmptyMovieClip("nome_clip" + nObjectos, this.getNextHighestDepth()); //Criar conteudo para o meu objecto e associá-lo var label:TextField = myMovieClip.createTextField("label", 1, 0, 0, 150, 20); //Defenir conteudo para a label adicionada ao objecto label.text = "Objecto nº " + (i+1); //Atribuir valores às variaveis do meu objecto myMovieClip.ID = (i+1); //ID do objecto myMovieClip.VALUE = (100*(i+1)); //Valor, em pontos, do clique myMovieClip._x = posX; //posição X do objecto myMovieClip._y = posY; //posição X do objecto myMovieClip.onRelease = function(){ //Acção a realizar quando pressionado item_clicked(this); } //Definir a posicao em X do próximo objecto posX += 100 } function item_clicked(mc:MovieClip){ //Exibir o conteúdo do objecto pressionado. trace("foi carregado o item " + mc.ID + " o valor deste objecto é de " + mc.VALUE + " pontos."); } Este código está em ActionScript2
fckool Posted May 12, 2009 at 01:28 PM Author Report #263377 Posted May 12, 2009 at 01:28 PM Boas, podes começar por criar o teu fla do projecto e assim até será mais simples para alguém tentar ajudar. Para criares um objecto num cenário e ao carregares nele saberes qual foi pressionado podes utilizar algo como: //Número de obejctos a criar var nObjectos:Number = 5; //Posicao em X inicial var posX:Number = 20; //Posicao em Y inicial var posY:Number = 20; //Criar objectos até ao número máximo for (var i=0;i<nObjectos;i++){ //Criar o meu obejcto var myMovieClip:MovieClip = this.createEmptyMovieClip("nome_clip" + nObjectos, this.getNextHighestDepth()); //Criar conteudo para o meu objecto e associá-lo var label:TextField = myMovieClip.createTextField("label", 1, 0, 0, 150, 20); //Defenir conteudo para a label adicionada ao objecto label.text = "Objecto nº " + (i+1); //Atribuir valores às variaveis do meu objecto myMovieClip.ID = (i+1); //ID do objecto myMovieClip.VALUE = (100*(i+1)); //Valor, em pontos, do clique myMovieClip._x = posX; //posição X do objecto myMovieClip._y = posY; //posição X do objecto myMovieClip.onRelease = function(){ //Acção a realizar quando pressionado item_clicked(this); } //Definir a posicao em X do próximo objecto posX += 100 } function item_clicked(mc:MovieClip){ //Exibir o conteúdo do objecto pressionado. trace("foi carregado o item " + mc.ID + " o valor deste objecto é de " + mc.VALUE + " pontos."); } Este código está em ActionScript2 Muito obrigado acho que era isto mesmo, vou experimentar depois digo algo.
pouic Posted May 12, 2009 at 04:17 PM Report #263475 Posted May 12, 2009 at 04:17 PM Começa a construir o teu projecto. Se tiveres dúvida colocas o fla aqui e se cada um poder dar uma ajuda verás que aprendes bem 👍
fckool Posted May 12, 2009 at 05:08 PM Author Report #263500 Posted May 12, 2009 at 05:08 PM Começa a construir o teu projecto. Se tiveres dúvida colocas o fla aqui e se cada um poder dar uma ajuda verás que aprendes bem 👍 Bem eu ja testei o código e acho que o entendi, mas é o seguinte, eu vou criar eu proprio varios MC's e posiciona-los num cenário. Vão ter todos a mesma pontuação. E apenas queria que sempre que o utilizador encontrasse um desses objectos ele fosse colocado num painel ao lado e preferêncialmente guardados num array para utilizar esses mesmo objectos num nivel a seguir que quero criar. E obviamente contabilizar os pontos mediante os objectos encontrados e o tempo em que o fez. Eu sei que é um pouco complexo, mas se puderem dar uma ajuda.. É que o meu projecto é um jogo com 4 niveis (ou 4 mini jogos) em que tenho uma intro, um menu com varias opções e depois vou ter os varios niveis. O menu a intro e opções estão feitas. Agora vou começar com os jogos. Agradeço a ajuda pouic, obrigado.
pouic Posted May 12, 2009 at 11:27 PM Report #263657 Posted May 12, 2009 at 11:27 PM 😉 Estamos aqui para ajudar 👍 Vamos lá ver o que podemos resolver então. Podes colocar o teu fla com os objectos? Será mais simples para perceber a finalidade e ajudar mais rapidamente... e eficazmente.
fckool Posted May 13, 2009 at 04:14 PM Author Report #263875 Posted May 13, 2009 at 04:14 PM 😉 Estamos aqui para ajudar 🙂 Vamos lá ver o que podemos resolver então. Podes colocar o teu fla com os objectos? Será mais simples para perceber a finalidade e ajudar mais rapidamente... e eficazmente. Aqui está amigo -> FILE O objectivo é sempre que os objectos forem clicados o objecto em questão ficar com Alpha 100 na barra em baixo e a pontuação aumentar em cima. Depois falta me arranjar um sistema de tempo decrescente, mediante o tempo que o utilizador demorar a fazer a tarefa vai ter uma pontuação que vai ser somada a pontuação dos objectos encontrados. Muito obrigado pela ajuda. 😛 EDIT: Link (.fla) Actualizado.
fckool Posted May 13, 2009 at 09:32 PM Author Report #263979 Posted May 13, 2009 at 09:32 PM Boas.. Arranjei este contador de tempo, não sei se é o mais correcto para a posterior contabilização de pontos atraves do teste de uma condição. Agradecia uma opinião.. contador = "00:00:00.0"; onEnterFrame = function () { t = getTimer()-0; millesimos = t.toString().slice(-1); centesimos = Math.round(t/10).toString().slice(-1); decimos = Math.round(t/100).toString().slice(-1); secundos = Math.round(t/1000); minutos = Math.round(secundos/60); horas = Math.round(minutos/60); if (secondos>59) { secondos -= 60*minutos; } if (minutos>59) { minutos -= 60*horas; } secundos = secundos<10 ? '0'+secundos : secundos; minutos = minutos<10 ? '0'+minutos : minutos; horas = horas<10 ? '0'+horas : horas; contador = horas+':'+minutos+':'+secundos+'.'+decimos; };
pouic Posted May 14, 2009 at 08:05 AM Report #264032 Posted May 14, 2009 at 08:05 AM Esse código está em Actionscript 1.0... Altera esta parte no teu código para AS2.0 // secundos = secundos<10 ? '0'+secundos : secundos; // minutos = minutos<10 ? '0'+minutos : minutos; // horas = horas<10 ? '0'+horas : horas; if (segundos<10) secundos = '0'+secundos; if (minutos<10) minutos = '0'+minutos; if (horas<10) horas = '0'+horas; Em relação ao teu código no FLA. Vais ter os objectos que estão na barra de baixo espalhados pelo teu cenário? e vais coloca-los de uma forma aleatória? ou tens tipo sítios pré-definidos mediante os níveis?
fckool Posted May 14, 2009 at 11:04 AM Author Report #264094 Posted May 14, 2009 at 11:04 AM Esse código está em Actionscript 1.0... Altera esta parte no teu código para AS2.0 // secundos = secundos<10 ? '0'+secundos : secundos; // minutos = minutos<10 ? '0'+minutos : minutos; // horas = horas<10 ? '0'+horas : horas; if (segundos<10) secundos = '0'+secundos; if (minutos<10) minutos = '0'+minutos; if (horas<10) horas = '0'+horas; Em relação ao teu código no FLA. Vais ter os objectos que estão na barra de baixo espalhados pelo teu cenário? e vais coloca-los de uma forma aleatória? ou tens tipo sítios pré-definidos mediante os níveis? Obrigado pela correcção do código. Estive toda a noite a trabalhar nisto e já tenho algo feito.. Os objectos nesse fla já lá estão escondidos se reparares bem. Eu fiz através de um array. Coloquei os mc's nesse array, e fiz uma função para ao clickar desaparecer o objecto, aumentar os pontos. Eu não sei se é a melhor maneira de o fazer, mas era a maneira que eu sabia. O problema é que feito em função eu não consigo meter alpha 100 nos mc's na barra em baixo. pois são instancias diferentes do sitio onde vai actuar a função. Por acaso gostaria que os objectos aparecessem aleatóriamente no plano, mas acho que vai ser muito complicado, pois teriam de ser posições concretas, escondidas, e sempre atrás dos objectos que já lá estão. Por isso não sei até que ponto isso é possivel Deixo aqui o fla já com aquilo que fiz esta noite. Em comentário está o codigo que faz funcionar o alpha 100, mas fora de uma função. Obrigado. Ficheiro edit: vi agora que o contador não está a funcionar, chega aos 30 segundos, passa para 1min e 30....
pouic Posted May 14, 2009 at 04:07 PM Report #264171 Posted May 14, 2009 at 04:07 PM Altera o código do teu timer por este... Acho que te deve chegar mm:ss ao invés de hh:mm:ss... Verifica e tenta perceber a lógica utilizada do intervalo. var intervalID:Number //Criar o botão Play this.createEmptyMovieClip("btnPlay", this.getNextHighestDepth()); //Desenhar o objecto no Stage e posiciona-lo btnPlay.beginFill(0x65FF00); btnPlay.moveTo(10, 10); btnPlay.lineTo(100, 10); btnPlay.lineTo(100, 100); btnPlay.lineTo(10, 100); btnPlay.lineTo(10, 10); btnPlay.endFill(); btnPlay.onRelease = function() { //Apagar o intervalo existente clearInterval( intervalID ); //Criar um intervalo que chame a função a cada segundo intervalID = setInterval(verificaTempo, 1000); }; //Criar o botão STOP this.createEmptyMovieClip("btnStop", this.getNextHighestDepth()); //Desenhar o objecto no Stage e posiciona-lo btnStop.beginFill(0xFF0000); btnStop.moveTo(10, 10); btnStop.lineTo(100, 10); btnStop.lineTo(100, 100); btnStop.lineTo(10, 100); btnStop.lineTo(10, 10); btnStop.endFill(); btnStop._x = 100; btnStop.onRelease = function(){ //Limpar o intervalo clearInterval( intervalID ); }; function verificaTempo() { //Tempo apresentado em formato Minutos:Segundos t = convertTimeToDisplay(getTimer()); trace(t); } function convertTimeToDisplay(miliseconds) {//Função que converte o tempo recebido, em milisegundos, num formato "mm:ss" var secs = Math.floor(miliseconds/1000); var mins = Math.floor(secs/60); secs %= 60; if (secs < 10) secs = "0"+ secs; if (mins < 10) mins = "0"+ mins; return mins +":"+ secs }
fckool Posted May 14, 2009 at 04:34 PM Author Report #264179 Posted May 14, 2009 at 04:34 PM Pois, mas eu não queria botões para iniciar o tempo nem parar, mas sim que ele iniciasse com o jogo e quando chegasse a 0 fosse para o frame que indica fim de nivel.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now