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));
            }
        }
    }
  • 相关阅读:
    Hive-拉链表
    JAVA-POI
    GreenPlum-数据存储目录迁移及常用操作
    CDH6 高版本hbase+solr实现二级索引
    GreenPlum执行gpfdist报错:libssl.so.1.0.0: cannot open shared object file: No such file or directory
    rasdaman介绍及安装
    博学谷-数据分析pandas
    博学谷-数据分析numpy
    博学谷-数据分析matplotlib
    python基础学习笔记
  • 原文地址:https://www.cnblogs.com/hont/p/8661768.html
Copyright © 2011-2022 走看看