简单数组算法分享
发布日期:2022-03-03 10:44:01
浏览次数:15
分类:技术文章
本文共 3179 字,大约阅读时间需要 10 分钟。
1.算法来源于生活,来源于工程实际。我在2d游戏开发中遇到一个需要发射扇形区域的散射弹
角度是+120 到-120之前 这个区域可能有3个子弹。我在计算的时候是从+120计算到-120 也就是数组是a【0】 = 120 a[0] = 0 a【2】 = -120 。 这样正向去计算可能容易一些,但是现在他们需要a[0] = 0度 a[1] = 120度 a[2] = -120度 注意正角度在x轴上方 负角度在下方,这个通过向量的乘法来判断(用坐标表达式计算) 类似数组12345 要变为32415 下面的函数就是干这个事情 注意数组是引用类型。
public static void CenterFloatArray(float[] array)
{ int dyLength = array.Length; int center = array.Length / 2; for (int i = 0; i < array.Length; i++) { dyLength = array.Length - i; center = i + (dyLength - 1) / 2; int initPos = i; float value = array[center]; for (int j = center; j > initPos; j--) { array[j] = array[j - 1]; } array[initPos] = value; } } 2.游戏需要有一个优先级的东西,比如技能遥感优先,方向遥感优先,主目标优先。怎么实现这么个机制,我这里也是用数组来实现。主要看GetMainTarget这个函数 他是一个递归的函数。会不断去消耗数组 a【0】 a[1] a[2] 如果技能遥感优先则查看a【0】对应的方向 如果不为0方向 则取这个方向,如果是0 那么取a[1]的值 依次类推 也可以做成循环,但是我似乎更喜欢递归式,这种思想很奇妙也很优雅using UnityEngine;
using System.Collections.Generic; using System.Collections; using System.Linq; using rkt; public enum EnSortPriority { SKILL_JOY_STICK = 0, // 副遥感优先 MOVE_JOY_STICK = 1, // 主遥感优先 MAIN_TARGET_FIRST = 2, // 主目标优先 }public class SkillTargetFilterCom : IRecycle
{public EffectOptionParameter m_effOp;
public EnSortPriority[] m_enSortPriority = null; private int m_arrayIndex = 0; private SDEffectTarget m_mainTarget = null; //加入技能的特性 public SDEffectTarget MainTargetEntity { get { return m_mainTarget; } set { m_mainTarget = value; }}
public Vector3 MainTargetPos{ get; set; } public System.Func<Vector2> m_joyStickDirFunc; public Transform transform;public void Awake()
{}
//执行执行前指定init初始化操作 按优先级依次传入对应的枚举元素,这里用数组作为形参 public void Init(EffectOptionParameter eop, EnSortPriority[] enSort, System.Func<Vector2> func) { this.m_effOp = eop; m_enSortPriority = enSort; m_arrayIndex = 0; m_joyStickDirFunc = func; } public void GetMainTarget() { if(m_enSortPriority == null || m_enSortPriority.Length <= 0) { return; } var ty = m_enSortPriority[m_arrayIndex]; if (ty == EnSortPriority.SKILL_JOY_STICK) // 副遥感优先 { var dir = UIJoyStick.GetDirection(m_effOp.joyStickId); if (dir != Vector2.zero) { MainTargetEntity = null; MainTargetPos = transform.position + 1000 * new Vector3(dir.x, dir.y, 0); return; } ++m_arrayIndex; if(m_arrayIndex >= m_enSortPriority.Length) { return; } GetMainTarget(); } else if (ty == EnSortPriority.MAIN_TARGET_FIRST) // 主目标优先 { var SDEffectTarget = SDEntityTargetEffect_.Find(m_effOp.TargetId); if (SDEffectTarget != null) { MainTargetEntity = SDEffectTarget; MainTargetPos = MainTargetEntity.TargetPosition(EntityBodyPart.Skeleton, EntityTargetVirtualNodeEnum._effece_); return ; } ++m_arrayIndex; if (m_arrayIndex >= m_enSortPriority.Length) { return ; } GetMainTarget(); } else if (ty == EnSortPriority.MOVE_JOY_STICK) // 主遥感优先 { var dir = UIJoyStick.GetDirection(1); if (dir != Vector2.zero) { MainTargetEntity = null; MainTargetPos = transform.position + 1000 * new Vector3(dir.x, dir.y, 0); #if UNITY_EDITOR rktLogUtil.GLog("主遥感优先"+ MainTargetPos + "位置"+dir); #endif return; } #if UNITY_EDITOR rktLogUtil.GLog("主遥感没动" + dir); #endif ++m_arrayIndex; if (m_arrayIndex >= m_enSortPriority.Length) { return; } GetMainTarget(); } } public void OnRecycle() { m_arrayIndex = 0; m_enSortPriority = null; } }转载地址:https://blog.csdn.net/yangjie6898862/article/details/121430395 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月11日 13时22分14秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
sql 过滤重复数据
2019-04-26
VS Code 源码管理 有提示但不显示提交项目内容
2019-04-26
MetInfo米拓后台操作修改汇总
2019-04-26
linux系统777,drwxr-xr-x权限详解
2019-04-26
IIS6,IIS7下设置https主机名灰色无法修改
2019-04-26
asp 断点测试,异常打印
2019-04-26
PHP $_SERVER 超全局变量--【聚合篇】
2019-04-26
最新版 安全狗设置
2019-04-26
检测是否微信环境,安装包下载
2019-04-26
Caused by: com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
2019-04-26
CSS从入门到精通——基础选择器
2019-04-26
JavaScript 学习手册二:JS 数据类型
2019-04-26
Python 迭代器与生成器
2019-04-26
实现简单计算器
2019-04-26
Python入门之模块
2019-04-26
Erlang警报管理
2019-04-26
为什么“自学”总是那么难?
2019-04-26
python星型图可视化及红楼梦第一回优化二
2019-04-26
2021年2月程序员工资统计,平均15144元
2019-04-26
红楼梦第一回ruby可视化
2019-04-26