怪物的AI脚本(1)

3 篇文章 0 订阅
3 篇文章 0 订阅

1. VS底下的绿色波浪线是什么意思?

绿色波浪线:
  如果你的代码中出现了绿色的波浪线,说明你的代码语法并没有错误,
  只不过提示你有可能会出现错误,但是不一定会出现错误。警告线

红色波浪线:
  如果你的代码中出现了红色的波浪线,意味着你的代码中出现了
  语法错误。

2. 复习一下枚举和字典类

https://www.cnblogs.com/lina-chu/p/8391325.html 作者:雪溪
https://www.cnblogs.com/xiongze520/p/10271350.html 作者:熊泽-学习中的苦与乐

默认情况下,第一个枚举的值为0,之后每个连续枚举数的值加1;若设置某一枚举数的值,之后的枚举数仍然按1递增。
enum Day

{
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
};

enum Number
{
    One = 1,
    Two,
    Three,
    Eleven = 11,
    Twelve,
    Thirteen
};

枚举中的每个元素的基础类型都是int,可以使用冒号指明另一种整数类型。已经批准的枚举类型有:byte,sbyte,short,ushort,int,uint,long,ulong

enum Month : byte
        {
            January,
            February,
            March,
            April,
            May,
            June,
            July,
            August,
            September,
            October,
            November,
            December
        };

也可以使用计算值: Hibernating = Sleeping + 5;

**

枚举的定义声明和转换:

**

Day today = Day.Wednesday;
Console.WriteLine($"today is {today}");

int dayNumber = (int)today;
Console.WriteLine($"{today} is day number {dayNumber}");
   
Month month = Month.January;
byte monthNumber = (byte)month;
Console.WriteLine($"{month} is month number {monthNumber}");

枚举的一些方法:

方法名称
CompareTo将此实例与指定对象进行比较并返回一个对二者的相对值的之事
Equals指示此实例是否等于指定的对象
Format根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式
GetName在指定枚举中检索具有指定值的常数的名称
GetNames检索指定枚举中常数名称的数组
GetTypeCode返回此实例的基础 TypeCode
GetUnderlyingType返回指定枚举的基础类型
GetValues索指定枚举中常数值的数组
HasFlag确定当前实例中是否设置了一个或多个位域
IsDefined返回指定枚举中是否存在具有指定值的常数的指示
Parse将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 一个参数指定该操作是否不区分大小写
TryParse将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 用于指示转换是否成功的返回值

标志枚举

标志枚举要在顶部加上[System.Flags]特性进行声明。而且枚举支持组合运算。
这种位运算是非常有用的,再sql语句里面也支持位运算。也就是说,把一个枚举运算后的结果存入数据库之后,还能够按照你的要求读取出来,比如:

将一个“高帅”的值存入数据库,那么存进去的值就是整型5:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace enumApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var man = People.高 | People.帅;  //赋值为101    计算方法001或上100,结果是101
            Console.WriteLine("高和帅的枚举值和为:"+(int)man);
            if ((man & People.高) == People.高)       //101 man 
            {                                    //001 高 逐位相与,
                Console.WriteLine("此人:高");      //001 如果结果是高,就可以反推出man包含 高
            }
            else
            {
                Console.WriteLine("此人:矮");
            }
            Console.ReadKey();
        }

       [System.Flags]
       public enum People:int 
        {
            高 = 1,  //001
            富 = 2,  //010
            帅 = 4,  //100
        }
    }
}

(这个位运算不是很懂…)

字典类:

https://www.cnblogs.com/ChenMM/p/9479987.html 作者:一颗豆豆

Dictionary 提供快速的基于键值(Key)的元素查找;和哈希表很像也是一种无序的结构。
结构是:Dictionary<[key], [value]>, 当你有很多元素的时候可以用它;
要使用Dictionary,需要先导入C#泛型命名空间System.Collections.Generic,在使用前,你必须声明它的键类型和值类型。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo1
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建泛型哈希表,Key类型为int,Value类型为string
            Dictionary<int, string> myDictionary = new Dictionary<int, string>();
            //1.添加元素
            myDictionary.Add(1, "a");
            myDictionary.Add(2, "b");
            myDictionary.Add(3, "c");
            
            //2.删除元素
            myDictionary.Remove(3);
            
            //3.假如不存在元素则添加元素
            if (!myDictionary.ContainsKey(4))
            {
                myDictionary.Add(4, "d");
            }
            
            //4.显示容量和元素个数
            Console.WriteLine("元素个数:{0}",myDictionary.Count);
            
            //5.通过key查找元素
            if (myDictionary.ContainsKey(1))
            {
                Console.WriteLine("key:{0},value:{1}","1", myDictionary[1]);
                Console.WriteLine(myDictionary[1]);            
            }
            
            //6.通过KeyValuePair遍历元素
            foreach (KeyValuePair<int,string>kvp in myDictionary)
            {
                Console.WriteLine("key={0},value={1}", kvp.Key, kvp.Value);

            }
            //7.得到哈希表键的集合
            Dictionary<int, string>.KeyCollection keyCol = myDictionary.Keys;
            
                //遍历键的集合
                foreach (int n in keyCol)
                {
                    Console.WriteLine("key={0}", n);                
                }
                
            //8.得到哈希表值的集合
            Dictionary<int, string>.ValueCollection valCol = myDictionary.Values;
                //遍历值的集合
                foreach( string s in valCol)
                {
                Console.WriteLine("value:{0}",s);
                }
                
            //9.使用TryGetValue方法获取指定键对应的值
            string slove = string.Empty;
            if (myDictionary.TryGetValue(5, out slove))
            {
                Console.WriteLine("查找结果:{0}", slove);
            }
            else
            {
                Console.WriteLine("查找失败");
            }
            
            //10.清空哈希表
            //myDictionary.Clear();
            Console.ReadKey();
        }
    }
}

