Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
¶Quick Start
¶Create a new post
1$ hexo new "My New Post"
More info: Writing
¶Run server
1$ hexo server
More info: Server
¶Generate static files
1$ hexo generate
More info: Generating
¶Deploy to remote sites
1$ hexo deploy
More info: Deployment
Rust 探索(二)—— 通用编程概念(上)
Rust 探索(二)—— 通用编程概念(上)
Rust作为一门编程语言自然也会有与许多其他编程语言相同或者相似的概念,这也是在编程语言领域的一些通用的概念,通过了解这些概念,并且与其他自己已经熟悉的编程语言进行比较,会使得对于Rust的理念的有更深的理解,也能帮助自己更快上手
¶1. 准备工作
使用具体项目、案例帮助自己学习总是不失为一个好的办法,甚至可以在掌握Rust之后将其整理,用作复习和优化
因而,在开始的时候,先使用Cargo创建一个Rust项目
¶2. 变量与可变性
在Rust当中,变量默认是不可变的
如果一个变量不可变,并且有一个值已经与其绑定(也就是进行了赋值),那么这个值便无法被改变
报错的文字提示不可变的变量被赋值了两次,因而这种写法是无法通过编译的,更不要说运行了
在编程开发的过程中熟练地运用编译器来帮助我们自己也是重要的一环,Rust的编译器能够保证那些声明为不可变的值一定不会发生改变,因而在阅读代码的时候看到某个变量默认被声明为不可变变量时,不必去追究赋值的变化
¶2.1. 可变性
尽管变量默认是不可变的,但是我们可以通过在声明变量的时候在变量的名称前添加 ...
怎么学Unity开发(一)
怎么学Unity开发(一)
¶1. 创建一个新项目
首先打开新建项目的页面,里面会有很多游戏模板可供选择
直接选用3D模板进行接下来的开发
给项目起个名字,然后指定一个存放路径,完成后点击”创建项目“
等待一段时间之后,编辑器会被激活,打开以上界面,项目创建完成
¶2. 常用设置
一个功能复杂的工具往往只需要熟悉一些常用的功能就可以很好得进行运用,其他的内容总是能够在日日复一日的积累和使用中不断加深印象,逐渐形成个人的习惯和体系
¶2.1. 首选项
这里面主要包含了编辑器工具的一些属性设置,主要体现了一些个人偏好,比如:界面的配色、显示内容使用的语言等
¶2.2. 项目设置
这里的设置内容往往是关联当前的这个项目的,比如:场景、物理、输出质量等
¶2.3. 资源
用得比较多的可能是一些游戏资源的创建,以及游戏资源、素材的导入导出功能
¶2.4. 游戏对象
游戏对象最终需要在场景中扮演角色,根据其功能和外观可以分为多个类型,也是最需要被关注的内容
¶2.5. 组件
组件要依赖于游戏对象,因此只有在选定相应的游戏对象之后,其功能才会可用,主要用于丰富游戏对象的功能和结构
¶ ...
Flutter学习笔记(二)
Flutter学习笔记(二)
¶1. 概述
Flutter中其实提供很多种类的内置组件,既涉及有状态的,也涉及无状态的,使用这些组件进行组合,很快能够完成界面布局的搭建工作
¶2. 容器类
容器自然是要可以将其他组件放在自己的内部的,有点像Android里面的ViewGroup或者HTML里面的<div>
¶2.1. Container
Container组件的主要作用是将其他组件打包,以便于整体进行修饰或定位
可以将这里的Container看做是Android里的某一种布局
1234Container( child: Text('优雅永不过时'), color: Colors.greenAccent, )
这里只包含一个Text组件,并且设置了容器的背景色,在默认情况下,Container的大小会根据内容的大小自适应,可以看做是Android中的wrap_content
当然,内边距的padding的效果也别无二致
12345Container( child: Text( ...
怎么学Unity开发(四)
怎么学Unity开发(四)
¶1. 组件介绍
组件对应的就是功能,每个游戏物体都可以看作是空物体 + 若干个具有特定功能的组件
¶1.1. 系统预置组件
在任意一个游戏物体的检查器里,可以找到“添加组件”按钮,里面的组件就是系统提供的预置组件
¶1.2. 自行编写的脚本组件
当系统提供的组件无法满足需求时,通常就需要自己编写C#脚本作为自定义的组件
¶1.3. Transform组件
无论什么游戏对象,在出生的时候都会自带一个Transform组件,即使是空对象也是如此
Tansform组件描述了当前对象在场景中的位置以及呈现的姿态等属性
¶2. 添加预置组件
这两处都可以进行组件的添加
先准备一个空物体,然后加上一个Mesh Filter
该组件可以选择一种网格的外观给当前的游戏对象,这里可以选一个Sphere
但是,仅仅选中网格,没有渲染器并不能够看见,因此继续添加一个Mesh Renderer组件
这样,就可以看到这个物体了
但是,现在没有为其添加材质,因此看起来与其他直接创建的球在外观上有些不一样,这里可以直接创建个材质加上
这里选择这种默认材质,与平常创建的几何 ...
怎么学Unity开发(三)
怎么学Unity开发(三)
1. 地形系统
大型的3D游戏往往离不开丰富的地形,尤其是开放世界类型,会有丰富的地形供玩家进行探索
¶1.1. 准备工作
这里又重新创建了一个3D游戏的项目,然后去到Unity的资源商城里去搜索一些资源
其实需要的呢也就是官方提供的这套标准资源
使用方面按照之前的流程进行资源导入,然后勾选上需要用到的资源类型,进行确认
这里仅仅选中这些资源当中的环境类资源就足够使用了
此时,可以着手创建地形
¶1.2. 地形创建
接下来在场景中创建地形对象
场景中随后生成了一个巨大的平面,这就是地形对象
点开该对象的属性,并切换到设置一栏,可以看到地形对象上的一些参数
向下滚动,可以找到有关当前地形对象大小的信息
刚刚创建出来的地形对象的长和宽都是1000,高度为600
创建的小立方体默认大小是1 * 1,因此可以发现地形这个平面是有多大了
¶1.3. 地形编辑
对于地形的编辑工作主要通过该面板完成
¶1.3.1. 创建相邻的地形
第一个按钮用于创建相邻的地形
选中后当前地形的几个相邻区域高亮显示,点击可用于快速扩张地形
添加后,相邻区域也增加了, ...
Dart学习笔记(二)
Dart学习笔记(二)
¶1. 运算符
在Dart中的运算符使用与现代的大多编程语言大都类似
¶1.1. 关系运算符
关系运算符的用法与其他编程语言中的基本没有多少区别,主要注意一下相等
12345678// 比较运算符var num1 = 123;var num2 = '123';if (num1 == num2) { print(true);} else { print(false);}
这里相等的当然是内容,如果需要判断两者为同一对象,使用identical()
¶1.2. 算术运算符
以上为一些常用运算符,可能特殊一点是
~/(取整) %(取余)
123var num5 = 4;var num6 = 3;print(num5 ~/ num6);
这样的结果只会取到整数部分的1
123var num5 = 4;var num6 = 3;print(num5 % num6);
换成%取得就是余数1
并且需要注意,这里的/操作,返回的是double,与传统的c-like语言有点不同
++,--前后皆可,没什么特别
...
NDK(入门)
NDK(入门)
¶1. 使用目的
进一步提升设备性能,以降低延迟或运行游戏或物理模拟等计算密集型应用
重复使用您自己或其他开发者的 C 或 C++ 库
Android Studio原生库编译默认使用CMake,同时也支持ndk-build
¶2. 准备工作
NDK:允许在Android中使用C/C++
CMake:外部构建工具,如果使用ndk-build,可以不需要
LLDB:原生代码调试工具,默认AS自带
先进到SDK Manager准备一下对应的工具
¶3. 添加原生代码
¶3.1. 创建原生源代码文件
首先,创建项目时选择Native C++类型
选择默认的工具链,这样可以使用默认的CMake配置
新的项目创建完成后,使用Android视图查看一下项目文件结构,会发现出现了一个cpp目录,CMakeLists.txt代表CMake的构建脚本,而另一个.cpp文件是示例代码
简要分析示例
12345678910#include <jni.h>#include <string>extern "C" JNIEXPORT ...
Android底层分析(二)——WindowManager
Android底层分析(二)——WindowManager
在了解WindowManagerService之前,先来认识一下它的其他伙伴们
¶1. WindowManager概述
android\view\WindowManager.java
WindowManager本身是一个接口,并且继承自ViewManager
ViewManager的内容比较简单,就是三件套
android\view\ViewManager.java
这三个方法分别对应了View的添加、更新和删除
并且这些方法都传入View作为参数,因此Window正是借助于View的形式得以展示
既然WindowManager继承了ViewManager接口,自然也就继承了这些方法,可用于对于View进行操作
android\view\WindowManager.java
除此以外,基于Window的特性,又加入了getDefaultDisplay()和removeViewImmediate()这两个方法
第一个getDefaultDisplay()返回的是WindowManager将创建Window的Display对 ...
Flutter学习笔记(四)
Flutter学习笔记(四)
¶1. 列表组件
在实际的应用中,经常会有需要向用户提供大量数据进行阅读的场景,这就需要使用到列表组件展示数据
¶1.1. ListView
123456789ListView( children: [ Text('内容'), ElevatedButton( onPressed: () => {}, child: Text('按钮') ) ], )
对于ListView组件而言最重要的是内容,也就是children属性,它所接收的是Widget列表,理论上只要是Widget就可以放
通常是使用ListTile组件进行搭配使用
ListTile代表的就是列表中的一项,利用其属性可以方便组合列表项的样式
123456ListTile( leading: Image.network('h ...