Jump to content

Recommended Posts

Posted

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

Posted

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

Posted

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..

Posted

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

Posted

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.

Posted

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.

Posted

😉 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.

Posted

😉 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.

Posted

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;
};
Posted

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?

Posted

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....

Posted

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
}
Posted

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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.