zoukankan      html  css  js  c++  java
  • 小妖精的完美游戏教室——魔方塔防02,怪物移动

      今天也要直播魔法,求科学的!

      欢迎来到小妖精Balous的完美游戏教室!

      在上节课,小妖精介绍了怪物路径的实现办法,相信米娜桑已经成功了呢。既然我们已经设计好路径,接下来肯定是要让怪物在路径中移动起来,对吧?所以这节课主要介绍如何让怪物在路径中移动。小妖精相信感兴趣的同学在上周已经在网上查阅过相关的资料,你会发现大家的实现方式都大同小异,这是肯定的嘛,毕竟一些落后的方法已经被淘汰掉了。所以,小妖精教给大家的,都是目前最通用的实现方法啦,希望能帮助到大家。

      好啦,言归正传,如果实现怪物的移动。

      其实移动,说白了就是改变怪物的世界坐标,世界坐标改变了,在玩家看上去就是移动啦。所以呢,要实现移动,就是要算出下一帧,怪物的新坐标。在上节课,我们已经实现了路径,而路径是个链表,也就是说,只要怪物保留了路径链表的头结点,就能够沿着路径走到终点啦,是不是很简单呢。

      既然如此,怪物除了坐标系统外,应该还有下面这些额外的属性:

      /// <summary>
      /// 怪物移动速度
      /// </summary>
      public float moveSpeed;

      /// <summary>
      /// 怪物起始结点
      /// </summary>
      public PathNode startNode;

      拥有这些属性后,加上坐标系统,怪物就能够移动咯^o^,下面我用目前市场占比最高的游戏引擎unity为例子,示范最简单的移动代码该怎么写。

      

    /// <summary>
    /// 怪物移动方法
    /// </summary>
    private void Move()
    {
      Vector3 currentPos = transform.position;

      //起始结点在运行时用作目标结点
      Vector3 goalPos = startNode.transform.position;

      //如果到达目标结点,更新下一个目标结点
      if(Vector2.Distance(new Vector2(goalPos.x,goalPos.y),new Vector2(currentPos.x,currentPos.y)) < 0.01f)
      {
        //如果到达终点
        if(startNode.nextNode == null)
        {
          Destroy(gameObject);
        }
        startNode = startNode.nextNode;
      }

      //计算移动方向
      Vector3 dir = new Vector3(goalPos.x - currentPos.x, goalPos.y - currentPos.y).normalized;
      transform.Translate(dir * moveSpeed * Time.deltaTime);
    }

      好啦,这节课就到这里,小妖精会在下节课跟大家见面,byebye~~

  • 相关阅读:
    iOS 9和xcode7设置
    iOS9.0 生成证书流程一(非推送)
    Undefined symbols for architecture i386: "_OBJC_CLASS_$_KKGridView", referenced from:
    iOS 日志自动上报
    百度编辑器ueditor1.4.3配置记录
    2016年初中数学知识点中考总复习总结归纳
    Ubuntu搭建LAMP环境
    ubuntu 配置lamp
    phpstorm zhuce ma
    请帮忙给看下
  • 原文地址:https://www.cnblogs.com/balous/p/6559181.html
Copyright © 2011-2022 走看看