예제 #1
0
    private void Move(Vector3 targetpos)
    {
        if (player.isDied())
        {
            return;
        }

        var newpos = sprite.curNode.transform.parent.InverseTransformPoint(targetpos);
        var endX   = Mathf.FloorToInt(newpos.x);
        var endY   = Mathf.Abs(Mathf.FloorToInt(newpos.y));
        var startX = Mathf.FloorToInt(sprite.getPosition().x);
        var startY = Mathf.Abs(Mathf.FloorToInt(sprite.getPosition().y));

        Debug.DrawLine(sprite.curNode.transform.position, targetpos, Color.red, 1f);
        Debug.Log("================== ");
        Debug.Log("start pos : " + startX + "," + startY);
        //Debug.Log("end pos : " + endX + "," + endY);
        var map = App.Inst.getArea().map;


        System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
        stopwatch.Start();

        var paths = map.findPath(startX, startY, endX, endY);

        stopwatch.Stop();
        //获取当前实例测量得出的总时间
        System.TimeSpan timespan     = stopwatch.Elapsed;
        double          milliseconds = timespan.TotalMilliseconds; //  总毫秒数

        Debug.Log("A* 寻路计算时间(ms):" + milliseconds);

        if (paths == null || paths.paths == null)
        {
            return;
        }

        #region 测试tile路径
        {
            _compressPath2 = map._compressPath2;
            _compressPath1 = map._compressPath1;
            _defaultPath   = map._defaultPath;
        }
        #endregion

        var totalDistance = Utils.totalDistance(paths.paths);
        //网络数据延迟,同步好时间
        var needTime = Mathf.Floor(totalDistance / sprite.getSpeed() * 1000 + App.Inst.getDelayTime());
        //延迟矫正后的加速
        var speed = totalDistance / needTime * 1000f;
        Debug.Log("d:" + totalDistance + ",t:" + needTime + ",s:" + speed);
        bool isleft = startX > endX;
        sprite.setDirection(isleft);
        //1,
        sprite.movePath(paths.paths, speed);
        //把List数据序列化json格式
        string     str = JsonUtility.ToJson(paths);
        JsonObject msg = (JsonObject)SimpleJson.SimpleJson.DeserializeObject(str);
        PomeloSocket.Inst.Request("area.playerHandler.move", msg, (result) => {
            int code = Convert.ToInt32(result["code"]);
            if (code == 500)//err
            {
                Debug.LogError("curPlayer move error!");
                sprite.translateTo(paths.paths[0].x, paths.paths[0].y);
            }
        });
        //2,
        // sprite.movePath(paths.paths,-1);
    }