转自: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 界面:技术决定一切的更多相关文章

  1. Metro UI 界面完全解析 (转载)

    Metro在微软的内部开发名称为“ typography-based design language”(基于排版的设计语言).它最早出现在微软电子百科全书95,此后微软又有许多知名产品使用了Metro ...

  2. 美团开源Graver框架:用“雕刻”诠释iOS端UI界面的高效渲染

    Graver 是一款高效的 UI 渲染框架,它以更低的资源消耗来构建十分流畅的 UI 界面.Graver 独创性的采用了基于绘制的视觉元素分解方式来构建界面,得益于此,该框架能让 UI 渲染过程变得更 ...

  3. Android研究之动态创建UI界面具体解释

     Android的基本UI界面一般都是在xml文件里定义好,然后通过activity的setContentView来显示在界面上.这是Android UI的最简单的构建方式.事实上,为了实现更加复 ...

  4. 移动端UI界面设计:APP字体排版设计的七个原则

    移动端UI界面设计:APP字体排版设计的七个原则 发布于: 2015 年 2 月 9 日 by admin 再来谈移动端APP字体排版设计,也许有人会说,这个还有什么好说的呢?但是真正能够运用好APP ...

  5. 【鸿蒙应用开发】第三章 “颜控”时代下如何构建UI界面

    为什么是第三章,前面两章呢? 原本是以碎片化的方式将HarmonyOS应用开发快速掌握,但是在准备六大布局组合复杂UI界面Demo时,很多组件之前都没有应用.因此准备将知识体系进行细化,以章节的形式希 ...

  6. iPhone/iPad/Android UI尺寸规范 UI尺寸规范,UI图标尺寸,UI界面尺寸,iPhone6尺寸,iPhone6 Plus尺寸,安卓尺寸,iOS尺寸

    iPhone/iPad/Android UI尺寸规范 UI尺寸规范,UI图标尺寸,UI界面尺寸,iPhone6尺寸,iPhone6 Plus尺寸,安卓尺寸,iOS尺寸 iPhone界面尺寸 设备 分辨 ...

  7. Android开发1:基本UI界面设计——布局和组件

    前言 啦啦啦~本学期要开始学习Android开发啦~ 博主在开始学习前是完完全全的小白,只有在平时完成老师要求的实验的过程中一步一步学习~从此篇博文起,博主将开始发布Android开发有关的博文,希望 ...

  8. 单据UI界面设计开发

    1.新建单据界面数据 2.创建数据模型,包括单据.单据行.设置应用缺省特性,每个模型树下只有一个红色项 3.新增动作,系统默认没有弃审支作按钮事件 4. 新增UI Form,选择对应的模型树及表单类别 ...

  9. 线程操作UI界面的方法

    以前一般都是用BeginInvoke来刷新UI界面,现在采用 SynchronizationContext 来刷新,写起来清楚多了. SynchronizationContext synchroniz ...

随机推荐

  1. Zend API:深入 PHP 内核

    Introduction Those who know don't talk. Those who talk don't know. Sometimes, PHP "as is" ...

  2. JQuery利用选择器定位动态id?

    假如我们需要去定位一个动态生成的div,我们需要为它指定一个动态的id 例如: 前台使用EL进行迭代LIST生成div,为其添加动态的id,生成之后变成下面样式 <div id="tz ...

  3. Docker入门系列6 如何打开多个终端进入Docker容器

    Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH.如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可.当我启动了五个容器后,每个容器默认是没有配置SS ...

  4. tao.opengl+C#绘制三维模型

    一.tao.Opengl技术简介 Opengl是一种C风格的图形库,即opengl中没有类和对象,只有大量的函数.Opengl在内部就是一个状态机,利用不同的函数来修改opengl状态机的状态,以达到 ...

  5. 【转】cmd chcp命令切换字符格式

    cmd chcp命令切换字符格式   命令介绍:   chcp 65001   #换成utf-8代码页   chcp 936       #换成默认的gbk   chcp 437       #美国英 ...

  6. EasyPlayerPro RTMP播放器助力远程娃娃机直播抓娃娃技术方案

    远程娃娃机 目前市面上娃娃机的方案有很多种.核心的技术流程就是实现远程直播加上对娃娃机手臂的远程操作.其中最主要的技术还是视频直播方案,需要低延时,视频秒开等流媒体技术. 最简单的直播方案 视频直播方 ...

  7. vue-cli与后台数据交互增删改查

    1. 安装vue-resource npm install vue-resource --save 2.访问后台地址,在vue中会出现跨域的问题,以下为解决方案 在config下的index.js 中 ...

  8. php总结8——mysql函数库、增删改

    8.1 mysql函数库 php的函数   .php中用来操作mysql函数库的函数 常用函数 mysql_connect("主机名称/ip","用户名",&q ...

  9. Android Weekly Notes Issue #276

    September 24th, 2017 Android Weekly Issue #276 本期内容包括LifeCycle与Architecture的相关文章,以及新的JSON解析库Moshi的介绍 ...

  10. linux应用之jdk环境的安装(centos)

    一.yum安装 1.执行:yum search jdk 已加载插件:fastestmirror, securityLoading mirror speeds from cached hostfile ...