输出结果:
在这里插入图片描述

https://blog.csdn.net/BillCYJ/article/details/81015598 作者:Real_JumpChen
如果要修改已有key对应的value,可以这样做:
在这里插入图片描述
2.Unity5.4以下的版本,最好不要用foreach来遍历字典:
法一:foreach遍历字典,会生成GC:
在这里插入图片描述
在这里插入图片描述
法二:对于我这种需求,使用for循环,会生成更多的GC,因为存在mActMergeRedPointKey这个局部List变量
在这里插入图片描述
法三:使用迭代器,不会生成GC:
在这里插入图片描述
在这里插入图片描述
3.根据key取value,最好使用 TryGetValue 而不是 ContainsKey+根据key索引value:
法一:ContainsKey+根据key索引value,不好,用了两次查找,第一次:ContainsKey,第二次:myDictionary[key]

if(myDictionary.ContainsKey(key))
{
    // 通过key索引value
    int resValue = myDictionary[key];
}

法二:TryGetValue的方法:

int resValue ;
myDictionary.TryGetValue(key, out resValue);

使用TryGetValue 更快,性能更好,因为只用了一次查找,TryGetValue比ContainsKey后使用[key]取value,速度快一倍;
TryGetValue更安全,找不到value时返回false,而使用ContainsKey后使用【key】取value取不到时,会抛出异常导致真机卡死。

e.g.

private Dictionary<uint, MyPet> myPets;
public List<MyPet> GetShowPets()
{
    List<MyPet> pets = new List<MyPet>();
    if (null != myPets)
    {
        var e = myPets.GetEnumerator();
        while (e.MoveNext())
        {
            if (CheckPetShow(e.Current.Key))
            {
                pets.Add(e.Current.Value);
            }
        }
    }

    //根据配置表权重进行升序排序
    pets.Sort(
        delegate (MyPet pet1, MyPet pet2) 
        {
            return pet1.PetRankWeight.CompareTo(pet2.PetRankWeight);
        });

    return pets;
}

https://blog.csdn.net/yinghuolsx/article/details/72952857 下次再来学习
https://blog.csdn.net/u013477973/article/details/65635737
https://dsqiu.iteye.com/blog/2029701

下载解压后,将“AI脚本插件合集1.1.jsx”复制到\Abobe Illustrator XX\Presets(在部分AI软件中可能显示为“预设”)\zh_CN\脚本 文件夹下,重新启动ai,就可以在"文件"-"脚本"下看见ai脚本菜单,运行即可。其他说明:如果你按上述安装方法可以正常使用脚本,那么可以无视下面说明。如果你按上述方法安装了脚本,但是点击插件却无任何反应,则需要你选择不同版本的脚本复制到\Abobe Illustrator XX\Presets(在部分AI软件中可能显示为“预设”)\zh_CN\脚本 文件夹下,即使是AI绿色版也可以使用。 AI CS6 32bit复制“AI脚本插件合集_CS6_32.jsx” AI CS6 64bit复制“AI脚本插件合集_CS6_64.jsx” AI CC 2015 64bit复制“AI脚本插件合集_2015_64.jsx” AI CC 2017 64bit复制“AI脚本插件合集_2017_64.jsx” AI CC 2018 64bit复制“AI脚本插件合集_2018_64.jsx 注:部分脚本由于兼容原因,可能无法在某些ai版本中使用。 包含的ai脚本插件列表 AI尺寸横向标注 对象横向标注脚本 AI尺寸纵向标注 标注尺寸 增强版 画刀版1.0 画刀版2.0 天地盖盒子脚本 绘制手提袋脚本 绘制外箱脚本 生成出血线脚本 文本段落分行 段落文本行合并 文本段落转换 单行文本打散 字体转曲 字体大小写转换 查找专色 对象换位 选择对象导出为PSD 导出jpg 选择对象导出jpg 选择增强 随机填色 AI圆角插件 锚点分割路径 等分路径 建立等分圆 测量路径长度 点到点连线 节点延伸 解锁全部对象 统一画板尺寸 当前页加矩形 全部页加矩形 垂直两分 水平两分 插入页码等 AI多图层转多画板 AI页面适配对象 裁切标记 印前角线 一键拼版 自动拼版 阵列复制 内角线 创建参考线 打开多页PDF 置入PDF多页面 条码生成 移除叠印属性 移除非纯黑叠印 解散全部群组 批量替换链接图 AI链接文件打包 全部颜色转黑 查找白色叠印 删除所有蒙版 正则编辑文本 流水号生成器 ai颜色标注
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值