12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import Animation from '../base/animation'
- import DataBus from '../databus'
- const ENEMY_IMG_SRC = 'images/enemy.png'
- const ENEMY_WIDTH = 60
- const ENEMY_HEIGHT = 60
- const __ = {
- speed: Symbol('speed')
- }
- const databus = new DataBus()
- function rnd(start, end) {
- return Math.floor(Math.random() * (end - start) + start)
- }
- export default class Enemy extends Animation {
- constructor() {
- super(ENEMY_IMG_SRC, ENEMY_WIDTH, ENEMY_HEIGHT)
- this.initExplosionAnimation()
- }
- init(speed) {
- this.x = rnd(0, window.innerWidth - ENEMY_WIDTH)
- this.y = -this.height
- this[__.speed] = speed
- this.visible = true
- }
- // 预定义爆炸的帧动画
- initExplosionAnimation() {
- const frames = []
- const EXPLO_IMG_PREFIX = 'images/explosion'
- const EXPLO_FRAME_COUNT = 19
- for (let i = 0; i < EXPLO_FRAME_COUNT; i++) {
- frames.push(`${EXPLO_IMG_PREFIX + (i + 1)}.png`)
- }
- this.initFrames(frames)
- }
- // 每一帧更新子弹位置
- update() {
- this.y += this[__.speed]
- // 对象回收
- if (this.y > window.innerHeight + this.height) databus.removeEnemey(this)
- }
- }
|