Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas Com Hittest!


Guest Andres

Pergunta

Oi povo!

Eu estou fazendo um jogo, e tenho uma dúvida cruel...

Eu fiz uma nave disparar raios continuamente, até aí foi fácil...

Com

	
if (Key.isDown(Key.SPACE)) {
               laserCounter++;
               _root._root.Laser.duplicateMovieClip(_root.Laser+laserCounter, laserCounter);
               _root[_root.Laser+laserCounter]._visible = true;
}
E o movie do laser com
onClipEvent (load) {
	laserMoveSpeed = 20;
	this._x = _root.ship._x;
	this._y = _root.ship._y;
}

onClipEvent (enterFrame) {
	this._y -= laserMoveSpeed;
	if (this._y<0) {
  this.removeMovieClip();
	}
}
Aí, entra o problema com o hit teste na nave inimiga. Eu fiz esse:
onClipEvent (enterFrame) {
	if (this.hitTest(_root.ship._x, _root.ship._y, 1)) {
  _root.GameOver = 1;
  this.play();
	}
	teste = #;
	if (this.enemyship.hitTest(_root.teste.disparoHero)) {
  _root[_root.Laser+laserCounter].play();
  play();
	}
}

Então fica, no primeiro if, se ela bate na nave (ship), ela explode e explode a nave.

O segundo if deveria fazer a nave enemiga explodir... (que é o play, no caso), e faz... O código funciona... Mas só no primeiro tiro de uma sequência.

Se eu segurar o botão, os outros tiros passam batidos, porque o laserCounter muda de número, e passam a haver vários movies de laser na tela, com nomes diferentes.

Então fica a pergunta, no hit teste da nave, eu conseguiria fazer algo como colocar um asterisco no lugar de +laserCounter, para ser válido indiferente do número que exista ali?

Ah, caso alguém pergunte, fiz o _root[_root.Laser... porque _root.Laser é uma variável feita para trocar de tipo de tiro, então ele puxa um filme diferente pra cada tiro.

Agradeço que puder ajudar

Abraços

Andrés

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Guest Andrés

Não, não rola...

O script que você me deu daria o mesmo problema, e ainda me obrigaria a criar um script diferente para cada inimigo. porque em vez de usar o this você usou o caminho, que dá na mesma.

Só que, se eu tenho várias naves (movies) com nomes diferentes, e dentro da nave eu tenho a área de toque (outro movie) chamada enemyship, o meu script acaba funcionando melhor.

Aliás, o script da nave inimiga eu copiei errado (copiei no meio de um dos infinitos testes que eu já fiz)...

O correto é

onClipEvent (enterFrame) {
if (this.hitTest(_root.ship._x, _root.ship._y, 1)) {
 _root.GameOver = 1;
 this.play();
}
teste = #;
if (this.enemyship.hitTest( _root[_root.Laser+laserCounter])) {
 _root[_root.Laser+laserCounter].play();
 play();
}
}

Vou tentar fazer a pergunta de forma mais clara...

Eu consigo fazer um hit test com um nome não existente?

Tipo, como em outras formas de programação você usaria um *?

Tipo _root.* ou seja, qualquer coisa que esteja em _root?

Ou, mais precisamente...

_root.*.laser ou seja, qualquer movie, com qualquer nome, que esteja no root e que tenha dentro dele um movie chamado laser?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,6k
×
×
  • Criar Novo...