Posts

Showing posts with the label learn

30种常见装饰花纹图样

Image
Arabesque 阿拉伯式花纹 交织在一起的花卉或几何图案的精心设计,通常受到伊斯兰艺术的启发。 具体表现手段为 几何图形 在一个平面内的反复运用。其几何图案取材自动植物的形像,手法可形成对称连续和无限延伸的平面装饰特色。 Arabesque - Wikipedia Argyle 多色菱形花纹 在单一背景色上以实心和轮廓形状排列的,多色菱形的几何图案。 Argyle (pattern) - Wikipedia Basketweave 竹编花纹 通体格纹编织图案,类似于竹篮。常用于地板瓷砖 。 Basketweave - Wikipedia Calico 印花棉布花纹 小规模的通体花卉设计,色彩鲜艳,最初来自印度,后来与美国乡村风格有关。 Celtic Knot 凯尔特结 由丝带形成的结,无缝地相互通向。也被称为永恒的结。 Chequer/Checkerboard 棋盘格花纹 交替颜色、纹理或材质的正方形的重复图案。 Chevron 山形花纹 传统的、编织的或印刷设计的锯齿形交叉,采用条纹布局。 Damask 锦缎花纹 提花编织装饰图案,通常为一种颜色。 Damask - Wikipedia Fleur-De-Lis 百合花纹 风格化的三瓣或四瓣百合,最初是纯洁的象征。 Fleur-de-lis - Wikipedia Floral花卉花纹 装饰有鲜花或花朵图案或由鲜花图案组成。 Gingham 条纹布 由相同宽度的重叠条纹制成的实心正方形的图案。 Gingham - Wikipedia 希腊式 Greek Key 由直角相交的线组成的几何图案。 Meander (art) - Wikipedia Herringbone 人字形图案 采用锯齿形条纹布局。多用于地板瓷砖和道路路面的矩形排列。 Herringbone pattern - Wikipedia Houndstooth 千鸟格 传统的千鸟纹由四条暗色及四条亮色的经纱和纬纱条纹,以两根以上/两根在经线下方,每次通过一根线的方式交错组成。 Houndstooth - Wikipedia Ikat 伊卡特 在编织织物之前通过扎染线创建的图案设计。 Lattice 格子 交错、纵横交错的条纹形成网络的设计。 Ogee 洋葱花纹 洋葱形图案。由两条s形曲线相交于一点而形成 。 Paisley 涡纹图案 一种风格...

如何提高代码可读性

Image
一、可读性的重要性 编程有很大一部分时间是在阅读代码,不仅要阅读自己的代码,而且要阅读别人的代码。因此,可读性良好的代码能够大大提高编程效率。 可读性良好的代码往往会让代码架构更好,因为程序员更愿意去修改这部分代码,而且也更容易修改。 只有在核心领域为了效率才可以放弃可读性,否则可读性是第一位。 二、用名字表达代码含义 一些比较有表达力的单词: 使用 i、j、k 作为循环迭代器的名字过于简单,user_i、member_i 这种名字会更有表达力。因为循环层次越多,代码越难理解,有表达力的迭代器名字可读性会更高。 为名字添加形容词等信息能让名字更具有表达力,但是名字也会变长。名字长短的准则是: 作用域 越大,名字越长。因此只有在短作用域才能使用一些简单名字。 三、名字不能带来歧义 起完名字要思考一下别人会对这个名字有何解读,会不会误解了原本想表达的含义。 布尔相关的命名加上 is、can、should、has 等前缀。 用 min、max 表示数量范围; 用 first、last 表示访问空间的包含范围; begin、end 表示访问空间的排除范围,即 end 不包含尾部。 四、良好的代码风格 适当的空行和缩进。 排列整齐的注释: int a = 1; // 注释 int b = 11; // 注释 int c = 111 ; // 注释 语句顺序不能随意,比如与 html 表单相关联的变量的赋值应该和表单在 html 中的顺序一致。 五、为何编写注释 阅读代码首先会注意到注释,如果注释没太大作用,那么就会浪费代码阅读的时间。那些能直接看出含义的代码不需要写注释,特别是不需要为每个方法都加上注释,比如那些简单的 getter 和 setter 方法,为这些方法写注释反而让代码可读性更差。 不能因为有注释就随便起个名字,而是争取起个好名字而不写注释。 可以用注释来记录采用当前解决办法的思考过程,从而让读者更容易理解代码。 注释用来提醒一些特殊情况。 用 TODO 等做标记: 六、如何编写注释 尽量简洁明了: // The first String is student's name // The Second Integer is student's score Map<String, Integer> scoreMap = new Hash...

