我正在尝试创建一个虚拟宠物/基本模拟人生型游戏。 我将使用独立的类文件并在主游戏文件中调用它们。 我正在尝试写一个班来控制我的角色,我可以将它添加到舞台上,但是不能让我的生活让它移动。 我花了4个小时观看教程,看书,却看不到我错过的东西。 有人能为我提供一些建议吗? 这是我的代码......
这是我的主要班级......
package {
import flash.display.MovieClip;
import MainCharacter;
import flash.events.KeyboardEvent;
public class Tamagotchi extends MovieClip {
public function Tamagotchi() {
var item:MainCharacter = new MainCharacter();
addChild(item);
item.addEventListener(KeyboardEvent.KEY_DOWN, item.KeyPressListener);
}
}
}
这是角色类...
package {
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.events.MouseEvent;
public class MainCharacter extends MovieClip {
var soph: MovieClip = new SophRun;
public function MainCharacter() {
addChild(soph);
soph.x = 200;
soph.y = 300;
soph.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressListener);
}
public function KeyPressListener(e:KeyboardEvent):void {
if (e.keyCode == 65)
{
soph.x -= 2;
}
if (e.keyCode == 68)
{
soph.x += 2;
}
if (e.keyCode == 87)
{
soph.y -= 2;
}
if (e.keyCode == 83)
{
soph.y += 2;
}
}
}
}
我已将eventlistener移动到多个地方但仍无法使其正常工作。 我猜我错过了一些明显的东西,但无法弄清楚是什么!
答案 0 :(得分:2)
你需要将KeyboardEvent
监听器添加到舞台上 - 目前它只有在你的角色具有文字焦点时才有效,这是不会有的。
我喜欢的一个简单的设置,它有一个Input
类,它添加了必要的事件监听器,然后你可以用来检查是否按下了键。类似的东西:
public class Input
{
// handy constants for common keys
public static const A:int = 65;
public static const B:int = 66;
...
public static const LEFT:int = 37;
public static const UP:int = 38;
public static const RIGHT:int = 39;
public static const DOWN:int = 40;
private var m_keysPressed:Vector.<Boolean> = null; // the keys currently pressed
public function Input( stage:Stage )
{
// we create our vector for the max number of keys that we're going to support (standard keyboard)
this.m_keysPressed = new Vector.<Boolean>( 225, true );
// add our listeners
stage.addEventListener( KeyboardEvent.KEY_DOWN, this._onKeyDown );
stage.addEventListener( KeyboardEvent.KEY_UP, this._onKeyUp );
}
public function isKeyPressed( key:int ):Boolean
{
if( key < 0 || key >= this.m_keysPressed.length )
return false;
return this.m_keysPressed[key];
}
private function _onKeyDown( e:KeyboardEvent ):void
this.m_keysPressed[e.keyCode] = true;
}
private function _onKeyUp( e:KeyboardEvent ):void
{
this.m_keysPressed[e.keyCode] = false;
}
}
这样,您的所有输入代码都是中心。然后您可以通过以下方式调用它:
if( myInput.isKeyPressed( Input.UP ) )
// move up
好处:
Dictionary
int
键和Function
值)justPressed( key )
或justReleased( key )
等方法KEY_DOWN
事件)如果您计划在移动设备上使用此功能,则可能需要为_onKeyDown()
和_onKeyUp()
功能添加边界检查,因为Android Home和Back键具有愚蠢的高keyCode
值
注意:如果它仍然不起作用,请确保您已经给予舞台焦点(即点击它),并且您不在TextField
等(stage.focus = null
)