Flash Actionscript 3中的hitTestObject错误1046

Flash Actionscript 3中的hitTestObject错误1046,flash,actionscript,Flash,Actionscript,我刚开始在AS3中做一些编程,但仍有一些事情我不清楚 我的项目有三个不同的文件:twinrunner.fla、twinrunner.as和wall.as 我让墙从右向左滚动屏幕。当它击中玩家时,我想让它认出它。我试图用hitTestObject来实现这一点。但不幸的是,我只会出错 twinrunner.as 华尔街 公共类墙扩展了MovieClip { 私有变量vx:int; 公共功能墙() { addEventListener(Event.ADDED_至_阶段,OnAddedStatage);

我刚开始在AS3中做一些编程,但仍有一些事情我不清楚

我的项目有三个不同的文件:
twinrunner.fla
twinrunner.as
wall.as

我让墙从右向左滚动屏幕。当它击中玩家时,我想让它认出它。我试图用
hitTestObject
来实现这一点。但不幸的是,我只会出错

twinrunner.as 华尔街
公共类墙扩展了MovieClip
{
私有变量vx:int;
公共功能墙()
{
addEventListener(Event.ADDED_至_阶段,OnAddedStatage);
}
AddedStatage上的私有函数(事件:事件):void
{
x=舞台宽度;
y=300;
_vx=-5;
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
addEventListener(Event.REMOVED_FROM_STAGE,onRemovedFromStage)
addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
RemovedFromStage上的私有函数(事件:事件):无效
{
removeEventListener(Event.ENTER_FRAME,onEnterFrame);
移除EventListener(Event.ADDED_至_阶段,OnAddedStatage);
removeEventListener(Event.REMOVED_FROM_STAGE,onRemovedFromStage);
痕迹(“墙壁移除”);
}
私有函数onKeyDown(事件:KeyboardEvent):无效
{
if(event.keyCode==Keyboard.RIGHT)
{
_vx=-20;
}
}
私有函数onEnterFrame(事件:事件):void
{
x+=\u vx;
if(此.hitTestObject(播放器))
{
跟踪(“玩家命中”);
}
如果(x+宽度/2<0)
{
parent.removeChild(本);
}
}
}
每次我试图编译它时,都会出现错误1046:

类型未找到或不是编译常量:Player


我想这是一个相当愚蠢的错误,但我完全迷路了,不知道去哪里搜索。

我不完全理解这个游戏的概念,所以我会根据我已经理解的内容给你一个解决方案

起初我认为最好不要使用这个,但实际上是墙的实例名

if(wall.hitTestObject(Player))
{
   trace("player hit");
 }
另外,宽度也找不到,这意味着你必须添加(可能你忘了)

var-witdh:数字

此外,hitTestObject不是用于碰撞的精确方法。可以计算两个对象之间的距离并检查它们是否碰撞

这可以帮助您:


你在哪里定义了玩家

该错误表明编译器不知道播放器是什么。。是它自己的班级吗?如果是这样,这个hitTestObject测试将不起作用——您需要比较两个对象,而不是一个对象和一个类

可以通过在Twinrunner.as文件中声明Player类的实例(如果有)来修复此问题:

public static var player:Player = new Player();
player.x = whatever;
player.y = whatever;
addChild(player);
然后,要进行hitTest:

if(this.hitTestObject(twinrunner.player))
        {
            trace("player hit");
        }
如果你没有真正的玩家类,那么你需要制作一个

或者,
Player
真的在舞台上吗?如果是这样的话,你需要稍微改变一下。评论,并让我知道,如果是这样的情况

public static var player:Player = new Player();
player.x = whatever;
player.y = whatever;
addChild(player);
if(this.hitTestObject(twinrunner.player))
        {
            trace("player hit");
        }