Событие Corona SDK для пули с огнем

Так что я пытаюсь сделать случайный огонь противника, но когда пуля уходит с экрана, чтобы дать сигнал врагу и позволить врагу снова стрелять. Каждый экземпляр врага может иметь только один активный экземпляр Bullet в любое время. Пока что я просто тестирую огонь и обновляю реализацию. Функция стрелять вызывается из экземпляра Enemy следующим образом:

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 как метатаблицы. Также экземпляр Bullet также создается одновременно с созданием врага. Таким образом, враг никогда не создает несколько экземпляров Bullet, а просто скрывает и перемещает его в огонь.

Я действительно ищу понимание о том, как я должен идти о том, чтобы заставить это работать должным образом, любой совет будет оценен

1 ответ

Решение

Если вы уже знаете, когда пуля находится за пределами экрана, вы можете использовать два подхода: 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);
Другие вопросы по тегам