Ну, это довольно широкий вопрос, поэтому я могу ответить на него только на высоком уровне. Во-первых, посмотрите на мой пример OOP-фреймворка, чтобы найти один из способов объектно-ориентированного программирования на Lua:
http://developer.anscamobile.com/code/object-oriented-sample-game-framework
Теперь, используете ли вы этот подход или какую-либо другую технику для достижения ООП, вам нужно создать объект Laser, и каждый раз, когда игрок запускает объект Laser на позиции оружия. Затем в конструкторе Laser установите приемник enterFrame, который будет перемещать его вперед чуть-чуть каждый кадр. Перемещая немного каждый кадр, лазер плавно оживит вперед.
Что касается столкновения, если вы используете физику в своей игре, вы можете превратить свои лазеры в физические объекты, чтобы таким образом обрабатывать столкновения. Кроме того, вы можете сделать простую проверку расстояния с лазером против каждого врага на экране; когда лазер находится рядом с врагом, это означает, что лазер ударил этого врага.