打造轻量级Windows Phone7 游戏引擎-Samurai 第二话(中) Inputs 问题解决篇一

本文主要是介绍打造轻量级Windows Phone7 游戏引擎-Samurai 第二话(中) Inputs 问题解决篇一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

打造轻量级Windows Phone7 游戏引擎-Samurai 第二话(中) Inputs 问题解决篇一

1.如何让原本的“轮询”模式变成“事件响应”模式?
(当然了,这里的事件响应模式本质上还是轮询,并没有提高效率,仅仅是方便了编程,希望读者注意)
简要概括做法就是:
事先以“手势种类”为Key以及“响应方法”为Value进行注册,在游戏过程中,SAInput在更新后,根据监听到的手势决定是否调用相应方法。
我们先定义一个委托:

 public delegate void OnInputDelegate(GestureSample gestureSample);      //处理手势的委托定义

然后定义一个字典,用来存储手势和响应方法的映射关系:(对inputDictionary的管理就是最为重要的部分了~)

private static Dictionary<GestureType, OnInputDelegate> inputDictionary = new Dictionary<GestureType, OnInputDelegate>();       //手势与委托的字典


每次我们想要用到新的手势的时候,都要进行注册,调用如下的方法:
public static void EnableGesture(GestureType gestureType, OnInputDelegate onInput){if (!inputDictionary.ContainsKey(gestureType)){TouchPanel.EnabledGestures = TouchPanel.EnabledGestures | gestureType;inputDictionary.Add(gestureType, onInput);}}
(注意的是,同一个手势不要注册多个响应(当然,其实大家可以在这个基础上改进使之可以同一手势支持多个相应,想想用什么方法吧~))
然后就是真正处理部分的代码了,在贴下来该段代码之前还是不得不吐个槽:这也太简单太水了吧...

                    foreach (GestureType g in inputDictionary.Keys){if (gestureSample.GestureType == g){inputDictionary[g].Invoke(gestureSample);break;  //ATTENTION}}

就是这个样子的,只要检测到有相应的手势,直接触发相应的响应方法即可~
同理,我们可以对BackButton进行同样的处理:

设置委托:

public delegate void OnBackButtonDelegate();        //处理back键的委托定义

注册响应事件:

        public static void EnableBackButton(OnBackButtonDelegate onBackButton){//OnBackButton += onBackButton;OnBackButton = onBackButton;}

(同样的,这里也是只支持一个响应方法,不过如果使用注释掉的那个语句就可以注册多个方法了~不好意思哈,直接说出来了~不过因为注册了多个响应方法并不是必要的,而且这样做的话,会让代码比较凌乱,所以还是不要用注释掉的那一行了)
处理响应:

 if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed){if (OnBackButton != null){OnBackButton.Invoke();}}

2.如何既能用Gesture,又能用底层的TouchCollection?
虽然在书上见到了提醒不要既用TouchCollection又用Gesture,但是经过尝试似乎没有问题,大家如果用的时候遇见了问题,一定要告我一声。 在这里多说一句,XNA的Gesture本来就是加工 TouchCollection中的信息得到的。也就是说如果我们自己心情好的话,可以直接无视掉Gesture,自己利用TouchCollection实现自定义的Gesture,不过比较惭愧,笔者有些懒惰啊~
代码如下:
设置委托:        

public delegate void OnTouchCollectionDelegate(TouchCollection touchCollection);

注册响应事件:

        public static void EnableTouchCollection(OnTouchCollectionDelegate temp){OnTouchCollection = temp;}
处理响应:(好吧,这已经简单到无力吐槽了)注意,我将TouchCollection的处理放在了Gesture的前面,这个时候是没问题的,欢迎大家尝试将Gesture放在前面的情况~
                if (OnTouchCollection != null){OnTouchCollection.Invoke(touchCollection);}


3.如何整合Button到SAInput以及整合SAInput到页面管理系统?
在介绍完页面管理系统后再进行详述。


另外,这篇博客中的代码仅仅是用于讲解的一部分,要达到实际应用以及可以和其他部分进行整合的程度,还需要做一些其他控制开关啦,注销啦等等之类的工作。所以,在晚些时候SAInput这部分写完的时候我会附上较为完整的代码。



这篇关于打造轻量级Windows Phone7 游戏引擎-Samurai 第二话(中) Inputs 问题解决篇一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025196

相关文章

JAVA Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

windows下安装Nginx全过程

《windows下安装Nginx全过程》文章介绍了HTTP和反向代理服务器的概念,包括正向代理和反向代理的区别,并详细描述了如何安装和配置Nginx作为反向代理服务器... 目录概念代理正向代理反向代理安装基本属性nginx.conf查询结构属性使用运行重启停止总结概念是一个高性能的HTTP和反向代理we

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出