• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

fckool

Jogo - Contar Pontos mediante o tempo

15 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para a primeira, verificas se a localização do que controlas é igual à do objecto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não faço a minima ideia dos conhecimentos que tens mas cá vai :P :

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :thumbsup:

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

;) Estamos aqui para ajudar :thumbsup:

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

;) 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. :P

EDIT: Link (.fla) Actualizado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link 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