Godot节点NodePath

场景树中预解析的相对或绝对路径,用于 Node.get_node 和类似函数。它可以引用节点、节点中的资源或节点或资源的属性。例如,将引用名为"Sprite"的节点上纹理资源的大小属性,该节点是路径中其他命名节点的子节点。请注意,如果要获取资源,则必须以冒号结束路径,否则最后一个元素将用作属性名称。"Path2D/PathFollow2D/Sprite:texture:size" NodePath — Godot Engine (3.0) 英文文档

DnD人物阵营九宫格

Image
阵营(Alignments)是DND(龙与地下城)中很重要的一个规则,通过两个维度三个划分排列组合形成九个阵营,玩家通过自己选定的阵营来做出符合阵营的决策,描画出精彩又合理的冒险故事。在游戏设计中,我们也可以通过这种简方法来为游戏添加阵营,配合游戏背景和冲突勾勒出扣人心弦的故事大纲,同样也可以用来设计人物性格,保证人物行为的一致性。人物的阵营可以不是一成不变的,配合叙事(如遭遇重大变故和特殊人物的引导)可以自然的转变人物的阵营。 守序善良  倾向作出符合社会期许的正确行为 中立善良 根据对方需求不同而倾力相助 混乱善良  依照良心行事,不太在意其他人的看法 守序中立  行为按照法律、传统或是个人的原则 绝对中立 偏好避免碰触道德问题与不选边站的生物,或是只想做当下认为最恰当的行为 混乱中立  随性所至,将个人自由摆在首位 守序邪恶  除了传统、忠诚或规则的限制外,以有条不紊的方式获取一切个人利益 中立邪恶  可以做出任何事,且毫无怜悯和犹豫 混乱邪恶  以贪婪、憎恨或是嗜血驱动,作出反复无常的暴力行为 两个维度 守序与混乱 (lawful / chaotic) 守序与混乱代表了秩序与熵,控制与混沌,社会与个人,稳定与变化的对立原则。守序和混乱既不是善也不是恶 守序代表可预测性和理性思维,而混乱则相反。守序意味着你是一个基于习惯行动的生物,在通常情况下,你的行为可被预测,你以熟悉的惯常方式做出反应。 无法集中注意力,或者不会专注于某事,又或者你真的不知道他们对挑衅会作何反应,即使他们之前以某方式做出反应,但这次他们的行为可能完全不同,这就是混乱。 守序者严守誓言,遵纪守法,重视传统,服从权威。 混乱者不喜欢被约束,崇尚个体自由,对誓言不太看重。 中立者也介于两者之间,往往不会主动破坏法律,但也不会积极的维护,不会主动打破约定的习俗,有时也会为了某种目的而说谎。 善良与邪恶 (good / evil) 善与恶代表了利他主义与伤害、善良与仇恨、怜悯与恶意等熟悉的道德评判。 善意味着利他主义,尊重生命,关心众生的尊严。有时会做出个人牺牲来帮助他人。 邪恶意味着伤害、压迫和杀害他人。一些邪恶的生物对其他人根本没有同情心,如果这样能获得好处,他们会毫不犹豫地杀人。其他人则积极追求邪恶,为了取乐而杀人,或出于对...

godot多叉树遍历

Image
Tree traversal - Wikipedia Tree Traversals (Inorder, Preorder and Postorder) - GeeksforGeeks 遍历多叉树 - 简书 (jianshu.com) 广度优先 缺陷--pop_front()在大型数组中执行较慢 func traverse_breath_order(): var deque = [] var node = self deque.append(node) while deque.size() > 0: node = deque.pop_front() print(node.text) deque.append_array(node.get_children()) 输出结果 root A B A1 A2 A3 B1 B2 A11 A31 A32 深度优先 #数组遍历深度逆序 func traverse_preorder_inversed(): var deque = [] var node = self deque.append(node) while deque.size() > 0: node = deque.pop_back() print(node.text) deque.append_array(node.get_children()) 输出结果 root B B2 B1 A A3 A32 A31 A2 A1 A11 #递归遍历深度 func recurse_preorder(node): print(node.text) for i in node.get_children(): recurse_preorder(i) 输出结果 root B B2 B1 A A3 A32 A31 A2 A1 A11 #数组遍历深度 func traverse_preorder(): var deque = [] var node = self deque.append(node) while deque.size() > 0: node = deque.pop_back() print(node.text) var m = node.get_...

godot声音特效

