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 ...
随机推荐
- Nginx与Apache的Rewrite规则的区别
一.Nginx Rewrite规则相关指令 Nginx Rewrite规则相关指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令.一个简单的Nginx R ...
- WinDbg调试分析 net站点 CPU100%问题
WinDbg调试分析 asp.net站点 CPU100%问题 公司为了节省成本,最近有一批服务器降了配置,CPU从8核降到了2核.本身是小站点,访问量也不高,CPU总是会飙到100%而且可以一直持续几 ...
- [项目构建 十一]babasport 购物车的原理及实现.
今天来开始写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗? 2)用户登陆了用户名密码,添加商品, ...
- C#中的let字句应用示例
一.应用场景 在查询表达式中,存储子表达式的结果有时很有用,这样可以在随后的子句中使用. 可以使用 let 关键字完成这一工作,该关键字可以创建一个新的范围变量,并且用您提供的表达式的结果初始化该变量 ...
- Cocos2d-x 3.0final 终结者系列教程16-《微信飞机大战》实现
看到cocos2d-x推出了3.1版本号,真是每月一次新版本号,速度. 另一个好消息就是http://cn.cocos2d-x.org/上线了,祝贺!啥时候把我的视频和教程放上去呢?!! . 视频下载 ...
- SPOJ SUBLEX - Lexicographical Substring Search 后缀自动机 / 后缀数组
SUBLEX - Lexicographical Substring Search Little Daniel loves to play with strings! He always finds ...
- vue element-ui 自动获取光标
<el-input ref="customerInput"></el-input> this.$refs.mark.$el.querySelector('i ...
- 消息队列activeMq 使用介绍
深入浅出 消息队列 ActiveMQhttp://blog.csdn.net/jwdstef/article/details/17380471 一. 概述与介绍 ActiveMQ 是Apache出 ...
- 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...
- 【题解】P4799[CEOI2015 Day2]世界冰球锦标赛
[题解][P4799 CEOI2015 Day2]世界冰球锦标赛 发现买票顺序和答案无关,又发现\(n\le40\),又发现从后面往前面买可以通过\(M\)来和从前面往后面买的方案进行联系.可以知道是 ...