OpenHarmony自制飞机大战(3)

这里先优化一下上一集中的自己飞机死亡的判断,之前的判断有点问题,坐标算的有点问题,重新优化之后代码如下

private myIsDie() {

  this.enemyPlainList.forEach(item => {

    let a1 = this.myPlainX + (this.myPlainSize / 2)

    let b1 = this.myPlainY + (this.myPlainSize / 2)

    let a2 = item.x + (this.enemyPlainSize / 2)

    let b2 = item.y + (this.enemyPlainSize / 2)

    let centerDistance = Math.sqrt(Math.pow((a1 - a2), 2) + Math.pow((b1 - b2), 2))

    if (centerDistance <= (this.myPlainSize / 2)) {

      this.isGameOver = true

      clearTimeout(this.timeOutBullet)

      clearTimeout(this.timeOutEnemyPlain)

    }

  })

}

将两点的坐标分别加上他们的宽度的一半,才是真正圆心的坐标位置,同时在if判断里面,只判断了自己飞机大小的一半距离,这样的话,效果更明显一点。

主页面优化

所有的游戏都有一个开始界面,我们也来做一个游戏开始的界面吧,昨天的时候,我偶然间在网上找到了一些飞机大战的原始素材,这里先做一下替换吧,效果如下

现在开始编写游戏开始界面吧,先定义一个变量用来标识游戏是否开始

@State private gameIsStart: boolean = false

然后在主定时器里面判断游戏是否开始

if (!this.gameIsStart) {

  clearTimeout(this.timeOutBullet)

  clearTimeout(this.timeOutEnemyPlain)

} else {

  this.i++

}

接下来就可以画界面了

开始逻辑判断,当点击了开始游戏按钮之后,直接更改变量属性,然后执行一次重新开始游戏的方法逻辑即可

private startGame() {

  this.gameIsStart = true

  this.reStartGame()

}

修改一下gameover之后的样式


来看一遍效果吧

现在开始完善设置,这个里面主要是对游戏的一些参数,比如敌机刷新速度,飞行速度,子弹速度等,思路也很简单,直接更惨参数的默认值就行了,效果如下

忽然发现游戏结束后,只能重新开始,这肯定是不行的,那就在给他加一个退出游戏按钮吧,代码如下

private exitGame() {

  this.enemyPlainList = []

  this.bulletList = []

  this.score = 0

  this.gameIsStart = false

  this.isShowSetting = false

  this.isGameOver = false

  this.myPlainX = 180 - (this.myPlainSize / 2)

  this.myPlainY = 650

}

运行看一下效果

那么飞机大战小游戏就先到这里啦,下期再见

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容