Image
Audio streams — Godot Engine (stable) documentation in English 增幅(Amplify) 增幅改变信号的振幅. 使用时要小心. 把电平调得太高的话, 声音就会被削波, 这通常是不可取的. 带限和带通(BandLimit and BandPass) 它们是共振滤波器, 在 截断 (Cutoff)点附近阻断频率. 带通滤波器可以用来模拟旧电话线路或扩音器传出的声音. 调节带通滤波器的频率, 可以模拟吉他哇音(wah-wah)踏板的声音, 想想吉米·亨德里克斯在 Voodoo Child (Slight Return) 中使用的吉他吧. Capture(捕获) 其所在的音频总线的音频帧复制到内部缓冲区中。 这可以用于从麦克风捕获数据或通过网络实时传输音频。 . 和声(Chorus) 和声效果器会复制传入的音频, 稍微延迟重复信号, 并使用低频振荡器连续调节重复信号的音高, 然后再将重复信号(一个或多个)和原始信号混合在一起. 这就产生了一种微光效果, 并增加了声音的立体声宽度. 压缩器(Compressor) 当输入信号的幅度超过某一阈值时, 动态范围压缩器会自动衰减该信号的电平. 衰减的程度与传入的音频超过阈值的程度成正比. 压缩器的 "比例" 参数控制衰减的系数. 压缩器的主要用途之一是, 一个信号具有非常大声和小声的部分时, 压缩器可以用于降低动态范围. 降低信号的动态范围会更方便混音. 压缩器有很多用途. 例如: 它可以在主总线中用于压缩整体输出. 它可以在人声通道中使用, 使它们听起来尽可能均匀. 它可以是 Sidechained . 也就是说, 它可以利用另一个音频总线的电平来降低一个信号的电平, 进行阈值检测. 这种技术在电子游戏混音中非常常见. 在出现语音时, 音乐或音效的电平会被 "降低". 它可以通过较慢的启动(attack)来强调瞬态. 让音效听起来更有力. 延迟(Delay) 通过反馈回路添加 "回音" 效果. 它可以与 混响 (Reverb)一起使用, 模拟宽阔的房间, 峡谷等声音从远处反弹回来的地方. 失真(Distortion) 使声音失真.Godot提供几种类型的失真: overdrive , tan 和 bit cru...

Godot导出文件格式的变更

godot项目导出后,路径会有所变化,此时和编辑器内的路径已经不同,使用file_exist方法可能会失败  导出前--导出后 .png-->.png.import .jpg-->.jpg.import .tres-->.tres .gd-->.gdc .tscn-->.tscn 代码上判断需要变更为导出后的格式 if dir.file_exists(tex_path) or dir.file_exists(tex_path + ".import"): 其他格式如果不确定导出后的格式,可以在导出时选择导出pck/zip,解压后进行对比

三胀式蒸汽机浅析

Image
三胀式蒸汽机(Tiple expansion engine)是一种改良的热效率更高的复合式蒸汽机(Compound steam engine)。复合蒸汽机是蒸汽机的一种类型,蒸汽在两个或两个以上阶段进行扩展。复合发动机的典型流程,蒸汽首先在高压(HP) 气缸中膨胀,然后在释放热量和压力后,直接排入一个或多个大容量低压(LP)气缸中。多扩展发动机采用压力逐渐降低的额外气缸,从蒸汽中提取更多能量。通过让蒸汽反复通过多个气缸来提高效率。最终的蒸汽由于压力过低不足以推动活塞,则以容易驱动的蒸汽轮机turbine engine来代替。早期的很多船体都是使用的这种技术的蒸汽发动机。熟知的泰坦尼克号也是采用的这种发动机。 Compound steam engine - Wikipedia

