自由学习记录(32)
文件里找到切换颜色空间
fgui中的 颜色空间是一种总体使用前的设定
颜色空间,和半透明混合产生的效果有差异,这种问题一般可以产生联系
动效就是在fgui里可以编辑好,然后在unity中也准备了对应的调用手段,可以详细的使用每一个具体的数据,自定义修改
可以操控单独的一个帧的相关数据
stop可以额外设置,到底要怎么停下,比如要不要把当前播放位置直接设置到complete,或者要不要现在就调用结束的方法
得到动效,给动效安排
控制器配合动效使用
缓动函数简介
Back (回弹)
回弹缓动函数让动画在结束时稍微"回弹",即在结束前稍微倒回一点,然后才完成动画。适用于弹跳效果或非常强调动画结束时的张力。
Bounce (弹跳)
弹跳缓动函数模拟物体在地面上的弹跳。物体会在接近目标时弹回,逐渐减少弹跳的幅度。常用于模拟物理上类似跳跃的效果。
Circ (圆形)
圆形缓动函数模拟物体沿着圆形轨迹的运动。它的运动变化是平滑的,适合用于一些曲线运动的效果。
Cubic (三次方)
三次方缓动函数改变速率的变化更为平缓,相比于线性动画,它提供了一个平滑的加速和减速效果。
Elastic (弹性)
弹性缓动函数模拟弹簧或橡胶带的物理行为,动画会在到达目标之前来回波动,最后才会稳定下来。适合用来表现弹性运动。
Expo (指数)
指数缓动函数的变化速率比较剧烈,在开始时非常慢,然后快速加速,通常用于需要快速开始的动画。
Linear (线性)
线性缓动函数是匀速运动,不会加速或减速,适用于需要恒定速度的场景。
Quad (二次方)
二次方缓动函数变化较为平滑,但与三次方相比,它的速度变化更为缓和,适合用于需要较平滑的变化效果。
Quart (四次方)
四次方缓动函数与三次方类似,但变化更为剧烈,适用于一些需要快速加速的场景。
Quint (五次方)
五次方缓动函数通常具有较为强烈的加速效果,适用于结束时快速完成的动画。
Sine (正弦)
正弦缓动函数使动画变化看起来更加自然,速度变化呈现周期性的波动,通常用于模拟波动效果。
Custom (自定义)
自定义缓动函数让你创建特定的缓动曲线,完全根据需要来控制动画的变化。
是当前帧到下一帧之间的tween,
是关于结束的判定的,如果动效移出舞台时,是当前立刻停下删去还是等彻底结束位置来了再删去
右键这个组件,就可以改变一些属性
动效是以组件为单位创建的,附着于组件
在资源文件夹那边右键创建新材质
附着上去背景还是这个3D曲面,所以要改材质
硬性要求
曲面UI的设置
本不知名字,抓住GButton之后就可以赋值名字了
比如可以
得到按钮的名字
在unity里的使用要创建单独的菜单对象menu,在这个实例对象上添加items
在unity里使用的话,要先设置UIConfig的系统的弹出菜单,对应fgui里的组件地址,这是定下外形的框架
创建之后会变成一个新的组件在fgui里
要设置主菜单要在fgui软件里面设置图片,都是
menu 的显示要自己调用,对象是存在了,但只是数据上的对象已经存在
弹出功能,fgui也有内置,也算是对象类型
不一定要把面板都做成窗口
锁定窗口,一开始就设置好,可以在锁定后添加提示,防止不知道被锁定
模态窗口,就是窗口以外的区域都不可以点击
分支,组件是引用会切换,组件本源不一样,在分支文件夹里是无效的
一般是等比缩放
右键替换成元件
拖动中是在拖动就一直执行,停下的话也会停下
事件捕获,类似于事件监听传递的反向
using FairyGUI;
using UnityEngine;
public class EventContextExample : MonoBehaviour
{
GButton button; // 定义一个按钮
void Start()
{
// 初始化并加载FairyGUI资源
UIPackage.AddPackage("UI/Example"); // 根据你的资源路径调整
GComponent mainUI = UIPackage.CreateObject("Example", "MainUI").asCom;
GRoot.inst.AddChild(mainUI);
button = mainUI.GetChild("btnTest").asButton; // 获取按钮
// 监听按钮的点击事件
button.onClick.Add(OnButtonClick);
}
// 按钮点击事件处理函数
void OnButtonClick(EventContext context)
{
// 获取触发事件的相关数据
InputEvent inputEvent = context.inputEvent;
// 打印触摸点的位置(转换为本地坐标)
Vector2 localPos = button.GlobalToLocal(new Vector2(inputEvent.x, inputEvent.y));
Debug.Log("Button clicked at position: " + localPos);
// 打印键盘按键,如果是键盘事件
if (inputEvent.keyCode != 0)
{
Debug.Log("Key pressed: " + inputEvent.keyCode);
}
// 打印鼠标滚轮的移动值
if (inputEvent.mouseWheelDelta != 0)
{
Debug.Log("Mouse wheel delta: " + inputEvent.mouseWheelDelta);
}
// 获取触摸 ID
if (inputEvent.touchId != -1)
{
Debug.Log("Touch ID: " + inputEvent.touchId);
}
// 检查是否为双击事件
if (context.isDoubleClick)
{
Debug.Log("This was a double click!");
}
// 如果需要停止事件传播,可以调用
// context.StopPropagation();
}
}
代码解释
-
初始化 UI:
- 使用
UIPackage.AddPackage
加载 UI 包。 - 获取按钮对象
button
,并为其添加点击事件处理器。
- 使用
-
监听事件并提取数据:
button.onClick.Add(OnButtonClick)
:为按钮的点击事件添加监听器,并传入OnButtonClick
作为回调。- 在
OnButtonClick
方法中,我们通过context
参数来获取有关事件的详细信息。
-
从
EventContext
获取数据:inputEvent.x
和inputEvent.y
:获取触摸或鼠标点击的全局坐标。button.GlobalToLocal()
:将全局坐标转换为按钮本地坐标,以便更准确地处理点击位置。inputEvent.keyCode
:如果是键盘事件,输出按下的键。inputEvent.mouseWheelDelta
:获取鼠标滚轮的增量值。inputEvent.touchId
:获取当前触摸的 ID,用于多点触控场景。context.isDoubleClick
:检查是否为双击事件。
-
停止事件传播:
- 通过
context.StopPropagation()
方法,你可以阻止事件继续向其他元素传播,这对于一些特殊的交互设计很有用。
- 通过
a breakdown of the key parameters described:
Parameters in EventContext
:
sender
: The object that triggered the event.initiator
: The object that initiated the event, typically a DisplayObject in FairyGUI.type
: The type of the event (e.g., mouse click, touch, keyboard event).inputEvent
: If the event is a keyboard, touch, or mouse event,inputEvent
allows access to the specific data related to that event (such as key code, touch ID, or mouse coordinates).x
andy
: The position of the touch or mouse pointer in the global coordinate system (needs conversion to local coordinates viaGlobalToLocal
).keyCode
: The key code if it's a keyboard event.mouseWheelDelta
: The value of the mouse wheel movement.touchId
: The ID of the touch point associated with the event.isDoubleClick
: A boolean indicating if the event is a double click.
data
: The event's data. Depending on the type of event, this can have different meanings, such as the value of the key pressed, touch position, etc.StopPropagation
: A method used to stop the event from propagating further (i.e., prevent other listeners from receiving it).CaptureTouch
: A method that can be used during theTouchBegin
phase to allow touch events to continue to be detected even if the pointer moves outside of the target object.UncaptureTouch
: A method used to cancel the capture and stop the propagation of touch events outside the target object.
这样就只有按钮按下和面板按下,因为在stoppropagation这里停止了向上的事件监听传递
事件传递的打断
类型为 InputEvent
。
关于键盘输入的检测
LongPressGesture
、SwipeGesture
、PinchGesture
和 RotationGesture
都是绑定到特定的 UI 元件 panel1.m_btnTest
上的。这意味着只有在 panel1.m_btnTest
按钮区域内触发的相应手势才会被检测到。
手势识别并不总是针对整个屏幕,而是仅在你指定的 UI 元件内进行。例如,如果你想让一个按钮响应长按手势,而其他区域不响应,你就将手势绑定到这个按钮上。
这样的问题,首先是图片的物理屏幕坐标,unity的左下角起点坐标,FGUI的左上角起点坐标,FGUI在自身内部的无缩放逻辑坐标
要生成一张图片跟随鼠标移动用fgui,先有这个图片组件,然后写一个update一直更新它的位置,也就是物理屏幕坐标
调整组件的位置是用gComponent里带的改位置的方法...剩下的就是把定义的逻辑差异解决就可以
是属于元件的方法
localtoroot可以把屏幕上的物理坐标,转成FGUI里的逻辑坐标(不含缩放影响的,在FGUI中最原始的操作的坐标)
,,,这么胆小有必要吗,本来就没什么要担忧的点,,没必要了吧
<<<,<<<<话不多说,开始
唉,1.12了,这几天很多事,也是挺心累的吧
想着留一两天给自己所谓的“放松”,但我现在的视角,所谓的放松好像已经有点脱模了,可能我认为我现在就是放松 的,而强行要我再放松一点,这让我觉得只是在犯傻
也是挺不可思议的吧,我在刚刚进入大学的时候,比起现在真的是什么都不懂(谁晓得之后我又会不会也觉得现在幼稚),所以那个时候也是真的迷惑了,产生了一种原初的迷惑:为什么我会到现在这个地步?是我真的还不够努力吗?是我还不够乖吗?不够听话吗?
现在看来,如果要细节的回答这个问题,首先,这个问题对当时的我是心里上真正直接产生的吗,还是看了别人的经历说出了这一段文字 我发现自己也差不多,于是产生的概念引用呢?
如果非要用各种词语的概念来解释,我将自己定义概念,表达我的体验,比如吃苦和努力这两个词,放在别人决定的卷子上,中间就是可以划等号的,而如果是我,我认为“努力”这个词已经被用臭了,什么懒人都可以轻松引用这个概念,“看那个家伙,真的好努力啊,可惜就是没有回报!”,所以我认为这个词不能和吃苦划等号,“没有苦难,就没有成长”,比起前一句,我对这一句的亲身体验更深刻,所以....要细节的扯下去,那估计也会没完没了了,还会扯到很多复杂的层面,比如“那你怎么解释,有些人吃了一辈子苦,却没有回报?”,回报对个人的定义不同,首先要怀疑的是物理事实和精神事实是否真正的达到合理的共通逻辑...
即使是最简单的问题“为什么今天不开心,不想学”,也不存在任何人可以告诉你百分百的答案。。。自己看的都嫌复杂,不想解释,最后得到的结果也会是,这个人得到了自己的逻辑自洽,选择放心的继续相信自己的观点,或者吸收外部的逻辑,然后自洽自身的逻辑
<<<<<<,<<<<
那个时候我就下定决心,我绝对不要被视为奴,凭什么我会被视为奴,就凭你们的一张试卷吗,就凭他们拿分拿的高一点吗,让我承认那样的人在我之上,我不可能
于是我想尽办法让自己可以看到更高的视角,即要先找到“站得高”的观点,又在一堆假的“站得高”里只凭自己挑出真的站得高的观点,
连我自己都不可思议,才这么短的时间,我现在的视角居然扩大了这么多,想到那个刚进大学,心里都是不甘和野心的我,真想抱抱他,鼓励一下他,孩子啊,凭着这份决心,你会值得更好的生活的
苦难都是人定的,放松这种 东西,也是为了欺骗自己,让自己不相信某种事实的手段,人的本身是一种平衡,而当激动的时候,就会想办法让自己平和,
how i wish you only knew
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,
之间都要用空格隔开
-p后面直接接密码,不隐藏
正常来说写到-p为止,按回车
之后输入密码就会变成星号
不加;就不算结束
刚登录默认为空,只要create之后不会自动切换,没use就是空
AUTO_INCREMENT
手动设置跳过了某些值,后续的自动生成会从当前的最大值递增
primary key 是规范的,并不是说必须,但添加了一定是更加安全的
decimal(10,2)总共最多十位,总共最多两位小数,需要同时满足
命令行里输入mysql语句,如果输错了,只能ctrl+C,全部重新输入一遍
这一点有时候也比较麻烦的,也算是为什么有一些图形化界面的软件写sql语句
如果 households
表中某一行被删除或更新,外键约束可以控制当前表中相关行的行为(如级联删除或禁止删除)。
外键约束的报错
外键约束比主键就强硬多了,规范更强
如何避免外键约束错误:
-
确保引用的父表记录存在:
- 插入或更新数据前,先检查外键字段的值是否在父表中存在:
SELECT * FROM households WHERE id = 99;
- 插入或更新数据前,先检查外键字段的值是否在父表中存在:
-
删除父表记录前清理子表数据:
- 如果需要删除父表的记录,可以先删除子表中相关的记录:
DELETE FROM members WHERE household_id = 1;
DELETE FROM households WHERE id = 1;
- 如果需要删除父表的记录,可以先删除子表中相关的记录:
-
使用级联操作:
定义外键时添加ON DELETE CASCADE
或ON UPDATE CASCADE
,让 MySQL 自动处理关联数据:-
FOREIGN KEY (household_id) REFERENCES households(id)
ON DELETE CASCADE ON UPDATE CASCADE;
-
-
确保引用的列是主键或唯一键:
- 定义外键时,被引用的列必须是父表的主键或唯一键。
一个Java项目文件夹里装的东西:
在 IntelliJ IDEA 中,当你运行或编译项目时,IDE 会自动将 .java
文件编译成 .class
文件,并将其放入指定的输出目录(通常是 out
或 target
文件夹中)。
它们是同一个程序的不同阶段产物,IDE 会自动管理编译流程。
分src和out两个文件夹,是输出目录和源码分离是业界标准做法,为了清晰地分离 源码 和 编译输出,便于管理和防止混淆。
.idea
文件夹是 IntelliJ IDEA 项目的 配置文件夹,存储与项目相关的配置信息。一般情况下,你不需要手动修改这些文件。
自动生成的初始Main的.class文件并没有什么特别,仅仅是名字为Main而已
写了多个 .class
文件且每个文件都有 main
方法,这不会造成冲突
每个 .class
文件可以包含自己的 main
方法。它们互不干扰。
Java 运行环境(JVM)需要你明确地指定运行哪个类。