子弹发射重置事件,Corona SDK。

我想要做的是让敌人随机射击,但当子弹离开屏幕时要通知敌人并允许敌人再次射击。每个敌人的实例同时只能有一个激活的子弹实例。到目前为止,我只是测试射击和重新射击实现。像下面这样调用敌人的shoot方法:

function enemy:shoot()
    --调用Bullet Obj文件
    local Bullet = require "Bullet";

    --每个空间的移动时间
    local DEFAULTTIME = 5;

    --如果场景中没有目前有一个活动子弹实例的属性,则进入
    if self.activeBul ==false then
          --移动子弹
          self.bullet:trajectBullet({x=self.sprite.x,y=display.contentHeight, time = DEFAULTTIME*   (display.contentHeight-self.sprite.y)});

          --现在有一个与此敌人相关联的活动子弹
          self.activeBul = true;

    else

    end
end

目前在trajectBullet中发生的所有事情都只是移动子弹。我现在试图弄清楚如何让相关联的敌人实例知道其子弹已经离开屏幕。我对lua和Corona SDK还比较新,因此我仍在努力了解最佳处理方式,请与我保持耐心。下面是我想要的简单概述:

--随机敌人射击
--将子弹位置移动到敌人上方(看起来像是敌人射击)
--使关联的子弹可见
--模拟弹道
  CASE:*没有命中任何东西并离开屏幕*
   --隐藏子弹
   --通知关联的敌人可以再次射击(将activeBul更改为false)

请注意几点,我将Bullet和Enemy都作为元表。同时,Bullet实例也是在创建敌人的同时创建的。因此,敌人永远不会创建多个Bullet实例,只会隐藏和重新定位其射击。我真的很想知道如何正确地使其正常工作,欢迎提供任何建议。

点赞
用户1630589
用户1630589

如果你已经知道子弹何时离开屏幕,可以使用两种方法:

  1. 对于敌人的子弹有一个引用,这样就可以在子弹上调用一个“回收”函数。
  2. 当子弹离开屏幕时,创建一个自定义事件进行分发。

我建议使用第2种方法,因为它更加灵活。

你可以在这里找到更多信息:


-- 1)
function enemy:shoot()
  local Bullet = require "Bullet";
  Bullet.owner = self;
  -- 与之前相同的代码
end;

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

-- 当你想让敌人再次射击时,只需从子弹中调用 canShootAgain
bullet.owner:canShootAgain();

-- 2)
function enemy:shoot()
  local Bullet = require "Bullet";
  Bullet.owner = self;
  -- 与之前相同的代码
end;

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

-- 当你想让敌人再次射击时,只需从子弹中分派 canShootAgain 事件
bullet.owner:dispatchEvent({name = 'canShootAgain'});

-- 将此添加到敌人结构的末尾
enemy:addEventListener('canShootAgain', enemy);
2013-05-06 14:54:12