打造轻量级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

相关文章

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

Java 中的跨域问题解决方法

《Java中的跨域问题解决方法》跨域问题本质上是浏览器的一种安全机制,与Java本身无关,但Java后端开发者需要理解其来源以便正确解决,下面给大家介绍Java中的跨域问题解决方法,感兴趣的朋友一起... 目录1、Java 中跨域问题的来源1.1. 浏览器同源策略(Same-Origin Policy)1.

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

如何清理MySQL中的binlog问题

《如何清理MySQL中的binlog问题》:本文主要介绍清理MySQL中的binlog问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目http://www.chinasem.cn录清理mysql中的binlog1.查看binlog过期时间2. 修改binlog过期

如何解决yum无法安装epel-release的问题

《如何解决yum无法安装epel-release的问题》:本文主要介绍如何解决yum无法安装epel-release的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录yum无法安装epel-release尝试了第一种方法第二种方法(我就是用这种方法解决的)总结yum

python3 pip终端出现错误解决的方法详解

《python3pip终端出现错误解决的方法详解》这篇文章主要为大家详细介绍了python3pip如果在终端出现错误该如何解决,文中的示例方法讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下... 目录前言一、查看是否已安装pip二、查看是否添加至环境变量1.查看环境变量是http://www.cppcns

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

redis在spring boot中异常退出的问题解决方案

《redis在springboot中异常退出的问题解决方案》:本文主要介绍redis在springboot中异常退出的问题解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴... 目录问题:解决 问题根源️ 解决方案1. 异步处理 + 提前ACK(关键步骤)2. 调整Redis消费者组