zoukankan      html  css  js  c++  java
  • 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇06:计分》

    6.计分

    计分概述:

    分值计量直接反应玩家在游戏中获得的成就感。因此,计分系统在游戏中显得尤为重要,有的反应在直接获取的分数上,有的反应在杀敌数量上等。

    计分原理:

    原理图,如图6-1所示。


    图6-1

    实现方法:

    步骤1:

    子弹击中敌人。击中敌人的条件参考4.碰撞检测内容。

    步骤2:

    敌人死亡。相关代码如下所示。

    步骤3:
    3.1计分器计分原理: 

    (1)定义一个有九个格子的显示器面板,面板从右到左用下角标标注为0-8,每个格子存放0-9十个数字。

    (2)设定每消灭一个敌人,玩家获取5分,将数值每次传给一个变量var;将数值var传给string数组。

    (3)数组中有数值的位数,对应显示器面板方格的下角标,使对应下角标方格的数字显示,并且设定数字为数组中对应的数值。

    3.2代码的实现: 

    //定义存放数字的9个方格

    _NumberSimulator = new UI_Number_Simulate(_windowName, "JuanZhouNumber", 9);

    //设置现有分数

    _NumberSimulator.SetNumber(ScriptRuntime.MarkMgr.Instance.GetMark(),true);

    01 public class UI_Number_Simulate
    02 {
    03  private class NumberSimulate
    04  {
    05   FString _layoutname;
    06   string _simulateID;
    07   char _currentChar = 'a';
    08   public NumberSimulate(FString layoutname, string simulateID)
    09   //单位数字模拟器的构造函数
    10   {
    11    _layoutname = layoutname;                     
    12    _simulateID = simulateID;
    13       SetAllInvisible ();//隐藏所有数字
    14   }      
    15    
    16   //为每一位数字模拟器赋值
    17  public void DoNumSimulate (char var)
    18  {
    19   if (_layoutname == null || _simulateID == null)
    20   {
    21        return;
    22      }
    23      if (_currentChar == var)
    24   {
    25        return;
    26      }
    27                
    28      SetAllInvisible ();//首先隐藏所有数字
    29      //根据传入的数字,显示相对应的UI数字
    30   if (var == '0') {
    31      GUI.UIWidget.SetVisible (_layoutname, _simulateID + "_0"true);
    32      else if (var == '1') {
    33      GUI.UIWidget.SetVisible (_layoutname, _simulateID + "_1"true);
    34      else if (var == '2') {
    35      GUI.UIWidget.SetVisible (_layoutname, _simulateID + "_2"true);
    36      else if (var == '3') {
    37      GUI.UIWidget.SetVisible (_layoutname, _simulateID + "_3"true);
    38      else if (var == '4') {
    39      GUI.UIWidget.SetVisible (_layoutname, _simulateID + "_4"true);
    40      else if (var == '5') {
    41      GUI.UIWidget.SetVisible (_layoutname, _simulateID + "_5"true);
    42      else if (var == '6') {
    43      GUI.UIWidget.SetVisible (_layoutname, _simulateID + "_6"true);
    44      else if (var == '7') {
    45      GUI.UIWidget.SetVisible (_layoutname, _simulateID + "_7"true);
    46      else if (var == '8') {
    47      GUI.UIWidget.SetVisible (_layoutname, _simulateID + "_8"true);
    48      else if (var == '9') {
    49      GUI.UIWidget.SetVisible (_layoutname, _simulateID + "_9"true);
    50      }
    51      _currentChar = var;
    52  }
    53  //隐藏所有数字
    54  public void SetAllInvisible()
    55    {
    56      GUI.UIWidget.SetVisible(_layoutname, _simulateID + "_0"false);
    57      GUI.UIWidget.SetVisible(_layoutname, _simulateID + "_1"false);
    58      GUI.UIWidget.SetVisible(_layoutname, _simulateID + "_2"false);
    59      GUI.UIWidget.SetVisible(_layoutname, _simulateID + "_3"false);
    60      GUI.UIWidget.SetVisible(_layoutname, _simulateID + "_4"false);
    61      GUI.UIWidget.SetVisible(_layoutname, _simulateID + "_5"false);
    62      GUI.UIWidget.SetVisible(_layoutname, _simulateID + "_6"false);
    63      GUI.UIWidget.SetVisible(_layoutname, _simulateID + "_7"false);
    64      GUI.UIWidget.SetVisible(_layoutname, _simulateID + "_8"false);
    65      GUI.UIWidget.SetVisible(_layoutname, _simulateID + "_9"false);
    66    }
    67        
    68  private List<numbersimulate> _List = new List<numbersimulate>();
    69  //UI_Number_Simulate的构造函数
    70  public UI_Number_Simulate (FString layoutname, string simulateID, int size)
    71   {
    72   //根据传入的位数,初始化ui数字模拟器
    73   for (int i=0; i < size; i++)
    74   {
    75    NumberSimulate numSimulate = new NumberSimulate(layoutname, simulateID + i.ToString());
    76    _List.Add(numSimulate);
    77    numSimulate.SetAllInvisible();
    78      }
    79  }
    80  
    81        
    82  //为Ui数字模拟器设置数值
    83  public void SetNumber (int num, bool numFromLeftToRight)
    84  {
    85   //将传入的数字转换为string,根据数组的位数对应的char值设置对应的单位数字模拟器的数值
    86   string numString = num.ToString ();
    87   if (numFromLeftToRight)
    88   {
    89    numString = numString.PadRight (_List.Count, 'a');
    90   }
    91   else
    92   {
    93    numString = numString.PadLeft (_List.Count, 'a');
    94   }
    95   for(int i = 0; i < _List.Count; ++i)
    96   {
    97    _List[i].DoNumSimulate(numString[i]);
    98   }
    99  }</numbersimulate></numbersimulate>
    1   


    引擎官方网站:http://www.genesis-3d.com.cn/

    官方论坛:http://bbs.9tech.cn/genesis-3d/

    官方千人大群:59113309   135439306

    YY频道-游戏开发大讲堂(完全免费,定期开课):51735288 

    Genesis-3D开源游戏引擎:游戏起源,皆因有我!!!

     


  • 相关阅读:
    省选模拟64
    省选模拟63
    杂题
    省选模拟62
    省选模拟61
    省选模拟60
    省选模拟58
    IntelliJ IDEA配置tomcat【全程详解】
    java之 Timer 类的简单使用案例
    Intellij IDEA导入Github中的MAVEN多模块项目【保持项目样式】
  • 原文地址:https://www.cnblogs.com/G-3D/p/3525883.html
Copyright © 2011-2022 走看看