zoukankan      html  css  js  c++  java
  • 游戏编程精粹学习

    在《游戏编程精粹1》里的1.10处讲解了位数组的应用,原文意把位操作变为类似数组的形式,从而更加直观。

    (注意C#中已经内置这种数据结构,叫做BitArray)

    不过我联想到是否可以设计一个位锁的概念。

    我遇到过这样一个问题,游戏中有一些模块的参数必须在所有使用者都结束后才可以被释放。

    例如时间系统的暂停,当你在进行某些特殊任务时需要调用时间暂停,而在这个特殊任务的过程中播放了过场动画也会调用暂停。

    所以当他们都结束使用了,暂停这个参数才会变为false。

    类似的情况还有AI的开启和关闭等等。

    下面是支持32个使用者的位锁代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    namespace Hont
    {
        public class BitLock
        {
            const int LOCKED_MAX_VALUE = 32;
    
            int mBitSlot;
    
            public bool IsLocked { get { return mBitSlot != 0; } }
    
    
            public BitLock()
            {
            }
    
            public bool IsUnassignLock(int handle)
            {
                return (mBitSlot & handle) == 0;
            }
    
            /// <summary>
            /// 分配一个锁,并返回锁的句柄。如果返回-1则返回失败。
            /// </summary>
            public int AssignLock()
            {
                for (int i = 1; i <= LOCKED_MAX_VALUE; i++)
                {
                    if ((mBitSlot & 1 << i) == 0)
                    {
                        mBitSlot |= 1 << i;
    
                        return i;
                    }
                }
    
                return -1;
            }
    
            /// <summary>
            /// 通过句柄放回一个锁。
            /// </summary>
            public void UnassignLock(int handle)
            {
                mBitSlot = mBitSlot & (~(1 << handle));
            }
        }
    }
  • 相关阅读:
    Window下安装Python
    使用Docker构建一个简单的nginx网页镜像
    solr通过界面管理删除索引和重建索引
    solr8.6添加中文分词器
    php使用solr基础代码类
    window下载安装solr及测试
    Eclipse Android 手机开发作业---心随指动
    Eclipse Android 手机开发作业---空中的气球
    python OpenCV 实现图片的医学处理
    python OpenCV 宽度测量
  • 原文地址:https://www.cnblogs.com/hont/p/8661768.html
Copyright © 2011-2022 走看看