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 ...
随机推荐
- ASP.NET动态网站制作(10)-- JQ(2)
前言:jq的第二节课. 内容: 1.管理选择结果: (1)获取元素个数:$("img").size():获取页面中所有“img”个数: (2)提取元素:$("img[ ...
- Android Apk包下查看 sha1
用keytool工具查看sha1,格式如下:keytool -printcert -file Urovo.RSA文件路径(APK解压后在Meta-INF文件夹下)
- Asp.net MVC3中全局图片防盗链
怎么样在Asp.Net MVC3中做到全局图片防盗链?如果熟悉Asp.Net的页面生命周期,相信解决这个问题应该很容易.下面就演示一下如何去做? 一.首先是全局的,我们肯定要在Global.asax文 ...
- 远程访问(post 传参数) 以及IOUtils复制文件
package com.action; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream ...
- 性能测试--Jmeter之wordpress示例
Jmeter之wordpress示例 WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理 ...
- EF学习和使用(三)Code First
Code First模式我们称之为"代码优先"模式.从某种角度来看.其实"Code First"和"Model First"区别并非太明显. ...
- GEO(地理信息定位)
核心知识点: 1.GEO是利用zset来存储地理位置信息,可以用来计算地理位置之间的距离,也可以做统计: 2.命令:geoadd geopos geodist geohash georadius/ge ...
- API的理解和使用——全局命令
全局命令 命令 功能 set 创建键值对 keys 遍历查看所有键 exists 判断一个键是否存在,1存在,0不存在 dbsize 当前数据库中有多少个键 del 删除一个或多个键 expire 设 ...
- Java for LeetCode 086
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- JavaScript:学习笔记(4)——This关键字
JavaScript:学习笔记(4)——This关键字 以前这篇帖子是关于闭包的,但是我想弄明白的其实是This关键字.JavaScript的this和Java等面向对象语言中的this大不一样,bi ...