excel出勤表格由以下六个步骤制作。
1、首先打开excel表格。
2、然后对d1单元格设置月份的数据有效性。
3、然后在日期行c3单元格输入如下函数=IF(DATE($A$1,$D$1-1,25+COLUMN(A$1))>DATE($A$1,$D$1,25),"",DATE($A$1,$D$1-1,25+COLUMN(A$1))),然后向右拉选复制。
4、设置日期格式只显示日,自定义为d。
5、在星期对应的行c2单元格输入=TEXT(C3,"aaa"),并下右拉选复制。
6、最后调整格式即可。
excel,是一款免费的办公软件。MicrosoftExcel是Microsoft为使用Windows和AppleMacintosh *** 作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。在1993年,作为MicrosoftOffice的组件发布了50版之后,Excel就开始成为所适用 *** 作平台上的电子制表软件的霸主。
开发自定义控件的步骤:
1、了解View的工作原理
2、 编写继承自View的子类
3、 为自定义View类增加属性
4、 绘制控件
5、 响应用户消息
6 、自定义回调函数
一、View结构原理
Android系统的视图结构的设计也采用了组合模式,即View作为所有图形的基类,Viewgroup对View继承扩展为视图容器类。
View定义了绘图的基本 *** 作
基本 *** 作由三个函数完成:measure()、layout()、draw(),其内部又分别包含了onMeasure()、onLayout()、onDraw()三个子方法。具体 *** 作如下:
1、measure *** 作
measure *** 作主要用于计算视图的大小,即视图的宽度和长度。在view中定义为final类型,要求子类不能修改。measure()函数中又会调用下面的函数:
(1)onMeasure(),视图大小的将在这里最终确定,也就是说measure只是对onMeasure的一个包装,子类可以覆写onMeasure()方法实现自己的计算视图大小的方式,并通过setMeasuredDimension(width, height)保存计算结果。
2、layout *** 作
layout *** 作用于设置视图在屏幕中显示的位置。在view中定义为final类型,要求子类不能修改。layout()函数中有两个基本 *** 作:
(1)setFrame(l,t,r,b),l,t,r,b即子视图在父视图中的具体位置,该函数用于将这些参数保存起来;
(2)onLayout(),在View中这个函数什么都不会做,提供该函数主要是为viewGroup类型布局子视图用的;
3、draw *** 作
draw *** 作利用前两部得到的参数,将视图显示在屏幕上,到这里也就完成了整个的视图绘制工作。子类也不应该修改该方法,因为其内部定义了绘图的基本 *** 作:
(1)绘制背景;
(2)如果要视图显示渐变框,这里会做一些准备工作;
(3)绘制视图本身,即调用onDraw()函数。在view中onDraw()是个空函数,也就是说具体的视图都要覆写该函数来实现自己的显示(比如TextView在这里实现了绘制文字的过程)。而对于ViewGroup则不需要实现该函数,因为作为容器是“没有内容“的,其包含了多个子view,而子View已经实现了自己的绘制方法,因此只需要告诉子view绘制自己就可以了,也就是下面的dispatchDraw()方法;
(4)绘制子视图,即dispatchDraw()函数。在view中这是个空函数,具体的视图不需要实现该方法,它是专门为容器类准备的,也就是容器类必须实现该方法;
(5)如果需要(应用程序调用了setVerticalFadingEdge或者setHorizontalFadingEdge),开始绘制渐变框;
(6)绘制滚动条;
从上面可以看出自定义View需要最少覆写onMeasure()和onDraw()两个方法。
二、View类的构造方法
创建自定义控件的3种主要实现方式:
1)继承已有的控件来实现自定义控件: 主要是当要实现的控件和已有的控件在很多方面比较类似, 通过对已有控件的扩展来满足要求。
2)通过继承一个布局文件实现自定义控件,一般来说做组合控件时可以通过这个方式来实现。
注意此时不用onDraw方法,在构造广告中通过inflater加载自定义控件的布局文件,再addView(view),自定义控件的图形界面就加载进来了。
3)通过继承view类来实现自定义控件,使用GDI绘制出组件界面,一般无法通过上述两种方式来实现时用该方式。
三、自定义View增加属性的两种方法:
1)在View类中定义。通过构造函数中引入的AttributeSet 去查找XML布局的属性名称,然后找到它对应引用的资源ID去找值。
案例:实现一个带文字的(、文字是onDraw方法重绘实现)
public class MyView extends View {
private String mtext;
private int msrc;
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
int resourceId = 0;
int textId = attrsgetAttributeResourceValue(null, "Text",0);
int srcId = attrsgetAttributeResourceValue(null, "Src", 0);
mtext = contextgetResources()getText(textId)toString();
msrc = srcId;
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paintsetColor(ColorRED);
InputStream is = getResources()openRawResource(msrc);
Bitmap mBitmap = BitmapFactorydecodeStream(is);
int bh = mBitmapgetHeight();
int bw = mBitmapgetWidth();
canvasdrawBitmap(mBitmap, 0,0, paint);
//canvasdrawCircle(40, 90, 15, paint);
canvasdrawText(mtext, bw/2, 30, paint);
}
}
布局文件:
<xml version="10" encoding="utf-8">
<LinearLayout xmlns:android=">
一、EasyTouch插件介绍
EasyTouch43版本开始已经支持UGUI,所以unity版本低于46的话是将不能使用这个版本EasyTouch,目前EasyTouch43亲测可以结合unity46~53版本使用。
以下为43版本插件包目录结构:
可以看到该版本中EasyTouch分为两大模块
第一个模块EasyTouch是一些基本的响应事件,例如点击屏幕,点击场景中的物体,由于加入了ETT(Easy Touch Trigger)使用方式和UGUI的事件系统类似,非常方便。
第二个模块EasyTouchControl则是一些插件中预先准备好的控制器集合系统并且结合了unity自带的UI系统,例如:Dpad,Joystick,TouchPad,Button。每个模块都有对应的说明文件和接口文件,详细问题就可以参考官方提供的这些文件。
二、 EasyTouch 摇杆功能介绍
ETC(Easy Touch Controls)控件集中有两种类型的Joystick:
Static(静态的) :摇杆将会出现在你预先设定好的地方。
Dynamic(动态的) :摇杆将会出现在你触碰到屏幕的地方。你也可以强制摇杆只出现在某个范围内。
每个摇杆控件由两个组成,一个作为背景,一个作为按键。摇杆控件的大小跟背景的大小相关(这个大小可以由宽度和高度参数设置)。
摇杆控件每个轴(X和Y轴)返回参数大小范围为-1~1,也可以通过参数设置是否要打开对应的轴向。
(1)如何创建Joystick
右键单击hierarchy窗口,选择EasyTouch Controls下的JoyStick。
ETC会自动创建一个canvas和一个EventSystem游戏对象。
(2)Joystick控件Inspector面板
属性组说明:
Activated:是否激活这个摇杆控件,即使这个属性是disable状态摇杆控件也可见。
Visible:是否显示摇杆。
Use Fiexed Update:如果使用物理系统的更新频率的话需要勾选这个属性。
Position&Size:设置摇杆类型和位置、大小。
Axes properties:轴属性设置。
Sprites:设置摇杆的。
Move Events、Touch Events、Down Events、Press Events:在这四个事件面板中,你可以设置任何系统中已定义的时间,使用方式和UGUI/NGUI的事件调用方式类似,将项目中已经存在的调用方法直接拖到控件上即可。joystick,DPad,TouchPad这几种控件的事件响应机制类似,可以很容易的实现重用和替换。
(3)Position&Size属性组
Type:设置摇杆类型(静态or动态)。
Anchor:锚点设置
No return of the thumb:手指离开屏幕后thunmb是否要回归原位
Background Size:背景大小。
Thumbe Size:拇指按钮大小(即拇指拖动的那块大小)。
Radius based on:设置摇杆控件的半径大小基于什么轴向决定。这个参数在你导入的不是正方形时会有用。
关于动态joystick的设置:
动态joystick需要设置其出现范围,可以根据需要选择如下类型,如果选择的是User Defined则需要用户自己指定活动范围。
关于静态joystick的设置:
Anchor:锚点的设置
Offset:相对锚点的偏移距离
如果选择的是User Defined则需要用户自己指定活动范围。
关于Area的设置:
创建area可以用来制定joystick控件的动态和静态活动范围。
创建方式如下:
Area控件inspector面板属性说明:
Show at Runtime:项目运行状态是否要显示area控件。
Preset:预设的一些Area范围,如果需要自己设定具体范围的话在RectTransform组件中设置即可。
(4)Axes properties属性组
Horizontal zxis & Vertical axis:设置水平、垂直轴是否可用,后面的输入框可以输入该轴对应名字,并且该命名必须在整个场景中是唯一的。
Inverted axis:翻转轴向正负值。
Dead length:这个值决定了从中心开始每个轴向上多远的距离内是无效区域,即每个轴向上移动距离若少于最远距离的这个比例则该轴向上是没有返回值的。
On/Off Threshold:开启关闭阈值(与down触发事件相关,可参考文章下面down events部分)
Speed:这个数值直接用于 *** 作摇杆移动的时候所控制物体的运动速度,这个数值可以通过ETCInputGetAxisSpeed接口获得(关于接口的详细信息可以参考ETCInput_APIPDF文档)。
Action on:作用时机Press(持续按住)/Down(按下的一瞬间)发生反馈。
Direct Action to:设置摇杆要 *** 控的对象(含有transform组件的游戏对象)。
Action:选择要对action to对象产生的影响。(移动、旋转、施加作用力……)。
Affected axis:作用轴(X/Y)。
Enable inertia:是否激活延迟功能。
Positive key:可以设置该按键与摇杆对应轴的正方向(水平轴为右方,垂直轴为上方)上具有同等功能。
Negative key:可以设置该按键与摇杆对应轴负方向(水平轴为左方,垂直轴为下方)上具有同等功能。
(5)Sprites属性组
设置背景和拇指按钮图标对应和基本颜色。
也可以直接到对应游戏对象(背景和拇指在场景中分别为两个游戏对象)的image组件中设置。
(6)Events属性组
如何添加事件?
找到对应的触发方法,点击加号。
在写好所要触发的具体方法内容后,将脚本挂到游戏对象下,再将游戏对象拖到对应触发方法下,在function处选择刚刚写好的对应类下面的方法即可。
Move Events
On Move Start():首次移动摇杆时触发(当返回到0点位置时触发时机将会被重置)
On Move(Vector2):移动摇杆的过程或者摇杆thumb键没有回到原点时将会持续触发,将摇杆每个轴上移动的距离(值范围为-1~1)作为方法参数传入。
On Move Speed(Vector2):移动摇杆的过程或者摇杆thumb键没有回到原点时将会持续触发,将摇杆每个轴上axisValue axisSensitivityTimedeltaTime作为方法参数传入。
On Move End():当摇杆thumb键回到原点或者用户释放摇杆时触发
Touch Events
On Touch Start():当第一次触摸摇杆时触发
On Touch Up():当用户释放摇杆(停止触摸)时触发
Down Events
On Down Up():用户第一次按下摇杆并向上移动时触发(当摇杆thumb键回到原点或摇杆位置在对应轴threshold值范围内时重置该函数触发条件)
On Down Right():用户第一次按下摇杆并向右移动时触发(当摇杆thumb键回到原点或摇杆位置在对应轴threshold值范围内时重置该函数触发条件)
On Down Down():用户第一次按下摇杆并向下移动时触发(当摇杆thumb键回到原点或摇杆位置在对应轴threshold值范围内时重置该函数触发条件)
On Down Left():用户第一次按下摇杆并向左移动时触发(当摇杆thumb键回到原点或摇杆位置在对应轴threshold值范围内时重置该函数触发条件)
Press Events
On Press Up():按下摇杆并向上移动时触发
On Press Right():按下摇杆并向右移动时触发
On Press Down():按下摇杆并向下移动时触发
On Press Left():按下摇杆并向左移动时触发
三、 摇杆控制移动的一个2D小例子
(1)导入相关资源
导入所需要资源并设置相关参数后拖入到场景中。
(2)创建一个JoyStick
右键Hierarchy面板=>Easy Touch Controlls=>JoyStick 或 菜单栏中单击GameObject菜单=>Easy Touch Controlls=>JoyStick
调整Joystick位置,并设置Joystick要控制的对象和控制方式,具体设置参数如下:
(3)创建控制脚本
[csharp] view plain copy
usingUnityEngine;
usingSystemCollections;
publicclassPlayerMonitor : MonoBehaviour
{
publicvoidJoyStickControlMove(Vector2 direction)
{
thistransformrotation = QuaternionLookRotation(newVector3(directionx, directiony, 0));
}
}
(4)为joystick添加对应控制方法
(5)最终效果
移动Joystick thumb按钮模型会做出同步运动,并在运动过程中改变模型朝向。
1、可以使用了“notify”风格(即是控件的SS_NOTIFY风格)后,当点击该控件时,其父窗口会收到下列消息:
消息名为:
WM_COMMAND
消息的参数:
wParam: LOWORD(wParam)存放的是控件的ID,HIWORD(wParam)放的是STN_CLICKED(这是静态控件被 点击的标志)
lParam: 该控件的句柄。
2、例子:
case WM_COMMAND:
{
if(HIWORD(wParam) == STN_CLICKED)
{
if(LOWORD(wParam) == 某个控件)
{
处理之
}
}
}
Swing初体验 对于想学习Swing编程的朋友 我们特地为大家准备了一些小窍门 首先 下载并阅读代码是极有必要的 由于这是一篇关于Swing的教程 所以 我们只是尽可能讲解一些与Swing有关的内容 与Swing无关的内容一般不会涉及 例如算法部分 其次 受篇幅限制 也不可能在这里将每部分代码都写得完完整整的 所以 大家也需要对照完整代码来看 最后 为了使大家更容易把精力集中在Swing学习上 我们也将游戏开发中所需资源放在下载文件中 大家下载后便能够编译运行 看到执行结果 (下载游戏源文件) 顶层容器 什么是顶层容器?当我们使用Java进行图形编程的时候 图在哪里绘制呢?我们需要一个能够提供图形绘制的容器 这个容器就被称为顶层容器 你也可以把它想象成一个窗口 顶层容器是进行图形编程的基础 一切图形化的东西 都必然包括在顶层容器中 在Swing中 我们有三种可以使用的顶层容器 它们分别是:JFrame:用来设计类似于Windows系统中的窗口形式的应用程序 JDialog:和JFrame类似 只不过JDialog是用来设计对话框 JApplet:用来设计可以在嵌入在网页中的Java小程序 如果需要使用Swing制作一个窗口类程序 我们的代码看起来应该是这样:import javax swing ;public class KyodaiUIextends JFrame {……} 控件 控件是构成应用程序界面的基本元素 按钮 文本框 进度条等 这些都是控件 控件(这里我们只讨论可视化控件)又可以分为容器控件和非容器控件 从字面意义上来理解 容器控件就是能包含其他控件的特殊控件 例如 Java中的JPanel控件就属于容器型控件 我们可以在JPanel中放置按钮 文本框等非容器控件 你甚至可以在JPanel中再放置若干个JPanel控件(值得注意的是 顶层容器也是容器型控件 每一个窗口应用程序中有且只能有一个顶层容器控件 换句话说 顶层容器不能包括在其他的控件中) Java中的容器控件有很多 除刚才提到的JPanel外 还有JTabbedPane JScrollPane等 非容器控件有JButton JLabel JTextField等 如果你需要向某个容器型的控件中添加控件 你可以使用 add(Component p) 方法来实现 如:JPanel panel = new JPanel();JButton button = new JButton();panel add(button); 布局 什么是布局?布局是Java中用来控制控件排列位置的一种界面管理系统 使用过其他可视化编程开发语言的人在初次接触Java界面设计时 总会感觉到Java界面设计很别扭:居然没有提供所见即所得的设置控件坐标的方法!然而 事实证明 Java本身提供的布局管理系统也一样能够出色地完成我们的需要 而且在跨平台时表现得更有优势 常用的布局有:BorderLayout:将界面分割为上下左右以及中间一块区域的管理系统 在BorderLayout布局中 最多你只能放 个控件 如果超过 个控件 建议还是选用其他的布局系统吧 GridLayout:GridLayout是将用户界面切割为棋盘一样的布局管理系统 如果我们要设计一个类似于Windows中自带的计算器软件 GridLayout无疑是最佳选择 FlowLayout:FlowLayout与上述两类布局管理系统不太一样 在FlowLayout中 你不必指定每个控件放在哪 你只需要把控件加入到FlowLayout中 FlowLayout就会根据你添加控件的顺序依次放置控件 如果空间不够 会自动换行 在对这几个布局管理系统有了基本认识后 我们就一起来进入界面设计吧 在仔细观察了QQ游戏中 连连看 的设定后 我们可以发现 整个界面分为三个区 顶部是系统菜单区 占地面积最大的是用户游戏区 另外还有一个用户交互区 每个区域中都由若干控件组成 这么多控件 我们从哪开始入手呢?由于容器控件中可以放置其他控件 因此 我们只需要先确定放置的容器控件就可以了 既然已经知道需要使用容器控件的个数 接下来让我们就进入布局管理系统的选择 用GridLayout?似乎有点勉强 用FlowLayout?还有更好的选择吗?对了 我想你一定想到了是BorderLayout吧 如下图 所示 动手之前 大家一定要注意的是 界面的设计要先考虑好尺寸 不管是主程序界面的大小还是每个区域的大小 如果没有设计好合适的尺寸 将来改动起来会十分痛苦 下面便是相应的源程序:import java awt ;import javax swing ;public class KyodaiUI extends JFrame {public KyodaiUI() {this setSize( ); //将窗体的大小设定为 this setDefaultCloseOperation(JFrame EXIT_ON_CLOSE);this setResizable(false); //窗体不能改变大小this setTitle( 连连看 ); //设置标题JPanel toolBar = new JPanel();toolBar setBackground(Color white);toolBar setPreferredSize(new Dimension( ));JPanel actionPanel = new JPanel(); //新建JPanel型的控件actionPanel setBackground(Color yellow); //设置背景色actionPanel setPreferredSize(new Dimension( )); //设置大小JPanel contentPanel = new JPanel();contentPanel setBackground(Color blue);contentPanel setPreferredSize(new Dimension( ));this getContentPane() add(toolBar BorderLayout NORTH);this getContentPane() add(actionPanel BorderLayout EAST);this getContentPane() add(contentPanel BorderLayout CENTER);}public static void main(String[] args) throws HeadlessException {KyodaiUI kyodaiUI = new KyodaiUI();kyodaiUI show();}}让我们来看看上面这段程序是如何运行的 首先 extends JFrame表明了这是从JFrame中继承过来的 JFrame是最基本的顶层容器控件 实际上 在JDK中 以字母J打头的控件都是Swing控件 然后设置了容器的属性 其中 setDefaultCloseOperation(JFrame EXIT_ON_CLOSE)是用来告诉Java虚拟机 当用户点击窗体右上角的 关闭 按钮时 关闭该窗口进程 如果不这么做的话 你会发现虽然你可以点将窗口关闭 然而程序却没有退出 在接下来的代码中 我们为顶层容器添加了三个Panel容器 要注意的是 在AWT中 我们可以直接写为add(toolBar BorderLayout NORTH) 而在 Swing 中却一定要写成getContentPane() add(toolBar BorderLayout NORTH) 否则程序就会出错 现在大家可以放在编译运行看看 是不是和我的运行结果一样(见图 )? 边框 虽然我们使用了不同前景色来区别不同的区域 然而却没有层次感 加上边框一定会漂亮许多 在Java中 所有以J打头的Swing控件都可以使用setBorder方法来为自己设置边框 边框有很多种 线型 凸起 凹下 空的 你甚至可以自由组合形成个人风格 所有的Border都必须使用javax swing BorderFactory中提供的静态方法来创建 比如:Border border = BorderFactory createBevelBorder(BevelBorder LOWERED new Color( ) new Color( ) new Color( ) new Color( ));现在 我们将toolBar setBackground(Color white)改为toolBar setBorder(border) 立体效果是不是已经出现了?实战写上自己的大名现在我们已经有了一个能够运行的界面了 虽然它什么也做不了 但是请你别慌 罗马不是一天建成的 现在让我们在菜单区提供一个 关于 菜单 用来显示程序的信息 难道你不想让别人知道你的大名吗?Swing本身就提供了现成的按钮控件JButton 我们只需要创建一个新的按钮:JButton about = new JButton( 关于 );这个按钮该怎么放到菜单区而不是别的地方呢?我们可以加入下面的代码:toolBar add(about);咦 怎么点按钮没有反应?这是因为你还没有告诉程序点击按钮时要做什么事情呢 要为按钮添加事件响应 首先需要使用about addActionListener(this)来告诉程序监听按钮按下时的事件 由于ActionListener是一个程序接口 因此 我们在类的申明的地方也得做一点小小的修改:public class KyodaiUI extends JFrame implements ActionListener { }实现ActionListener接口是为了告诉程序我要进行事件处理了 当然 最后我们得添加响应事件的代码:public void actionPerformed(ActionEvent e) {if (e getSource() == about) {JOptionPane showMessageDialog(this 我的大名 关于 JOptionPane INFORMATION_MESSAGE);return ;}}其中 e getSource() 表示当前触发事件的控件 由于我们的程序中往往会有多个以上的控件 这些控件都有可能产生事件 所以我们必须使用这个方法来找到产生事情的控件 小结 让我们一起来回顾一下今天所学的内容:首先我们了解了顶层容器 也知道了控件分为容器控件和非容器控件 同时还知道使用边框 最后 我们还小小的处理了一下按钮的事件 学而时习之 不亦说乎 就让我留点小小的作业 帮助大家巩固一下今天所学的内容:上面我们添加的按钮在菜单栏的中间 并不美观 lishixinzhi/Article/program/Java/hx/201311/25907
各个游戏的需求不同,不是所有的都要,比如DirectX(需要装Dx9的很多,Win7这类自带了Dx11的在玩dx9的游戏时候也需要另行安装)。PhysX,这是Nvidia出的物理引擎,有些射击游戏需要。Net Framework,微软的net构架,从20到40都有不同的游戏需要,因此可能要装各个版本。C++ 运行时再发布包,2005,2008,2010也随不同时期的游戏需要而变。各个版本的运行时还有自己的SP补丁包。其他的还有些XML, Open AL什么的特定游戏也需要。
单独的一些DLL是不需要的,凡是报找不到D起头的一堆dll的,大都是DirectX没装好的关系。有个例外是MSVBVM60dll,暂且不提。
顺便说下这些不叫控件,大都是驱动或者是组件,你说3D游戏需要的控件我还以为你要开发游戏
以上就是关于制作游戏中绘制流程图的主要工具是全部的内容,包括:制作游戏中绘制流程图的主要工具是、android自定义控件怎么用、EasyTouch及摇杆控件介绍等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)