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 ...
随机推荐
- Druid——阿里巴巴的开源项目(关于数据库连接、监控)
相关文章 0.Druid首页——jdbc连接池,监控组件 1.阿里巴巴的开源项目Druid(关于数据库连接) 2.ITeye谈Druid 3.DBCP(DataBase connection pool ...
- Python 时间格式化(转)
From:http://www.cnblogs.com/65702708/archive/2011/04/17/2018936.html http://www.wklken.me/posts/2015 ...
- PHP百分号转小数
<?php $a = "20.544545%"; echo (float)$a/100; ?>
- 九度OJ 1030:毕业bg (01背包、DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1814 解决:798 题目描述: 每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络上称为"bg" ...
- python中的raw字符串
在正则表达式的字符串前面加上r表示这个是一个raw字符串,只以正则表达式的元字符进行解析,不用理会ascii的特殊字符.
- js实现随机选取[10,100)中的10个整数,存入一个数组,并排序。 另考虑(10,100]和[10,100]两种情况。
1.js实现随机选取[10,100)中的10个整数,存入一个数组,并排序. <!DOCTYPE html> <html lang="en"> <hea ...
- 【题解】CF997C Sky Full of Stars
[题解]CF997C Sky Full of Stars 为什么我的容斥原理入门题是这道题????????? \(Part-1\)正向考虑 直接考虑不合法合法的方案吧 所以我们设行有\(i\),列有\ ...
- 链表的C++实现
有的时候,处于内存中的数据并非连续的.那么这时候.我们就须要在数据结构中加入一个属性.这个属性会记录以下一个数据的地址.有了这个地址之后.全部的数据就像一条链子一样串起来了,那么这个地址属性就起到 ...
- PHP Framework
PHP Framework is built for PHP developers who need elegant toolkit to create full-featured web appli ...
- 《avascript 高级程序设计(第三版)》 ---第三章 基本概念2
1.乘性操作符: 1)*法操作法: Infinity * 0 = NaN Infinity * 非零 = Infinity 或 - Infinity 2)/法操作符: Infinity / In ...