• 游戏开始数量级管理(TS脚本)


    在游戏开发中,为了让用户有更好的体验和数值上的爽感或者策划hold不住数值,经常可能会使用到较大的数量级,大到系统的int或float类型都存储不下这样大的数值,比如:100万亿。

    接下来只用一个脚本就可以处理这种情况:

    1. import { GameMagnitude } from '../data/Enum';
    2. import { Utils } from './Utils';
    3. export class MagnitudeCtrl {
    4. /**
    5. * 将数量级显示为字符串
    6. * @param magnitude
    7. * @param num
    8. * @returns
    9. */
    10. static showString(num: number, magnitude: GameMagnitude): string {
    11. switch (magnitude) {
    12. case GameMagnitude.None:
    13. return Math.floor(num) + "";
    14. case GameMagnitude.Kilo:
    15. return Utils.numFixed(num, 3) + "K";
    16. case GameMagnitude.Mill:
    17. return Utils.numFixed(num, 3) + "M";
    18. case GameMagnitude.Bill:
    19. return Utils.numFixed(num, 3) + "B";
    20. case GameMagnitude.TRIL:
    21. return Utils.numFixed(num, 3) + "T";
    22. default:
    23. return Utils.numFixed(num, 3) + "";
    24. }
    25. }
    26. static showTopMagniString(num: number, magnitude: GameMagnitude) {
    27. let magnitudeData = this.converToTopMagnitude(num, magnitude);
    28. return this.showString(magnitudeData.num, magnitudeData.magnitude);
    29. }
    30. /**
    31. * 转换至目标数量级
    32. * @param magnitude
    33. * @param num
    34. */
    35. static converToTargetMagn(targetMagnitude: GameMagnitude, num: number, magnitude: GameMagnitude) {
    36. if (magnitude > targetMagnitude) {
    37. for (let i = 0; i < magnitude - targetMagnitude; i++) {
    38. num = num * 1000;
    39. }
    40. } else if (magnitude < targetMagnitude) {
    41. for (let i = 0; i < targetMagnitude - magnitude; i++) {
    42. num = num / 1000;
    43. }
    44. }
    45. return {
    46. magnitude: targetMagnitude,
    47. num: num
    48. }
    49. }
    50. /**
    51. * 上行转换
    52. * @param magnitude
    53. * @param num
    54. */
    55. static upConver(num: number, magnitude: GameMagnitude) {
    56. if (magnitude > 0) {
    57. magnitude -= 1;
    58. num = num / 1000;
    59. }
    60. return {
    61. magnitude: magnitude,
    62. num: num
    63. }
    64. }
    65. /**
    66. * 下行转换
    67. * @param magnitude
    68. * @param num
    69. */
    70. static donwConver(num: number, magnitude: GameMagnitude) {
    71. if (magnitude < 4) {
    72. magnitude += 1;
    73. num = num * 1000;
    74. }
    75. return {
    76. magnitude: magnitude,
    77. num: num
    78. }
    79. }
    80. /**
    81. * 将数量级显示为字符串
    82. * @param magnitude
    83. * @param num
    84. * @returns
    85. */
    86. static showNormalNumString(num: number): string {
    87. let magnObj = this.numConverMagn(num);
    88. return this.showString(magnObj.num, magnObj.magnitude);
    89. }
    90. /**
    91. * 转到能转的最高级
    92. * @param num
    93. * @param magnitude
    94. * @returns
    95. */
    96. static converToTopMagnitude(num: number, magnitude: GameMagnitude = GameMagnitude.None): any {
    97. if (num >= 1000 && magnitude < GameMagnitude.TRIL) {
    98. return this.converToTopMagnitude(num / 1000, magnitude + 1);
    99. }
    100. if (num < 1 && magnitude > GameMagnitude.None) {
    101. return this.converToTopMagnitude(num * 1000, magnitude - 1);
    102. }
    103. return {
    104. magnitude: magnitude,
    105. num: num
    106. }
    107. }
    108. /**
    109. * 普通数值转数量级
    110. */
    111. static numConverMagn(num: number) {
    112. return this.converToTopMagnitude(num, GameMagnitude.None);
    113. }
    114. static compareTwoMag(magObj1: { num: number, magnitude: GameMagnitude }, magObj2: { num: number, magnitude: GameMagnitude }) {
    115. magObj1 = this.converToTargetMagn(magObj2.magnitude, magObj1.num, magObj1.magnitude);
    116. return magObj2.num >= magObj1.num;
    117. }
    118. }

    这个脚本引用到了另外的一些脚本,在这里截个图就好了。

     

    接下来是使用的场景:

     

     

  • 相关阅读:
    AutowiredAnnotationBeanPostProcessor什么时候被实例化的?
    php反序列化--1--PHP序列化
    精酿啤酒:酿造过程中的设备选择与效率提升
    Vue收集表单数据
    C专家编程 第5章 对链接的思考 5.3 函数库链接的5个特殊秘密
    使用 sonarqube 进行代码质量检查
    04 C++STL之迭代器
    python疫苗预约系统毕业设计开题报告
    IDM(Internet Download Manager)2024免激活绿色版下载
    ES6剩余参数的使用
  • 原文地址:https://blog.csdn.net/u013654125/article/details/126361675