Событие 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), из-за гибкости.
Вы можете найти больше об этом здесь:
- http://docs.coronalabs.com/api/type/EventListener/dispatchEvent.html
- http://docs.coronalabs.com/api/type/EventListener/addEventListener.html
-- 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);