*   >> Leitura Educação Artigos >> science >> programação

Fazendo um clone de Space Invaders com PushButton - balas inimigas

jogar o demo

BAIXAR O CÓDIGO FONTE

Voltar ao Índice TUTORIAL

No último tutorial nós adicionamos um componente para permitir que entidades que ser destruído em colisão. Este contornou a HealthComponent utilizado pelas entidades inimigos, mas agora temos um círculo completo e adicionar um HealthComponent ao jogador para que ele possa ser danificado por balas do inimigo. Aqui nós adicionar o HealthComponent, e especificar que o jogo tem uma saúde inicial de 5.

Código

Para o jogador a ser filmado precisamos criar um novo modelo de entidade.

Isso é quase uma cópia exata do modelo EnemyBullet, exceto os tipo tipos entidade e colisão são alteradas para identificá-la como uma bala disparado por um inimigo e colidindo com o jogador.

Código

EnemyControllerComponent .as

Assim como o PlayerControllerComponent, o que cria uma nova entidade PlayerBullet quando a barra de espaço foi pressionada, o EnemyControllerComponent criará aleatoriamente uma nova entidade EnemyBullet.


A variável timeToNextShot, usado para controle a quantidade de tempo entre cada possível disparo de uma bala, é contado para baixo a 0.

 função override público onTick (Tickrate: Number): void {//... timeToNextShot - = Tickrate; timeToNextShot = timeToNextShot 

Uma vez timeToNextShot chegar a 0 o inimigo vai ter a chance de disparar uma bala. O timeToNextShot é redefinido para iniciar a contagem regressiva novamente

 if (timeToNextShot == 0) {timeToNextShot = timeBetweenShots;.

Queremos que esses tiros para ser aleatória, por isso usamos a variável chanceOfShot com a função aleatória para determinar se um tiro deve ser tomado. A seguinte declaração se tem um 1 em chanceOfShot chance de ser verdade.

 if (Math.round (Math.random () * chanceOfShot) == 0) {

Se a instrução if ser verdade um novo instância do modelo EnemyBullet é criado, posicionado e definir a velocidade

 var bala:. IEntity = TemplateManager.instance.instantiateEntity (bulletEntityName); if (bala! = null) {var espacial: Box2DSpatialComponent = bullet.

lookupComponentByType (Box2DSpatialComponent) como Box2DSpatialComponent; spatial.position = new Point (position.x, position.y); spatial.linearVelocity = new Point (0, bulletSpeed); }}}}

Temos que fazer uma pequena alteração ao PlayerControllerComponent para parar as balas inimigas bater o jogador fora da tela. Quando dois objetos colidem em um sistema de

Page   <<       [1] [2] >>
Copyright © 2008 - 2016 Leitura Educação Artigos,https://artigos.nmjjxx.com All rights reserved.