Day 25 | 使用ManoMotion制作Flappy Bird游戏 Part1 - 障碍物山的移动与产生

今天要介绍最後一个小游戏,让我们开始吧!

目录
游戏机制介绍
障碍物-山的移动
障碍物-山随机产生

游戏机制介绍

只要侦测到手部Grab的动作,帝江就会往上飞一点,如果侦测到连续动作,帝江就会飞越高,玩家要用Grab动作控制帝江不要撞到并且飞越山脉。

使用素材

帝江

障碍物-山的移动

Step1 变数宣告

  • rec 稍後用来改变物件canvas的位置
  • speed 方便移动调整速度
RectTransform rec;
public float speed;

Step2 函式宣告

在山的产生器再产生山以後,用来给山呼叫的set函式,设定山的初始位置以及旋转。

  • setRec(RectTransform setPoint) 让生成器设定山的位置
  • setRotation() 如果是上面的山,就旋转z轴180度,并调整成上面山的位置。
public void setRec(RectTransform setPoint) {
        rec = setPoint;
    }
public void setRotation(){
    rec.localEulerAngles = new Vector3(0f, 0f, 180.0f);
    rec.anchoredPosition = new Vector3(2755, 440, 0);
}

Step3 移动

  • 山是往左边移动所以是-x,- new Vector3( speed * TimedeltaTime,0,0)。
void Update(){
    rec.position -= new Vector3(speed * Time.deltaTime, 0, 0);

}

以上就是山的移动,接下来是山的产生。

障碍物-山的随机产生

时间到了就会产生新的山,所以需要计数器、山的物件、以及要产山生的点。

Step1 变数宣告

  • f_nextGenTime 作为计数器
  • mountainPrefab 储存要产生的山物件
  • rec 储存生成山的UI位置的依据
float f_nextGenTime = 3;
public GameObject[] mountainPrefab;
public RectTransform rec;

Step2 判断产生时间到了没

先判断计数器超过1了没

  • 如果超过了就Random出一个整数,选择要产生的山。
  • 将Random数作为参数丢进产生山的函式。
  • 产山完就将计数器归零。
  • 如果计数器没有超过1,就计数。
void Update()
    {
        if (f_nextGenTime > 1f)
        {
            int num = Random.Range(0, 3);
            Generate(num);
            num = Random.Range(0, 3);
            GenerateAbove(num);
            f_nextGenTime = 0;
        }
        else {
            f_nextGenTime += Time.deltaTime;
        }
    }

Step3 山的产生函式

  • 将Random数作为参数,选择要产山的3种山的mountainPrefab
  • 利用Instantiate生成山,如果是下面的山就呼叫setRec(),如果是上面的山就呼叫set。
void Generate(int num) {
    GameObject mountain = Instantiate(mountainPrefab[num]) as GameObject;
    mountain.GetComponent<MountainMove>().setRec(rec);
    mountain.transform.SetParent(GameObject.FindGameObjectWithTag("canvas").transform, false); 
}

void GenerateAbove(int num){
    GameObject mountain = Instantiate(mountainPrefab[num]) as GameObject;
    mountain.GetComponent<MountainMove>().setRotation();
    mountain.transform.SetParent(GameObject.FindGameObjectWithTag("canvas").transform, false);

}


以上就是障碍物-山的移动与产生,明天会写到主角跳跃与手部侦测的部分,那就明天见罗~


<<:  Android Studio初学笔记-Day24-FloatButton和SnackBar

>>:  图的深度广度检查 - DAY 25

110/11 - 把照片储存在Pictures/应用程序名称资料夹 - 1

不太可能每个专案都那麽爽,可以把相片储存在内部储存空间/Android/data/packageNa...

完赛心得

首先很感谢it铁人赛给予我这个机会,让我做到平时连想不会想到的事。因为对於我而言,实在是没什麽能够说...

[Day 02] 建立 Kotlin 专案

首先,要学怎麽使用 Kotlin Exposed 框架,我们先来建立一个 Kotlin 专案,并透过...

Day 19 CSS <icon font 字体图标>

1. 字体图标使用场景 主要用於显示网页中通用或常用的一些小图标 因为精灵图有许多优点 但缺点也很明...

Day 31 - 使用 Amazon API Gateway 上传图片到 S3

Day 31 - 使用 Amazon API Gateway 上传图片到 S3 建立 S3 储存贮体...