虚幻引擎 4 学习笔记 [1] :蓝图编程 Demo
虚幻引擎 4 学习笔记 [1] :蓝图编程 Demo
最近学习虚幻引擎,主要看的是 Siki 学院的课,课程链接:Unreal蓝图案例 - 基础入门 - SiKi学院|SiKi学堂 - unity|u3d|虚幻|ue4/5|java|python|人工智能|视频教程|在线课程 (sikiedu.com)
以下为课程笔记:
1. 创建工程
选择蓝图,不带初学者内容包
2. 创建关卡1
3. 设计关卡1
添加初学者内容包,可以使用一些里面的材质,纹理
3.1 地形
选择 Geometry -> Box 更好地设置地形
铺设地板不能直接拖拽该 Actor,不然相应的贴图也会发生变形,可以使用 Brush Settings 来压缩地板块和改变长宽
也可以使用 Brush Editing 模式来编辑地形
将该物体长度拖到 2000 ,调回放置模式,按 alt 快捷复制三个一样的板块,中间间隔 1000
堆砌墙面
在 Brush Editing 模式下拉长墙面
在放置模式下复制墙面:
给添加的 Actor 按 F2 进行重命名
添加文件夹进行规整:
设计独木桥
使用 Edit 和 Extrude,使用 Edit 来使板子倾斜,利用 Extrude 可以增加一些拐角和轴,使用时点击 Actor 的面
选择模式下复制做好的独木桥,并将其旋转后拖入第二个空隙
给城墙添加材质
1)选中想要添加的材质,点击左箭头符号直接运用
2)点击 Surface Materials 里的下拉框搜索相关材质,然后运用
点击 Select All Ajacent Surfaces 将选中材质附加到当前 Actor 的所有面
运用后发现砖块材质过细,选中该 Actor 的所有面,将缩放调为 8 倍,点击 Apply
使用相同的方法为另一边城墙附加材质
为三块地板添加材质
为桥附加材质
3.2 灯光
关闭游戏的自动曝光:Settings -> Projevt Settings -> Rendering -> Default Settings -> Auto EXposure
添置平行光,调试亮度,放置到中间,使用动静结合的方式,Build -> Build Lighting Only
添置天空光照
添置聚光灯
规整结构
3.3 火炬
制作火炬的椎体:
添置火焰:初学者内容包 StarterContent -> Particles -> P_Fire
1)通过三视图调整火焰的位置
2)调整火焰的角度
为火焰添加墙壁的反射光
1)调整参数
2)调整点光源位置使与火焰同一位置
直接拷贝位置
手动调整位置
将创建的火炬转换为静态网格
将子物体附着到火炬下
将火炬及子物体转换为蓝图类:
选中所有需要转换的物体,点击 Blueprints -> Convert Selection to Blueprint Class...
转换为蓝图类后,该火炬可以很方便的整体调节参数,也可以单独调整一个
快速复制摆放六个火炬:
修改蓝图类组件的名字
3.4 可收集物
3.4.1 创建可收集物的蓝图类
Add/Import -> Blueprint Class 创建蓝图类
选择 Actor 作为父类
添加组件:Satic Mesh
选择静态网格的形状
按住 Ctrl + w 复制网格体出来
将下半部分的静态网格进行翻转
为了使宝石的两边变成一个整体,可以将宝石的下半部分变为上半部分的子物体
修改宝石的缩放
将水晶上下部分的碰撞设置为 NoCollision,防止后面水晶飞向玩家时将玩家击飞
3.4.2 给可收集物建立发光材质并添加水晶光照
创建材质:右键 -> Material
在材质编辑器里新建结点的四种方法:
1)随机右键一个区域,输入想要创建的结点,进行连线
2)从 M_Crystal 里直接拖拽出来一根线
3)从 Palette 目录里拽出一个结点
4)在某些结点边上会写上快捷键,如:按住 3,鼠标左键点击一下就会创建一个结点
注意:按 alt 再左键点击一条线可以断开该线
选择材质的颜色
对颜色进行增强:在颜色结点拉出另一条线搜索 Multiply 函数,修改 B 的值为 5
点击 Apply,点击 Save
修改水晶的材质为设置好的材质
添加水晶的光照
1)在水晶蓝图类内部添加点光源的组件
2)设置点光源的参数
为水晶蓝图类添加旋转组件:Rotationg Movement
设置旋转速度:
3.4.3 使水晶可以被玩家收集
为 BP_Crystal 添加一个球形碰撞
将添加的球形碰撞(即触发器)移动到根物体:
修改球形碰撞的 Sphere Radius,使其完整包裹住水晶
添加简单的事件函数(此时可以简单控制玩家靠近水晶即销毁):只有当玩家靠近水晶才会被销毁
3.4.5 添加水晶飞向玩家的动画
插值函数 Lerp:Alpha的数值范围是0到1。
if(Alpha==0) ReturnValue=A
if(Alpha==1) ReturnValue=B
如果Alpha在0到1之间,Alpha值越接近0则ReValue的值越接近A,Alpha值越接近1则ReValue的值越接近B
添加 Lerp 插值函数,通过 Alpha 的值来决定返回值
添加 SetActorLocation 函数来设置水晶的位置
添加时间轴
双击时间轴设置属性:
由于需要通过时间轴的返回值来设置 Alpha,所以选择浮点值:
水晶飞过来的值设置为 0.75
按住 shift 在浅色区点出两个点,设置第一个点的时间为 0 ,返回 0,第二个点的时间为 0.75,返回 1
点击全窗口展示
也可以右键使该直线变为曲线:
设置好时间轴之后开始连线:设置时间轴让 Alpha 的值随着时间改变,B 的位置即为 玩家的位置,A 的位置则为水晶最开始的位置,当 Alpha 最开始为 0,水晶位置不变,当 Alpha 缓慢变到 1,水晶的位置慢慢移到玩家所在的位置,最后再销毁水晶
获得水晶最开始的位置:
添加 GetActorLocation 函数,该函数实时获得水晶的位置,由于水晶一直在移动,所以水晶最开始的位置需要用一个变量暂存:
右键 Return Value,选择 Promote to Variable 创建一个变量
连线,使运行时间轴之前保存水晶的位置:
最后将保存的水晶的最初位置输入 Lerp 插值函数的 A 处
这样看起来线太复杂,也可以直接获取变量值再连接,获取变量的值的方法如下:
将左侧的变量直接拖出到 A 处可以自动连上
将变量拖到空白位置,选择 Get,手动连线
按住 alt 键,拖出变量直接是 Set
按住 ctrl 键,拖出变量直接是 Get
最后进行测试,将 BP_Crystal 的 Trigger 的范围扩大(使动画效果更明显),然后放置一些道具水晶
3.4.6 制作水晶被收集时大小和亮度的变化
大小变化
添加 Lerp 插值函数,通过 Alpha 的值来决定返回值
添加 Set Actor Scale 3D 函数来设置水晶的大小
B 端直接为 0,A 端可能还需要暂存一下:
新添加一条时间轴
为了营造忽闪忽闪的感觉,可以在时间轴上多点几个点,设置起伏,最后选中所有的点平滑一下曲线
进行连线
亮度变化
暂存亮度:
添加时间轴
连线:
3.5 添加主角——钢球
3.5.1 创建蓝图类
创建蓝图类,选择父类为 Pawn
添加静态网格组件,指定为球体
设置钢球的材质
如何将蓝图视口中的导航小球去掉:将 Player 拖到 DefaultSceneRoot 处
为钢球添加相机跟随:
1)添加组件:SpringArm,即类似于相机杆,将其移动到球体中心
设置
2)添加组件:Camera,一般添加后会自动吸附到 SpringArm 上,如果没有吸附的话,可以调整坐标都为 0,即之后会自动调整
3)调整视角
4)调整摄像机距离钢球的长度
5)设置 Spring Arm 相对于世界 60 度,而不是相对于小球 60 度,防止之后视角随小球滚动而滚动
6)关闭相机的碰撞:
3.5.2 使 Player Controller 持有本地 Player
在 Play 模式下如何退出?
1)按 esc
2)按 shift+F1 跳出 ViewPoint 的控制,点击 Possess or Eject Player 回到可以编辑的模式
如何使 Player Controller 持有本地 Player
1)直接将 Auto Possess Player 设置为 Player 0 (不推荐这种方式)
2)利用 Player Start 设置玩家起始位置,然后在游戏运行时虚幻引擎会在 Player Start 的位置自动生成一个指定的 Pawn,然后让 Player Controller 去持有 Player
放置一个 Player Start,手动调整使其贴地,也可以放在空中,然后按下 fn+end
自定义 GameMode:创建一个蓝图类,设定父类为 Game Mode Base
将 Default Pawn Class 设置为 BP_Player
Project Settings -> Maps & Modes ->Deafault GameMode 设置为自己的 BP_GameMode
3.5.3 按键映射与输入控制
控制玩家移动:设置 BP_Player 的事件
1)将默认的三个事件全部删除
2)两种接收键盘输入的方式:
右键点击输入搜索结点:
绑定按下的函数:
这样的弊端:按下 w 只调用一次函数,并不会一直执行,而是按一次显示一次,所以这种方法不推荐
Project Settings -> Input -> Axis Mapping -> +
添加键盘映射:
在蓝图内添加轴映射的结点
3.5.4 使小球转动起来
使小球有一个物理性质
获得小球的数据体:将 Components 中的 Player 拖出来,选择 Get Player
给小球添加力矩
右键 Torque 选择 Split Struct Pin 将 x y z 值分开
施加 y 方向的力矩,注意勾选 Accel Change 忽略小球本身的质量,否则加强系数需要设置得非常大
施加 x 方向的力矩
给小球施加摩擦力
3.5.5 设计失败触发器
创建蓝图类
添加碰撞盒子组件
将碰撞盒子放置在关卡中间,调整缩放
在 BP_FailTrigger 内添加 ActorBeginOverlap 事件
添加小球失败的逻辑:当小球掉下接触到碰撞盒子,获得当前关卡的名字,重新打开一次当前关卡
添加一些容错判断:只有当掉落物体为 Player 的时候才能出发重新打开关卡
注意:按住 B + 鼠标左键点击一下就可以放置一个分支
3.5.6 给小球失败添加一个淡入淡出的效果
当小球掉落时,添加一个从 0-1 的渐变过程
在 BP_FailTrigger 添加相机的淡入淡出功能,设置保持黑暗 1 秒,注意必须设置 Delay 才会延时
当游戏开始时,添加一个从 1-0 的渐变过程
在 BP_Player 中添加 BeginPlay 事件,添加摄像机的淡入淡出函数
3.5.7 按 ESC 游戏退出
3.6 可发射的子弹
3.6.1 创建
创建子弹的蓝图类
添加组件:
设置网格体的形态和材质
添加 Projectile 组件
设置 Projectile 的参数:投掷速度和重力影响
3.6.2 添加粒子效果
添加粒子组件
设置粒子效果:
缩小子弹使粒子效果更明显:
双击 P_Sparks 进入粒子系统修改粒子效果:
通过勾选或直接右键 Emitter->Delte Emitter 将电火花删除
3.6.3 子弹击中其他物体时的操作
添加球形碰撞,使用球形碰撞代替根部的小球
调整球形碰撞的范围
调整球形碰撞的 Collision Presets 为 BlockAll
添加子弹击中事件
3.6.4 创建炮台和炮管
直接导入炮台和炮管的模型:
选择不创建材质
同时选中炮台和炮管放置到关卡中:
将炮管设置为可移动的
将炮管依附在炮台底下:
创建蓝图类:
设置炮台和炮管的材质:
控制内容浏览器中预览图的大小:按住 ctrl + 鼠标滚动
编辑预览图中的物体:View Options -> 勾选 Thumbnail Edit Mode,然后像操作视口一样操作预览图中的物体
3.6.5 使炮台生成可循环发射的子弹
添加 Arrow 组件:
箭头的基部作为炮弹生成的地方,箭头的方向即为炮弹发射的方向
添加 SpawnActor BP Projectile 函数,选择 BP_Projectile 作为蓝图类
连线,使循环发射子弹
双击连线可以重定位结点
3.6.6 创建开火动画
创建时间轴设置炮管在 Y 轴的位置
连线:
注意:
- 动画从开始播放:Play from Start
- 播放完成后再发射子弹
问题:延时 1 秒 + 动画 0.3 秒时间变长了
3.6.7 时间轴的事件轨道与开火特效
达成效果:先生成子弹再播放动画
重新连线
达成效果:解决延时 1 秒 + 动画 0.3 秒时间变长了的问题
添加 Event Track
使时间轴刚开始时生成一个执行的针脚,用来后续的连线
重新连线,此时会在动画刚开始播放时就进入发射子弹的逻辑,就不用包含动画播放的 0.3 秒
开火特效
添加 Particle System
复制炮弹生成的位置并粘贴
指定爆炸效果:
对爆炸效果进行缩放
关闭自动激发
连线:
3.6.8 子弹击中小球造成伤害
给 BP_Projectile 添加伤害函数:
将 BP_FailTrigger 中的淡入淡出效果拷贝粘贴过来,给 BP_Player 添加伤害事件,即当小球被打到之后重新开始关卡
4. 蓝图整理
4.1 子图与函数
4.1.1 子图
将相同操作收缩为一个结点,相当于创建了一个文件夹放入这些类似操作
选中类似的操作:
右键选择 Collapse Nodes
注意:该方法不能实现代码复用,不常用
4.1.2 函数
选中类似的操作:
右键选择 Collapse to Function
继续收缩
继续收缩
继续收缩
4.2 宏与宏库
4.2.1 宏
函数缺点:具有多个执行流输出的不适合收缩为函数
选中类似操作收缩为宏:
在此处可以调整宏里面结点针脚的顺序和名称
为输出流增加执行针脚:
收缩后如下所示:
4.2.2 蓝图宏库
蓝图宏库(Blueprint Macro Library) 是一个容器,它包含一组 宏 或自包含的图表,这些图表可以 作为节点放置在其他蓝图中。它们可以节省时间,因为它们可以存储常用的节点序列, 包括执行和数据传输所需的输入和输出。
宏在引用它们的所有图表之间共享,但是它们会自动扩展到图表中, 就像它们在编译期间是一个折叠节点那样。这意味着蓝图宏库不需要编译。但是, 对宏的更改仅反映在重新编译包含这些图表的蓝图时 引用该宏的图表中。
创建蓝图宏库:
1)创建文件夹:Library
2)添加蓝图宏库
将刚才创建的宏中的结点赋值拷贝过来(除了输入输出结点都要复制)
连线,设置输入输出结点
使用方法:可以直接搜索该宏
4.2.3 蓝图宏库的使用
将重入关卡的结点拷贝到蓝图宏库中保存为新的宏
将所有涉及重入关卡的地方使用该宏替换
将摄像头淡入的操作封装为宏
进行替换
使手动可以设置 Duration 的值
4.3 暴露蓝图变量
将项目中意义不明或者模糊处替换为变量,取一个合适的变量名
暴露变量
将 Default 的标签改掉:
指定变量的下限
继续设置变量
4.4 蓝图注释
选中想要添加注释的部分
按 C 键
4.5 蓝图函数的纯净与非纯净
纯净函数:绿色结点,不改变游戏的状态,如:单纯的计算某个东西的值
非纯净函数:蓝色结点,改变游戏的状态
收缩纯净函数:
将宏改造为纯净宏:
将投射改为纯净投射:
删除输入和输出结点的执行线:
全局查找使用该宏的地方,修改连线
5. 追光灯
5.1 创建追光灯
创建蓝图类:BP_SpotlightFollow
添加碰撞盒子组件
在桥的水晶处添加追光灯,设置碰撞盒子的大小
调整 SpotLight 的参数
将本实例的变动覆盖到蓝图类中
5.2 使追光灯持续照亮主角
Interp To 函数:插值,在两个数之间补充一些数,让过渡变得更自然
常见的插值函数:
FInterp To、FInterp To Constant:浮点数(Float)插值。F:Float,浮点数
RInterp To、RInterp To Constant:角度(Rotation)插值。
RInterp To | Unreal Engine Documentation
输入参数:
参数 值 CurrentRotator Actual rotation TargetRotator Target rotation Delta TimeFloat Time since last tick Interp SpeedFloat Interpolation speed, if the speed given is 0, then jump to the target.
InterpSpeed = 1 / Time = 2 Time = 0.5输出值:
值 Return ValueRotator New interpolated position Vector To、Vector To Constant:向量插值
带有 “Constant” 的,表示匀速插值(线性插值);没带有 Constant 的,表示缓冲插值(非线性插值),到达终点值的时候放慢,有一个更平滑的缓冲,给人的感觉更柔和一些。
Find Look at Rotation:找到目标对象相对于当前对象的旋转角度
记录玩家的触发状态:
每帧设置聚光灯的朝向
获得聚光灯朝向的目标旋转角度:
整体结点连接如下:
6. 过关区域
6.1 创建过关区域
在编辑模式下选中地板的侧面,往后缩 500
利用挤出功能拉回原来的长度
将拉出的面抬高做成一个台子
材质赋值:
添加一个管道
调整管道靠在台子上
选择所有面附加材质
调整天光和平行光
6.2 设计胜利触发器
UE4 中GameInstance、GameMode、GameState、PlayerState和PlayerController的关系:
名称 | 生命周期 | 存在的位置(服务器或客户端) | 服务端和客户端是否能同步 | 使用方式 |
---|---|---|---|---|
GameInstance | 引擎启动时创建,引擎关闭后销毁或更换 | 都存在 | 不能,服务器和客户端时独立的,彼此不通信 | 在多关卡中来回切换,需要一个公共的变量来进行记录所需要的数据,进行数据交互。GameInstance类就充当这个全局类来记录全局数据。 可以用来保存特定类型的持久数据,如用户账户信息 |
GameMode | 关卡加载时生成,销毁时一起销毁 | 仅在服务器 | 无此说法 | 存储客户端不需要明确知道的游戏信息,如出现的玩家和观众数量,以及允许的玩家和观众最大数量。 玩家进入游戏的方式,可包含选择生成地点和其他生成/重生成行为的规则。 游戏是否可以暂停,以及如何处理游戏暂停。 游戏是否可以暂停,以及如何处理游戏暂停。 关卡之间的过渡,包括游戏是否以动画模式开场。 |
GameState | 关卡加载时生成,销毁时一起销毁 | 都存在 | 可以,服务器可以在GameState上使用复制变量让所有客户端保持最新的游戏数据 | 与所有玩家和旁观者有关、而不是与任何一个特定玩家有关的信息,如 游戏已运行的时间(包括本地玩家加入前的运行时间)。 每个个体玩家加入游戏的时间和玩家的当前状态。 |
PlayerState | 关卡加载时生成,销毁时一起销毁 | 都存在 | 可以,服务器可以在GameState上使用复制变量让所有客户端保持最新的游戏数据 | 与一个特定玩家有关的信息,如玩家的分数 |
PlayerController | 关卡加载时生成,销毁时一起销毁 | 服务器上每个玩家都有PlayerController,但本地客户端只有本地玩家的PlayerController | 客户端和服务器之间传达信息,而不必将该信息复制到其他客户端 |
创建蓝图类 BP_Wintrigger
添加碰撞盒子
将该蓝图类的实例拖入场景中,缩放其大小
6.3 储存水晶总数
创建 BP_GameInstance ,可以储存一些全局变量
获得 BP_GameInstance
获得 GameInstance (父类),将其投射为 BP_GameInstance
将此操作封装为宏:
保存水晶总数:
6.4 设计水晶自增并编写胜利条件
水晶自增函数:
添加水晶自增的逻辑:当水晶被玩家触碰时,实现动画效果后使水晶数量+1,之后被销毁
编写胜利条件:
Project Settings -> Maps & Modes -> Game Instance -> BP_GameInstance
7. 用户界面(UI)
7.1 创建 UI
创建 UI:User Interface -> Widget Blueprint
设计 UI 界面:
在 BP_Player 中创建并显示界面
7.2 显示关卡名和水晶
当 UI 被创建后,获得当前的关卡名,保存在变量中
绑定变量
新建绑定函数:
获得收集的水晶和总的水晶数量
注意:在 UI 函数中不能调用宏库中的宏
可以将其封装为本地的宏:
7.3 显示所用时间与跨关卡计时
在 BP_GameInstance 中添加变量:GameTime
在进入关卡绘制 UI 界面后,获得全局的累加游戏时间,将累加的游戏时间作为显示的 LevelTime
累加加上每帧的时间
为 UI 中的显示时间创建绑定的函数,将 LevelTime 从浮点型转换为 TEXT 型显示出来
在 BP_WinTrigger 中获取 UI 中计算的时间值,将总的时间值赋给 BP_GameInstance.GameTime
将此段逻辑收缩为函数:
7.4 游戏胜利后的处理
7.4.1 添加获胜后的提示
在 BP_UI 中拖入胜利提示框,将 Visibility 处选为 Hidden 即可在游戏运行中隐藏该字样
在 BP_GameInstance 中添加变量 IsWin 记录游戏状态
在 BP_Wintrigger 中设置游戏获胜状态
在 BP_UI 中为 "You Win!" 创建绑定函数
7.4.2 获胜后停止计时并取消对小球的控制
在 BP_UI 中编写逻辑:游戏获胜时停止游戏计时,并取消玩家的物理效果
在 BP_Player 中添加逻辑,玩家获胜后将不能再进行移动
7.5 显示未收集完时的 UI 闪动效果
在 BP_UI 中绘制文字框
设置 Visibility
添加动画
添加轨道
添加操作
拖动右侧的滑动条设置每隔 0.25 秒变换一次 Visibility
在 BP_UI 中创建函数播放动画
在 WinTrigger 中调用该函数
在关卡刚开始时,重置每个关卡的手机水晶数
8. 创建关卡 2 并进行设计
8.1 创建与设计
若要在关卡 1 的基础上进行改动,选择 File -> Save Current As...
保存即可
设计关卡 2
8.2 关卡蓝图
关卡蓝图:每个关卡有且仅有一个
打开关卡蓝图
改变关卡 2 的相机视角:
1)在 BP_Player 中添加一个函数 AdjustCamera
2)在关卡 2 的蓝图中调用 BP_Player.AdjustCamera 调整悬臂的长度
3)调整后视角如下
8.3 关卡切换
在胜利触发器中创建变量 LevelNames 储存
数组赋值:注意编译后才能进行赋值
获取当前关卡的索引并与最后一个关卡的索引进行比较:
收缩为纯函数:
收缩为纯函数之后没有多余针脚,所以需要进行设置:
将其中用来查找当前关卡索引的逻辑收缩为函数:
将 GetLevelIndex 设为纯函数:
编写逻辑:加载下一个关卡
如果不是最后一关,则自动加载下一个关卡
9. 游戏音效
创建文件夹:
将音频文件导入
按 Ctrl + Shift + s 或者点击 Save All 保存
设置背景音乐:
1)直接双击点开 Cave1 和 Cave2 进行设置:勾选 Looping 循环播放
2)在关卡蓝图中设置播放背景音乐:
音效设置:创建 Cue
1)创建声音衰减模板
2)使 Collection_Cue 和 Fire_Cue 使用刚刚创建的声音衰减模板
3)设置声音衰减模板
设置播放声音:
1)水晶:粒子特效
2)加农炮:开火
10. 游戏发布
File -> Package Project
发布的配置:
- Development :开发者模式发布
- Shipping:直接发布
虚幻引擎 4 学习笔记 [1] :蓝图编程 Demo的更多相关文章
- 孙鑫VC学习笔记:多线程编程
孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified ...
- Hadoop学习笔记(7) ——高级编程
Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...
- WCF学习笔记之事务编程
WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- 开源规则引擎 Drools 学习笔记 之 -- 1 cannot be cast to org.drools.compiler.kie.builder.impl.InternalKieModule
直接进入正题 我们在使用开源规则引擎 Drools 的时候, 启动的时候可能会抛出如下异常: Caused by: java.lang.ClassCastException: cn.com.cheng ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- Python学习笔记6 函数式编程_20170619
廖雪峰python3学习笔记: # 高阶函数 将函数作为参数传入,这样的函数就是高阶函数(有点像C++的函数指针) def add(x, y): return x+y def mins(x, y): ...
- [原创]java WEB学习笔记30:Cookie Demo 之显示最近浏览的记录
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记29:Cookie Demo 之自动登录
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 《JavaScript高级程序设计》学习笔记(5)——面向对象编程
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第六章内容. 1.面向对象(Object ...
随机推荐
- 手写签名-微信小程序
index.wxml <canvas type="2d" id="canvas" bindtouchmove="move" bindt ...
- xv6book阅读 chapter1
xv6book主要研究了xv6如何实现它的类Unix接口,但是其思想和概念不仅仅适用于Unix.任何操作系统都必须将进程多路复用到底层硬件上,相互隔离进程,并提供受控制的进程间通信机制. 1 了解xv ...
- PySpark 入门:通过JDBC连接数据库(DataFrame)
这里以关系数据库MySQL为例.首先,本博客教程(Ubuntu 20.04 安装MySQL 8.X),在Linux系统中安装好MySQL数据库.这里假设你已经成功安装了MySQL数据库.下面我们要新建 ...
- 2.5D 组态案例合集 | 智慧园区、数据中心、SMT 生产线、汽车制造
在阅读文章之前,大家可以思考下 2.5D 设计属于哪种界定? 2.5D 是通过二维的元素来呈现出三维的效果.其实在国外并没有 2.5D 这样的称呼,标准说法是 Isometric 风格,翻译过来就是等 ...
- 十一、docker的容器互联
系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...
- VueTreeselect
https://www.vue-treeselect.cn/ 官网简介
- 解决pyintstaller 打包后程序报错 api-ms-win-core-path-l1-1-0.dll文件
一.错误现象 1.api-ms-win-core-path-l1-1-0.dll错误日志如下: 2.重新打包查看有如下的警告信息: 二.解决方案: 1.网上下载:api-ms-win-core-pat ...
- 项目使用 GlobalExceptionHandler 自定义异常 一
博主原创,未经允许不得转载: 每个项目都有自己的一套异常类的定义.总结一下,项目中使用自定义异常比较好的封装. 1.定义项目中统一使用的异常类,用于捕获项目中的自定义异常等: package com. ...
- 【荐】开源Winform控件库:花木兰控件库
微信好友推荐,挺好看的Winfrom控件库,下面来看看. 介绍 基于 C#(语言) 4.0 . VS2019 . Net Framework 4.0(不包括Net Framework 4.0 Clie ...
- 问题--QT只有全屏的时候才能使用
1.问题 安装的版本是3.8.0,只有在全屏的时候在编辑界面不会卡,其余情况会直接卡死在这. 2.解决方式 安装了较低版本的3.14.2,解决了上述问题