UI 界面:技术决定一切
转自:http://www.cnblogs.com/NEOCSL/archive/2012/12/10/2811153.html
在我看来,肖恩帕克不仅仅是一位技术天才和远见卓识的移动互联网领域先锋。同时谙熟社会之道,他认为技术才是改变人类生活结构和方式的核心,不是政府。整个世界和人类的生活方式都被技术最牛逼的公司苹果所影响着,我想未来会是一家生物工程公司。iOS平台的UI界面操作比以往的菜单选择和鼠标点击更能引发人们的情绪反馈。因此我将会着手iOS触屏界面系统的技术。
操作界面在MobileMenuScene中控制,后续有一个MobileMenuBase继承了MobileMenuScene,但是添加了Fade函数。
1.我写了一个AntMenuSceneMainMenu来定义自己的开始游戏一级菜单。
class AntMenuSceneMainMenu extends MobileMenuScene; var MobilePlayerInput MPI;
2.在Controller中可以打开这个菜单(当然你可以用你的任何方式在任何时候任何位置打开自己需要的菜单,例如玩家死亡,可以在Pawn中打开菜单)
var AntMenuSceneMainMenu MainGameMenu; MainGameMenu=AntMenuSceneMainMenu(MPI.OpenMenuScene(class'AntMenuSceneMainMenu'));
3.这样就打开了需要的MobileMenuScene
在这里的defaultproperties中添加需要的内容,Image,label,button基本上就是这三种内容了,他们都继承自MobileMenuObject
Button
Begin Object Class=MobileMenuButton Name=CloseButton
Tag="Play"
bRelativeLeft=true
bRelativeTop=true
bRelativeHeight=true
bRelativeWidth=true
bHeightRelativeToWidth=true
Left=0.04
Top=
Width=0.25
Height=1.0
Caption="Play!"
bCaptionShadow=true
Images()=Texture2D'ChickenHUD.HenIcon'
Images()=Texture2D'ChickenHUD.HenIcon'
CaptionColor=(R=1.0,G=1.0,B=0.0,A=1.0)
CaptionScale=1.1
End Object
MenuObjects.Add(CloseButton)
Lebel
Begin Object Class=MobileMenuLabel Name=HighScoreLabel
Tag="HighScore"
bRelativeLeft=true
bRelativeTop=true
Left=0.36
Top=0.37
TextFont=Font'ChickenFonts.Plump'
TextColor=(R=,G=,B=,A=)
TouchedColor=(R=,G=,B=,A=)
Caption="High Score:"
TextXScale=1.3
TextYScale=1.3
ShadowOffsetScale=1.7
End Object
MenuObjects.Add(HighScoreLabel)
Image
Begin Object Class=MobileMenuImage Name=Background
Tag="Background"
Left=
Top=
Width=1.0
Height=1.0
bRelativeWidth=true
bRelativeHeight=true
Image=Texture2D'CastleUI.menus.T_CastleMenu2'
ImageDrawStyle=IDS_Stretched
ImageUVs=(bCustomCoords=true,U=,V=,UL=,VL=)
End Object
MenuObjects.Add(Background)
MobileMenuScene中有需要填充的函数,例如处理Touch的函数
event OnTouch(MobileMenuObject Sender, ETouchType EventType, float TouchX, float TouchY)
{
if(sender==none)
return; switch(Sender.tag)
{
case "Jump_tag":
`log("this is work fine aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
InputOwner.Outer.ConsoleCommand("jump");
break; case "Weapon_tag":
InputOwner.Outer.ConsoleCommand("nextweapon");
break; case "zone_tag":
InputOwner.Outer.ConsoleCommand("KillZone");
break; case "Auto_tag":
InputOwner.Outer.ConsoleCommand("AutoShoot");
break;
} if(sender.Tag!="Auto_tag")
{
InputOwner.Outer.ConsoleCommand("DisableAutoShoot");
} }
当然你也可以在初始化中显示自己想要布置的内容
event InitMenuScene(MobilePlayerInput PlayerInput, int ScreenWidth, int ScreenHeight)
{
local MobileMenuLabel tLabel;
super.InitMenuScene(PlayerInput,ScreenWidth,ScreenHeight);
tLabel = MobileMenuLabel(FindMenuObject("HighScore"));
tLabel.Caption = tLabel.Caption @ ChickenMenuGame(class'WorldInfo'.static.GetWorldInfo().Game).cHighScore.HighScore;
}
MobileMenuScene的后边有一个MobileMenuBase。他实现了按钮的Fade功能。而不仅仅是让按钮消除,因此我将重新完成继承工作。
1.该功能强大的地方在于:你不仅仅能获得慢慢消隐的效果,同时也将会使活跃的按钮Cooldown。
case “Play”:
Fade(true,1.0);
//实现想要的功能
break;
2.遍历控件的强大功能
local MobileMenuObject mObject; foreach MenuObjects(mObject)
{
//如果mObject.Tag是"CreditsSplash"那就隐藏
mObject.bIsHidden=mObject.Tag=="CreditsSplash";
//mObject是否隐藏,没有的话就激活
mObject.bIsActive=!mObject.bIsHidden;
}
UI界面不仅仅能呈现一种渐变效果,如果有推拉效果那就更加的牛逼闪耀。今天我将实现两个内容1.UI的推拉下滑效果 2.kismet中过场动画跳过。我想用一种更为黑客的方式进行下面的工作,一个点一个点的技术攻克每一方面的内容。
1.在OnTouch中获取Controller
local AntPlayerController PC; pc=AntPlayerController(InputOwner.Outer);
2.初始化控件和按钮,为了更加的标准和匹配不同设备的分辨率
var float Scale; event InitMenuScene(MobilePlayerInput PlayerInput,int ScreenWidth,int ScreenHeight,bool bIsFirstInitialization)
{
local int i; super.InitMenuScene(PlayerInput,ScreenWidth,ScreeHeight,bIsFirstInitialization); Scale=(ScreenWidth>=)?1.0:Float(ScreenWidth)/;
//resize the scale of button and image
go on bro
for(i=;i<MenuObjects.length;i++)
{
MenuObjects[i].Left*=Scale;
MenuObjects[i].Top*=Scale;
MenuObjects[i].Width*=Scale;
MenuObjects[i].Height*=Scale;
} MenuObjects[].height*=Scale;
MenuObjects[].Width*=Scale; if(ScreenWidth==)
{
MenuObjects[].Width=;
}
else if(ScreenWidth<)
{
MobileMenuImage(MenuObjects[].ImageDrawStyle=IDS_Stretched);
} //Handle the main window
Width=ScreenWidth;
Height*=Scale; MenuObjects[].Left=(ScreenWidth/)-(MenuObjects[].width/);
MenuObjects[].Left=ScreenWidth-(ScreenWidth/)-(MenuObjects[].Width/); Top=-Height;
showSize=Height-MenuObjects[].Top+(*Scale);
}
3.抓到了kismet的中心,怎么进入?在PlayerController中研究。两个函数ExitAttractMode(),EnterAttractMode()。后一篇文章专门进入这两个函数研究。
4.有一个OnSceneTouch函数处理任何在该屏幕上响应的事件,当然可以根据自己的参数设置来规定响应的区域。
if(PC.SliderZone!=none&&X>=PC.SliderZone.CurrentLocation.X&&X<PC.SliderZone.CurrentLocation.x&&Y>=PC.SliderZone.CurrentLocation.Y&&Y<PC.SliderZone.CurrentLocation.Y+PC.SliderZone.ActiveSizeY)
如此看来,PC.ResetMenu()又是重要的滑动显示效果。
UI 界面:技术决定一切的更多相关文章
- Metro UI 界面完全解析 (转载)
Metro在微软的内部开发名称为“ typography-based design language”(基于排版的设计语言).它最早出现在微软电子百科全书95,此后微软又有许多知名产品使用了Metro ...
- 美团开源Graver框架:用“雕刻”诠释iOS端UI界面的高效渲染
Graver 是一款高效的 UI 渲染框架,它以更低的资源消耗来构建十分流畅的 UI 界面.Graver 独创性的采用了基于绘制的视觉元素分解方式来构建界面,得益于此,该框架能让 UI 渲染过程变得更 ...
- Android研究之动态创建UI界面具体解释
Android的基本UI界面一般都是在xml文件里定义好,然后通过activity的setContentView来显示在界面上.这是Android UI的最简单的构建方式.事实上,为了实现更加复 ...
- 移动端UI界面设计:APP字体排版设计的七个原则
移动端UI界面设计:APP字体排版设计的七个原则 发布于: 2015 年 2 月 9 日 by admin 再来谈移动端APP字体排版设计,也许有人会说,这个还有什么好说的呢?但是真正能够运用好APP ...
- 【鸿蒙应用开发】第三章 “颜控”时代下如何构建UI界面
为什么是第三章,前面两章呢? 原本是以碎片化的方式将HarmonyOS应用开发快速掌握,但是在准备六大布局组合复杂UI界面Demo时,很多组件之前都没有应用.因此准备将知识体系进行细化,以章节的形式希 ...
- iPhone/iPad/Android UI尺寸规范 UI尺寸规范,UI图标尺寸,UI界面尺寸,iPhone6尺寸,iPhone6 Plus尺寸,安卓尺寸,iOS尺寸
iPhone/iPad/Android UI尺寸规范 UI尺寸规范,UI图标尺寸,UI界面尺寸,iPhone6尺寸,iPhone6 Plus尺寸,安卓尺寸,iOS尺寸 iPhone界面尺寸 设备 分辨 ...
- Android开发1:基本UI界面设计——布局和组件
前言 啦啦啦~本学期要开始学习Android开发啦~ 博主在开始学习前是完完全全的小白,只有在平时完成老师要求的实验的过程中一步一步学习~从此篇博文起,博主将开始发布Android开发有关的博文,希望 ...
- 单据UI界面设计开发
1.新建单据界面数据 2.创建数据模型,包括单据.单据行.设置应用缺省特性,每个模型树下只有一个红色项 3.新增动作,系统默认没有弃审支作按钮事件 4. 新增UI Form,选择对应的模型树及表单类别 ...
- 线程操作UI界面的方法
以前一般都是用BeginInvoke来刷新UI界面,现在采用 SynchronizationContext 来刷新,写起来清楚多了. SynchronizationContext synchroniz ...
随机推荐
- 【WPF学习笔记】之如何通过后台C#代码添加(增/删/改按钮)实现对SQLServer数据库数据的更改
首先,需要连接SQLServer数据库的服务器名称server.数据库名database.数据库用户名uid以及密码pwd,如下图: 然后需要以下数据库SQL代码段,还有一个myHelper.cs代码 ...
- maven项目The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
用Eclipse创建了一个maven web程序,使用tomcat8.5作为服务器,可以正常启动,但是却报如下错误 The superclass "javax.servlet.http.Ht ...
- JQuery 获取URL中传递的参数
该方法基于JQuery,然后给方法传递URL中的参数名,返回参数值 (function($){ $.getUrlParam = function(name){ var reg = ...
- create-react-app创建项目报错SyntaxError: Unexpected end of JSON input while parsing near '...ttachment":false,"tar' npm代理
SyntaxError: Unexpected end of JSON input while parsing near '...ttachment":false,"tar' 错误 ...
- android菜鸟学习笔记16----Android项目打包安装过程(Run as Android Application)
右击项目名称,Run as Android Appication之后,Android项目打包安装过程: 1.打包生成.apk文件: 1)把源码中的.java文件编译生成.class文件 2)将所有的. ...
- mysql系列之5.mysql备份恢复
备份数据: mysqldump #mysqldump -uroot -p123456 test > /test_bak.sql #egrep -v "#|\*|--|^$" ...
- matlab实战中一些重要的函数总结
这段时间看了一些大型的matlabproject文件(如:faster r-cnn),对于project中常常要用到的一些函数进行一个总结. 1.路径问题. 这主要涵括文件路径的包括和组合. curd ...
- linux install beanstalkd
you can instal it via git and then copy systemd script: Step 0. Install git yum install git Step 1. ...
- Pentaho BIServer Community Edtion 6.1 使用教程 第二篇 迁移元数据 [HSQLDB TO MySQL]
第一部分 迁移原因 Pentaho BI 社区版服务的很多元数据信息存储在数据库汇总,其默认使用HSQLDB 数据库,即借助它存储自身的资料库,比如 Quartz 调度信息.业务资料库连接信息(数据 ...
- win7下搭建nginx+php的开发环境(转)
在win7下用的是IIS做web服务器,但近来因项目需求的原因,需要在服务器遇到404错误的时候自动做转向(不是在客户端的跳转,而是在服务器收到客户端请求去某目录下读取文件返回时,如果发现目录或目录下 ...