AS3类游戏中的键盘管理
当你在FLEX或者AS3里面监听KEY_UP事件的时候,通常会有些问题,比如多个键同时按下,本文的目的正是阐述这些问题并提出解决方案
在游戏中,通常按D向右移动,按A向左移动,但是问题是比如当你按着W希望向上移动(当然可能你的程序并没有在此要求),同时当你释放W键的同时,程序仍然控制向左移动,为了完成这个繁杂的任务,我设计了一个SINGLETON类。这个类保存着一列被按下的键,并且有两个查看KEYDOWN 和KEYUP的函数。
在KEYDOWN函数中,该函数首先查看DOWNKEY数组是否是空,如果为空,那么添加相应的KEYEVENT,这样就能够监听相应的事件了。
在KEYUP函数中,通过循环,则剔除相应的鼠标事件......
这里有一个技巧:就是在外面的文件只能够添加事件的监听器,然后在这些监听器中去调用我的MANAGER 单件,技巧就在KEYUP的监听器上,可以做一些检测来确认是否需要回调KEYDOWN函数来确认哪些键仍然被按着......
通常在我编写的游戏中,我仅仅使用W,S,D,A键位然后加上和鼠标的互动,交互也就足够了【这也是玩游戏的惯例,太多了反而不熟:译者注】,通过这样的设计我只是希望的我的鼠标交互要比其他的程序要好,如我所说的,我在KEYUP事件的监听器中去除一些事件监听,或者也就仅仅将速度设置为0就可以了......
我希望能够按D,然后按A后退一点点,然后释放A的同时D仍然按着,然后程序对象依旧朝向前方前进......
KeyboardManagement for Games in Actionscript 3
Posted in February 29th, 2008
by admin in Flex
A solution to multiple keys being held down at once. When you listen to KEY_UP in flex, or actionscript 3.0 there are some issues by acting on the KEY_UP Event. Especially for games in actionscript 3.0.
Application - Source
In the Application, start off by pressing “D” to move right, and “A” to move left. The problem is that when you are holding D to move right, lets say you press “W” to move up (now i don’t have W set up to work in this application, but none the less) the whole point is to have “D” still executing while you lift up back off from “W”.
To accomplish this, I created a keyboardManager Singleton class, the class holds an array of keys that are down (downKeys:Array). and 2 functions that execute on keyUp and keyDown.
On keyDown it takes a look at the downKeys array and see’s if it is empty… if so, then it adds the keyEvent to the array, and then it exits…
On keyUp it loops over the downKeys Array and splices it removing the correct keyEvent out of the array….
There is one trick that I do though… there is an outer document that actually adds the listeners for the keyUp and keyDown, in those listener functions, thats where I call the keyboardManager. The trick is on the keyUp listener, I do some checking to find out if I need to re-call the keyDown functions for the keys that are still down…
Typically in the type of game that I am making, I’m only going to be using W,S,D,A for my keys then adding some mouse interaction later on. I wanted the feel with the keyboard to be better than some of the examples I’ve seen, where the KeyUp Event is where things just get removed or speed gets set back to zero…
I wanted to be able to press “D”, then press “A” to back up a little, and take my finger off of “A” with the original “D” still pressed, and have “D” still be getting called…
Anyway it’s late, and I’m tired (it’s 2:45 am)…
Night…
ps… 360flex kicked ass… Thanks to the crew of guitar hero’ers that made it feel real homey… and for the huge attempts at getting rockband working…. a big thanks to Tom, and John for putting on the conference… it was by far the best conference i’ve been to.
Application - Source
源文档 <http://www.axelscript.com/2008/02/29/keyboardmanagement-for-games-in-actionscript-3/>
分享到:
相关推荐
2. **3D图形处理**:在AS3中,可以使用Stage3D API来实现高性能的3D图形渲染。Stage3D是Flash Player 11引入的新特性,允许开发者直接与GPU交互,提高了3D游戏和应用的运行效率。 3. **开源框架**:这个3D键盘项目...
2. **面向对象编程**:AS3中的类和对象是OOP的基础。类定义了对象的属性和方法,对象是类的实例。理解类的继承(extends)和多态(polymorphism)是编写复杂游戏逻辑的关键。 3. **事件处理**:在AS3中,事件驱动...
本篇将深入探讨如何在AS3中实现自定义键盘,以及相关的重要知识点。 首先,自定义键盘通常在需要替代或扩展默认键盘功能的场景下使用,比如移动设备上输入限制或特殊用途的输入需求。在AS3中创建自定义键盘,我们...
5. **游戏逻辑**:在AS3中,我们可以通过编写游戏循环(Game Loop)来更新游戏状态。游戏循环不断地检测当前状态,更新玩家位置,处理碰撞,检查胜利条件,并渲染新帧。 6. **音频处理**:AS3的Sound和SoundChannel...
1. **用户交互**:玩家通过鼠标或键盘控制挡板移动,这个功能可以通过监听AS3中的鼠标事件(如MOUSE_DOWN, MOUSE_UP, MOUSE_MOVE)和键盘事件(如KEY_DOWN, KEY_UP)来实现。挡板的移动则通过改变其舞台上X和Y坐标来...
3. 游戏对象类:包含游戏中的角色、敌人、道具等,每个类都有自己的属性和方法,如位置、速度、碰撞检测等。 4. 碰撞检测:使用矩形碰撞、像素级碰撞或其他算法来检测游戏元素间的交互。 5. 用户界面:显示分数、...
AS3中可自定义碰撞检测函数,或者使用内置的`hitTestObject`或`hitTestPoint`方法进行检测。 6. **动画与图形渲染** 游戏中的角色移动、射击效果等都需要动画支持。AS3允许动态改变显示对象的位置、旋转、缩放等...
3. **图形与动画**:Flash的图形库(Display Object hierarchy)在AS3中用于创建和管理游戏中的图形元素,如鸭子、枪、得分板等。通过Tween动画和帧动画技术,可以实现物体的移动、旋转和缩放效果,为游戏增加动态感...
1. **事件处理**:AS3中的EventDispatcher类提供了事件驱动编程的基础,框架会利用这一特性来处理用户输入、游戏状态改变等事件。 2. **图形渲染**:AS3提供了DisplayObject和DisplayObjectContainer类,它们是所有...
在贪吃蛇游戏中,AS3用于定义各种游戏对象(如蛇、食物、边界)的类,以及控制游戏流程的主类。 2. **游戏对象**:贪吃蛇游戏中的关键对象包括蛇、食物和边界。蛇由多个身体部分组成,每个部分都有自己的位置和方向...
在AS3中,Event类和addEventListener方法用于事件监听和处理,这是游戏响应玩家输入、更新游戏状态的关键。例如,点击事件、键盘事件等都可通过AS3的事件系统进行处理。"魔力学堂"中的战斗、移动、交互等操作,都...
总的来说,通过研究“Flex + AS3扑克牌类游戏源码1”,开发者可以深入理解Flex和AS3的结合应用,学习如何构建游戏逻辑、设计用户界面、实现网络通信以及增强用户体验。这对于提升游戏开发技能,特别是对于希望从事富...
2. **物理系统**:AS3可以实现简单的物理模拟,如碰撞检测和重力效果,这对于平台跳跃或射击类游戏至关重要。 3. **动画系统**:创建和管理游戏中的角色动画,包括帧动画和基于代码的动画。 4. **输入处理**:处理...
5. **键盘和鼠标输入**:游戏常常需要处理键盘和鼠标输入,AS3提供了KeyboardEvent和MouseEvent类来捕捉这些输入,比如玩家通过键盘控制角色移动,通过鼠标点击进行交互。 6. **动画制作**:通过改变DisplayObject...
11. **优化和性能**:在AS3中,理解如何优化代码和减少不必要的计算至关重要,特别是在处理大量对象或复杂动画时。 通过这个爬虫子小游戏,初学者可以实践AS3的基本概念,并逐渐掌握游戏开发的技巧。例如,学习如何...
在AS3中,这些对象通常被表示为类,每个类包含对应的状态变量和方法。 4. 坦克控制: 游戏中的坦克应该能够响应用户的键盘输入,改变移动方向和开火。这涉及到事件监听和处理,AS3中的EventDispatcher接口可以用来...
在AS3中,这些对象通常被定义为类,每个类包含属性(如位置、速度)和方法(如移动、射击)。 2. 渲染:AS3中的DisplayObject类是所有可视元素的基类,包括MovieClip和Sprite。开发者可以使用这些类创建游戏场景,...
在贪吃蛇游戏中,我们需要用到AS3来定义类、事件处理、对象交互等。 2. **图形与舞台**:Flex中的DisplayObject类是所有可视对象的基类,包括Sprite和MovieClip等。在游戏开发中,我们通常使用Sprite来创建游戏场景...
AS3 45度角游戏引擎通过专门优化的数学算法来处理这种视角下的图形绘制和交互,减少了开发者在实现这类游戏时的复杂性。 该游戏引擎的实现可能包括以下几个核心组件: 1. **渲染系统**:负责将游戏世界以45度角...