Beispiel #1
0
    public static IEnumerator IEDrop(GameObject obj, Vector2 NewPos, float speed)
    {
        JewelObj   script = obj.GetComponent <JewelObj>();
        Collider2D coll   = obj.GetComponent <Collider2D>();

        if (obj != null)
        {
            Transform _tranform = obj.transform;
            coll.enabled  = false;
            script.isMove = true;
            while (_tranform != null && _tranform.localPosition.y - NewPos.y > 0.1f)
            {
                _tranform.localPosition -= new Vector3(0, Time.smoothDeltaTime * speed);
                yield return(null);
            }
            if (_tranform != null)
            {
                _tranform.localPosition = new Vector3(NewPos.x, NewPos.y);

                script.Bounce();
                script.RuleChecker();
                yield return(new WaitForSeconds(0.2f));

                if (coll != null)
                {
                    coll.enabled  = true;
                    script.isMove = false;
                }
            }
        }
    }
Beispiel #2
0
    /// <summary>
    /// 使用协程播放下落动画
    /// </summary>
    /// <param name="obj"></param>
    /// <param name="NewPos"></param>
    /// <param name="speed"></param>
    /// <returns></returns>
    public static IEnumerator IEDrop(GameObject obj, Vector2 NewPos, float speed)
    {
        JewelObj   script = obj.GetComponent <JewelObj>();
        Collider2D coll   = obj.GetComponent <Collider2D>();

        if (obj != null)
        {
            Transform _tranform = obj.transform;
            coll.enabled  = false;
            script.isMove = true;
            //!!!! 注意显示游戏对象即:obj中transform的localPosition与逻辑地图中的NewPos是一样,均使用的是左下角0,0然后往上一格则为0,1
            //这就解决了显示对象数据向逻辑数据同步的问题,即显示对象按逻辑对象的x,y进行移动到指定位置。
            while (_tranform != null && _tranform.localPosition.y - NewPos.y > 0.1f)
            {
                _tranform.localPosition -= new Vector3(0, Time.smoothDeltaTime * speed);
                yield return(null);
            }
            if (_tranform != null)
            {
                //这块的数据和AS3中的闭包数据很像,即协程执行完比后,他的数据类似AS3中的闭包方法,即数据还是之前的数据.
                _tranform.localPosition = new Vector3(NewPos.x, NewPos.y);

                script.Bounce();
                script.RuleChecker();
                yield return(new WaitForSeconds(0.2f));

                //开启碰撞器组件
                if (coll != null)
                {
                    coll.enabled  = true;
                    script.isMove = false;
                }
            }
        }
    }
Beispiel #3
0
    /// <summary>
    /// 使用协程播放下落动画
    /// </summary>
    /// <param name="obj"></param>
    /// <param name="NewPos"></param>
    /// <param name="speed"></param>
    /// <returns></returns>
    public static IEnumerator IEDrop(GameObject obj, Vector2 NewPos, float speed)
    {
        // 获取对象上挂载脚本对象jewelobj
        JewelObj script = obj.GetComponent <JewelObj>();
        // 获取对象上二维碰撞组件
        Collider2D coll = obj.GetComponent <Collider2D>();

        if (obj != null)        // 存在判断
        {
            // 获取对象上Transform组件
            Transform _tranform = obj.transform;
            // 禁用碰撞组件
            coll.enabled = false;
            // 设置脚本对象成员 可以移动
            script.isMove = true;
            //!!!! 注意显示游戏对象即:obj中transform的localPosition与逻辑地图中的NewPos是一样,均使用的是左下角0,0然后往上一格则为0,1
            //这就解决了显示对象数据向逻辑数据同步的问题,即显示对象按逻辑对象的x,y进行移动到指定位置。
            while (_tranform != null && _tranform.localPosition.y - NewPos.y > 0.1f)
            {
                // Time.smoothDeltaTime上一帧所花的时间
                _tranform.localPosition -= new Vector3(0, Time.smoothDeltaTime * speed);
                // 停留一帧
                yield return(null);
            }
            if (_tranform != null)
            {
                //??这块的数据和AS3中的闭包数据很像,即协程执行完比后,他的数据类似AS3中的闭包方法,即数据还是之前的数据.
                // 赋给对象准确的位置
                _tranform.localPosition = new Vector3(NewPos.x, NewPos.y);
                // 播放宝石的抖动动画
                script.Bounce();
                // 检查消除
                script.RuleChecker();
                // 停留0.2s
                yield return(new WaitForSeconds(0.2f));

                //开启碰撞器组件
                if (coll != null)
                {
                    coll.enabled  = true;
                    script.isMove = false;
                }
            }
        }
    }