动画技巧

  Animation Tricks (wpi.edu) 动画技巧 由苏珊娜·马丁 动画可以被认为是一个"把戏"。好的技巧是那些没有注意到,除非他们被指出。本文将描述四种类型的技巧:设计、实现、节约和制作 [BLIN94],以及动画人物 [LASS94] 的技巧。 设计技巧 动画的基本意图是传达一些东西。有四种类型的设计技巧:吸引技巧、分心技巧、计时技巧和运动增强。 吸引技巧 观众对设计者认为图像重要部分的关注方向是静止图像或移动图像设计最重要的方面之一。这对移动图像尤其重要,因为它们在屏幕上已经很长时间没有出现在屏幕上:观看者没有选择长时间研究它。人们必须让观看者查看新动作在全部结束之前发生的地方。以下是实现此目标的方法: 出现和消失 屏幕上的变化会引起眼睛的注意。从存在到不存在,反之亦然,这是相当戏剧性的。 闪烁 在它移动之前眨眼会引起观众的注意。 预期和过度射击 在向预期方向移动之前,让对象备份一点,从而预测操作。 见锯效果 引导观众进入一些这样的转变,通过"摩擦来回转换"一点 并行操作 要指出屏幕不同部分的两个事物之间的连接,请同时上下摇晃它们,以吸引注意力。 紧张和释放 张力是通过使形状看起来不平衡,几乎翻倒而形成的。释放来自被牢固放置的对象。 犹豫 使对象暂停一点,然后再将它们移动到其最终位置。这积累了预期。 分心技巧 有时有必要分散观看者对屏幕上某些内容的注意力。这可能是动画渲染中的一个小故障,也可能是动画师为避免一些冗长或复杂的计算而使用的捷径。一个例子是旧的切换器:有时动画中不同点的同一对象需要不同的模型。 计时技巧 这些技巧适用于您采取行动的时间。 速度调整 如果物理动作发生得太快,看不到,只需减慢时间尺度。这类似于缩放对象以安装在屏幕上。 对数缩放 当飞入大小差异很大的物体时,可以直接对距离的对数进行动画化,而不是直接对距离进行动画化。 何时翻倍/单帧 双框是渲染其他帧并录制每个渲染帧两次的过程。这使得一个动作似乎移动得更快,有时被用来增加现场的活力。单个帧比双帧更可取,但渲染需要更长的时间。 重叠操作 各种动作在时间上重叠,使动画看起来更有活力。 运动增强 如果不以某种方式夸大某些动作,就很难传达它们。例如: 坠落的尸体 要给人留下物体持续下降的印象,请在跟踪对象时滚动的背景中放置一些纹理。另一种技术是...

建筑风格年表

BC6000-1000 BC6000~BC2800 新石器建筑|新石器时代 Neolithic architecture|Neolithic BC4500~BC2000 美索不达米亚建筑|苏美尔文明 Architecture of Mesopotamia|Sumerian BC3200~373 古埃及建筑 Ancient Egyptian architecture|Ancient Egyptian BC2000~1519 中美洲建筑|中美洲 Mesoamerican architecture|Mesoamerican BC1920~BC630 中美洲建筑|亚述帝国 Architecture of Mesopotamia|Assyrian BC776~265 古希腊建筑 Ancient Greek architecture|Ancient Greek BC753~663 罗马建筑 Roman architecture|Roman 330~1520 拜占庭建筑 Byzantine architecture|Byzantine 711~1492 摩尔式建筑 Moorish architecture|Moorish #Spain, Portugal, North Africa 800 前罗马式建筑|卡洛林建筑 Carolingian architecture|Carolingian #france and Northern Europe|northern europe 1000-1750 1000~1300 曷萨拉 Hoysala architecture|Hoysala c.1000-c.1300 1000~1250 基辅罗斯宗教建筑|中世纪俄国 Architecture of Kievan Rus'|Medieval Rus' c.1000-c.1250 1050~1170 仿罗马式建筑 Romanesque architecture|Romanesque 1050–1170 1074~1250 诺曼底式建筑 Norman architecture|Norman 1074–1250 1126~1599 穆德哈尔式Mudéjar 1120–1599 1190~1546 哥...

Krita创建自定义插件(三)-图层的导出

Node--krita内的各种图层,滤镜和组都属于node *对图层node进行删除等其他操作后如果文档画面没有更新吗,要对文档调用refreshProjection(),否则可能和实际图像数据对不上。   导出图片infoObject可选参数 png alpha: bool (True or False) compression: int (1 to 9) forceSRGB: bool (True or False) indexed: bool (True or False) interlaced: bool (True or False) saveSRGBProfile: bool (True or False) transparencyFillcolor: rgb (Ex:[255,255,255]) jpeg baseline: bool (True or False) exif: bool (True or False) filters: bool (['ToolInfo', 'Anonymizer']) forceSRGB: bool (True or False) iptc: bool (True or False) is_sRGB: bool (True or False) optimize: bool (True or False) progressive: bool (True or False) quality: int (0 to 100) saveProfile: bool (True or False) smoothing: int (0 to 100) subsampling: int (0 to 3) transparencyFillcolor: rgb (Ex:[255,255,255]) xmp: bool (True or False) 关于JPEG的导出参数可以参考 Krita导出参数

代码注释格式

