2013-05-06 3 views
1

Donc, ce que j'essaie de faire est d'avoir un tir ennemi au hasard, mais quand la balle sort de l'écran pour signaler à l'ennemi et permettre à l'ennemi de tirer à nouveau. Chaque instance d'un ennemi ne peut avoir qu'une instance active de Bullet à tout moment. Jusqu'à présent, je ne fais que tester le feu et refaire la mise en œuvre. Le tournage de fonction est appelée de l'instance de l'ennemi comme ce qui suit:Bullet Fire Reset Événement Corona SDK

function enemy:shoot() 
    --Calls Bullet Obj file 
    local Bullet = require "Bullet"; 

    --Movement time per space 
    local DEFAULTTIME = 5; 

    --checking if property, there currently is an active bullet instance in scene 
    if self.activeBul ==false then 
      --move the bullet 
      self.bullet:trajectBullet({x=self.sprite.x,y=display.contentHeight, time = DEFAULTTIME* (display.contentHeight-self.sprite.y)}); 

      --there is now an active Bullet linked to this enemy 
      self.activeBul = true; 

    else 

    end 
end 

tout ce qui se passe pour l'instant dans le trajectBullet est la mise en œuvre du mouvement. J'essaie de comprendre maintenant comment je pourrais laisser l'instance ennemie liée savoir que sa balle est hors écran. Im assez nouveau pour lua et Corona SDK afin im obtenir encore une emprise sur la meilleure façon de traiter les choses si s'il vous plaît garder avec moi simple aperçu de ce que je cherche est au-dessous

--random enemy fire 
--move Bullet location on top of enemy(appears enemy fires) 
--makes linked bullet visible 
--simulates trajectory 
    CASE:* doesn't hit anything and goes off screen* 
    --hides Bullet 
    --signals to linked enemy it can fire again(changing activeBul to false) 

choses Couple garder à l'esprit, je avoir à la fois Bullet et Enemy comme métabalises. L'instance Bullet est également créée en même temps que l'ennemi est créé. Ainsi, l'ennemi ne crée jamais plusieurs instances de balle, il se contente de le cacher et de le relocaliser.

Im regardant vraiment un aperçu sur la façon dont je devrais prendre pour obtenir que cela fonctionne correctement, des conseils seront appréciés

+0

Y Vous ne devriez pas exiger le fichier Bullet.lua lorsque l'ennemi tire. La métatable ennemie devrait contenir une référence à la classe Bullet, que chaque instance utilise. – HennyH

Répondre

0

Si vous savez déjà quand la balle est hors de l'écran, vous pouvez utiliser deux Approches: 1. Avoir une référence pour l'ennemi sur sa balle, ainsi vous pouvez appeler une fonction dessus ainsi "reciclez" la balle; 2. Créez un événement personnalisé distribué pour la puce lorsqu'elle est hors écran.

Je voudrais coller avec le 2), à cause de la flexibilité.

Vous pouvez trouver plus d'informations ici:


-- 1) 
function enemy:shoot() 
    local Bullet = require "Bullet"; 
    Bullet.owner = self; 
    -- the same as your previous code 
end; 

function enemy:canShootAgain() 
    self.activeBul = false; 
end; 

-- When you want the enemy to shoot again, just call canShootAgain from bullet 
bullet.owner:canShootAgain(); 

-- 2) 
function enemy:shoot() 
    local Bullet = require "Bullet"; 
    Bullet.owner = self; 
    -- the same as your previous code 
end; 

function enemy:canShootAgain() 
    self.activeBul = false; 
end; 

-- When you want the enemy to shoot again, just call canShootAgain from bullet 
bullet.owner:dispatchEvent({name = 'canShootAgain'}); 

-- Add this to the end of your enemy construction 
enemy:addEventListener('canShootAgain', enemy); 
+0

ok, j'essayais de faire 2) comme vous l'avez mentionné cependant Im ayant des problèmes en ajustant la propriété activeBul dans l'événement lui-même, aussi bien que pouvoir appeler simplement une fonction pour changer la propriété activeBul de l'instance appropriée. Je suppose que l'essentiel du problème est im ayant des problèmes de communication entre l'objet Im essayant d'ajuster et l'événement qui était déclencheur. –

+0

Salut. J'ai ajouté un exemple de code illustrant comment implémenter les deux façons. – Gardner

+0

qui a aidé beaucoup merci pour les exemples que je vais essayer de mettre en œuvre ces maintenant !! –