Actionscript 3 使用多个类控制角色
我正在尝试创建一个虚拟宠物/基本模拟人生类型的游戏。 我将使用独立的类文件,并在主游戏文件中调用它们。 我试图写一个类来控制我的角色,我可以把它添加到舞台上,但我的一生都无法让它移动。 我只花了4个小时看教程,阅读书籍,只是看不到我错过了什么。 有谁能给我一些建议,让这个工作? 这是我的密码 这是我的主课Actionscript 3 使用多个类控制角色,actionscript-3,actionscript,Actionscript 3,Actionscript,我正在尝试创建一个虚拟宠物/基本模拟人生类型的游戏。 我将使用独立的类文件,并在主游戏文件中调用它们。 我试图写一个类来控制我的角色,我可以把它添加到舞台上,但我的一生都无法让它移动。 我只花了4个小时看教程,阅读书籍,只是看不到我错过了什么。 有谁能给我一些建议,让这个工作? 这是我的密码 这是我的主课 package { import flash.display.MovieClip; import MainCharacter; import flash.events
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;
}
}
}
}
这是角色类
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移动到多个位置,但仍然无法使其工作。
我猜我遗漏了一些明显的东西,但我不知道是什么 您需要将
键盘事件
侦听器添加到舞台-目前,它仅在您的角色具有文本焦点时才起作用,而文本焦点永远不会起作用
我喜欢一个简单的设置,它有一个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;
}
}
好处:
- 您的代码是中心的-易于更改
- 易于禁用或启用(暂停功能)
- 您可以添加简单的回调(
带有Dictionary
键和int
值)Function
- 您可以轻松添加方法,如
或justPressed(key)
justrelease(key)
- 您不会遇到重复按键的问题(当按下按键时,Flash将重复
事件)key\u down
\u onKeyDown()
和\u onKeyUp()
函数添加边界检查,因为Android Home和Back键的键值非常高
注意:如果它仍然不起作用,请确保您已经给出了阶段焦点(即单击它),并且您不在TextField
等(stage.focus=null
)有趣的项目中-除了下面的答案之外,您是否正在创建Tamagotchi
的实例并将其添加到阶段?要养成习惯的一件事是,当你想检查是否有事情发生时,使用trace()
语句作为诊断——关键事件等。触发等。此外,如果有你以前没有使用过的方法和函数,请制作快速测试影片——从中学习,然后应用到你的项目中。是的,我可以在舞台上找到角色,但仍然无法让它移动!我被难住了。我尝试过使用实例名称,在开始时使用。this
,甚至在开始时使用阶段。
。没有什么。没什么。我只是不明白。是的,我在keyPressListener函数中添加了一个跟踪语句,但仍然没有任何结果。它快把我逼疯了!说实话,这让我很困惑!我真的是一个新手,这是很多代码,我甚至还没有学会,并没有完全理解。我想理解并使用代码,如果只是复制你给我看的东西,我会觉得自己像个骗子,但我真的很感激。当我完全理解它时,我将保留它以备将来参考。:)基本上,它是在做你正在做的事情,除了它在一个专门的课程中,简化了你的生活。您只需调用isKeyPressed(key)
,而无需到处添加事件侦听器。一般来说,一个事件监听器位于中心位置优于多个事件监听器(您可以使用Update
类对输入帧事件遵循相同的原则)。这些方便的常量可以在键盘类中找到。