注释的原则 不要注释显而易见的事情 应当与描述的对象相一致 清楚指向所描述的内容(哪一行或哪个代码块) 可读性,易读性 有些注释可使用代码拼成简单的图像来说明 使用python注释符号#,其他语言同理 单行代码注释 #This is a short code comment 特殊代码标记(>后可跟自定义标记字母) #This is a code mark>>>>>>>>M 函数/模块内注释(多级) #--------This is a in function code part comment #======== This is a in function code part comment ======== ######### This is a in function code part comment ######## 代码文件总纲(总体功能描述) #******************************** #This is a total description #******************************** 模块注释 #----------------------------------------------- #|        This is a module description         | #-----------------------------------------------

Krita导出Jpeg参数比较

Image
Jpeg( JPEG - Wikipedia )是一种常见的有损压缩图片格式,由于体积小压缩率高的特点被网络广泛使用。适用于无透明度,颜色较为丰富的图片,如风景人像等照片。 Jpeg保存主要有这几种参数 quality-质量(0-100),越高图片越接近原图,文件越大。一般照片50-95都是可接受的范围 在线质量查看: FotoForensics Jeffrey Friedl's Blog » An Analysis of Lightroom JPEG Export Quality Settings (regex.info) optimiz-优化。可以减小图片文件的大小 baseline--强制基线。和质量相关,目前只影响低于质量低于25的图片。建议默认打开,关闭影响图片兼容性,质量低的图片可能在某些浏览器上显示不正确 更多关于强制基线的说明: Jpeg export options • KDE Community Forums Option "Force baseline JPEG" removed from JPEG save dialog (2007) — GIMP Development — gimpusers.com subsampling--亮度重采样-通过降低图片的亮度信息减小图片大小。影响压缩后颜色是否准确。如果图像饱和度较低并且亮度差异明显,可能效果不好。详细 Chroma subsampling - Wikipedia 原图 1x1x1(最佳) 2x1x1(最小) smooth-平滑。调节后画面会失去一些锐利度,文件会变小,不建议使用。 progressive--渐进。图片会从模糊到清晰动态进行加载,适用于网络 forceSRGB--强制转化为srgb。关于色彩空间的更多内容,请查看 色彩管理流程 — Krita Manual 5.0.0 文档 基本来说质量90,重采样1*1*1能得到基本完美的外观与不错的压缩比

图像缩放算法比较

Image
对于upscale,mitchell和bicubic效果最好(较为自然,柔和,大缩放系数下无明显伪影)。其中bicubic颜色较michell饱和度稍低),krita中michell可能有bug,貌似使用的是hamming算法而不是michell,因为有明显伪影 对于downscale,sinc(Lanczos是一种sinc算法)效果最好(最锐利),缺点是颜色较少的图片会在边缘生成较亮的线,普通的bicubic没有这个问题。   compression - Do more compressed PNG images take longer to load? - Super User 通常来讲,文件读取速度主要取决于文件大小。高压缩率造成的时间花费主要在压缩时间增长,而读取时的解压算法比较简单,影响比较小。综合看来大的游戏贴图等应当使用大压缩率文件来降低读取速度。 相关链接 Comparison gallery of image scaling algorithms - Wikipedia What is the best image downscaling algorithm (quality-wise)? - Stack Overflow Image Resizing for the Web and Email (cambridgeincolour.com) Understanding Digital Image Interpolation (cambridgeincolour.com)

Python中 __init__ 函数 内外 定义类的变量的区别

1.在类内,__init__函数外定义类变量 这里先声明两个概念: 类变量:属于类的变量,和实例无关 实例变量:属于实例的变量,和类无关 通过这种方式创建的变量属于当前类,和所有实例都没有关系。 调用此类型的类变量时有两种方式: 当使用“类名.变量名”的方式调用。 使用“实例名.变量名”的方式调用,使用此方法是必须保证实例中没有重名的变量,因为使用“实例名.变量名”的方式调用变量时,系统会先从对象中查找,如果没有再从类中查找。 注:通过 “实例名.类变量名” 对类变量进行赋值并不会改变类变量的值,而是在实例中创建了一个同名的实例变量。 2.在__init__函数内定义类变量 并带有self关键字 通过此方法创建的是实例变量,和类无关。 3.在__init__函数内定义类变量 不带self关键字 通过此方法创建的是函数内的局部变量,和类无关,且只能在函数体内使用。这种定义方法并不局限于__init__函数 其他函数同样适用。 ———————————————— 版权声明:本文为CSDN博主「energy_百分百」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lch551218/java/article/details/104553096