ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

帧同步 皇室战争,物理帧 和渲染帧

2019-08-29 14:03:07  阅读:196  来源: 互联网

标签:逻辑 同步 getInstance 渲染 GModel list 皇室 英雄


物理帧和渲染帧分开,目的就是确保 逻辑的 同步性,ab两个客户端 pk,手机性能不一样,虽然服务端同时发送,但不能因为a手机配置低,卡了,导致跟不上。

虽然 做了跳帧处理,但加速  不一定要让渲染帧也加速,否则 手机 性能更不上,还是卡。所以必须让 逻辑渲染分开。

逻辑帧 一秒 6--10次,渲染帧 一秒 60.目前安卓是这样,苹果可能是30.

如果把 人物角色放在 逻辑帧里,那么 动作看起来就不流畅,所以要放到 渲染帧里面,具体如下。

    void OnSetPK()
    {        
        //////////////////////////////////////////////////////////////////////////// 
        ////////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////// 
        int count = GModel.getInstance.list.Count;
        //添加  英雄
        for (int i = 0; i < count; i++)
        {
            hero hr = GModel.getInstance.list[i];
            hr.OnAddHero();//添加英雄 
        }
        //////////////////////////////////////////////////////////////////////////// 
        ////////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////// 
        int counts = GModel.getInstance.list.Count;// 
       //删除 没有血英雄
        for (int i = 0; i < counts; i++)
        {
            hero hr = GModel.getInstance.list[i];
            hr.OnDestroyHero();//删除英雄
        }
        //////////////////////////////////////////////////////////////////////////// 
        ////////////////////////////////////////////////////////////////////////////
        //////////////////////////////////////////////////////////////////////////// 
        int countt = GModel.getInstance.list.Count;// 
        //处理逻辑英雄
        for (int i = 0; i < countt; i++)
        {
            hero hr = GModel.getInstance.list[i];
            hr.OnFrame();//处理英雄
        }

创建英雄  删除英雄 英雄逻辑处理,必须是在 逻辑帧里面 统一管理。

先 查看  当前帧 有没有需要 创建的,其次是血量不够要删除的,最后是 现有的 英雄逻辑处理。

 

在英雄对象 里面,要做一个 跟踪。因为逻辑帧不流畅,放到update里面做,不知道下一步位置,那么就要用 跟踪方式。

    void Update()
    {
        float newPositionX = Mathf.SmoothDamp(transform.position.x, vec.x, ref xVelocity, smoothTime);
        float newPositionY = Mathf.SmoothDamp(transform.position.y, vec.y, ref yVelocity, smoothTime);
        transform.position = new Vector3(newPositionX, newPositionY, 11);
    }

大概如上,这样只要跟的紧,不会让 玩家看出 有没有碰到。

最后效果如图,拖拽后,前面是    白色后面是彩色卡牌,白色卡牌 是逻辑帧,只要碰撞就可,现在显示为了大家看清。

后面的彩色卡牌是 渲染帧里面执行。可以发现,白色 每次一大步,但看起来卡,彩色每次一小步但流畅。玩家到时 只看到彩色。但发生碰撞或逻辑,

程序都按白色卡牌来计算,他们 走的 很近,误差忽略不计,也可以通过速度调整,让更快的 移动能跟的 更近。这样,就算手机卡,我可以关闭渲染帧,逻辑跳帧继续执行,然后等跳帧结束,我再打开渲染帧,那时渲染帧 虽然离 逻辑帧 更远,但他只执行 最后 目标,所以 很快就 看起来自然了。

标签:逻辑,同步,getInstance,渲染,GModel,list,皇室,英雄
来源: https://www.cnblogs.com/big-zhou/p/11429316.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有