Bullet Fire重置事件Corona SDK

时间:2013-05-06 03:00:19

标签: sdk lua corona

所以我想做的就是随机射击敌人,但是当子弹离开屏幕向敌人发出信号并允许敌人重新射击时。敌人的每个实例在任何时候都只能有一个活动的子弹实例。到目前为止,我只是测试火灾并重新实施。功能射击被称为敌人的实例,如下所示:

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

现在在trajectBullet中发生的一切都是移动实现。我现在想弄清楚我怎么能让链接的敌人实例知道它的子弹在屏幕外。我对lua和Corona SDK相当新,所以我仍然掌握如何最好地处理事情所以请耐心地告诉我一个简单的概述我正在寻找的是

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

要记住一些事情,我有Bullet和Enemy作为metatables。此外,Bullet实例也是在创建敌人的同时创建的。因此,敌人永远不会创建多个Bullet实例,只是隐藏并重新定位它。

我真的在寻找洞察力我应该如何让它正常运作,任何建议都将受到赞赏

1 个答案:

答案 0 :(得分:0)

如果你已经知道子弹何时不在屏幕上,你可以使用两种方法: 1.在他的子弹上有一个参考敌人的参考,所以你可以在它上面打一个函数来“重复”子弹; 2.为子弹屏幕外的子弹创建一个自定义事件。

由于灵活性,我会坚持使用2)。

您可以在此处找到更多相关信息:


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