我正在尝试访问一个孩子,所以我可以和那个孩子做一些hitTest,但是我得到了这个错误,你可能已经看过一百万次了,而且有足够的时间来理解它意味着什么,不像我(As3的新手)
1119: Access of possibly undefined property ground through a reference with static type flash.display:Sprite.
Saything,这是一些代码。
我在主构造函数中启动所有内容,然后将其添加到舞台
addChild(_scrollLayer);
//player
_scrollLayer.addChild(character);
//character.reset();
//character.x = 640;
character.y = 0;
//level
_scrollLayer.addChild(ground);
ground.x = 640;
ground.y = 680;
//greenGoblin
_scrollLayer.addChild(goblin1);
goblin1.x = 500;
goblin1.y = 0;
_scrollLayer.addChild(goblin2);
goblin2.x = 800;
goblin2.y = 0;
_scrollLayer.addChild(goblin3);
goblin3.x = 100;
goblin3.y = 0;
//red Goblin
_scrollLayer.addChild(redGoblin1);
redGoblin1.x = 1100;
redGoblin1.y = 400;
while (_scrollLayer.ground.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true))
这是我收到您在上面看到的错误消息。
我也尝试过这样做
while (ground.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true))
没有错误消息,hitTest如何不起作用,这是因为所有内容都在容器中。
这是完整的测试代码
for (var c:int = 0; c < childrenOnStage; c++)
{
if (getChildAt(c).name == "player")
{
if (ground.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true))
{
touchingGround = true;
while (ground.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true))
{
OnGround(getChildAt(c)).incrementUp();
if (ground.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true))
{
}
else
{
OnGround(getChildAt(c)).keepOnGround();
}
}
}
else
{
touchingGround = false;
//trace("not touch");
//character.gotoAndStop("jump");
}
}
//childrenOnStage is a variable. childrenOnStage = this.numChildren;
我不明白为什么命中测试不起作用。我希望得到答复,建议或提示。
谢谢。
答案 0 :(得分:2)
我可能会以这种方式对命中测试有点生疏(我比大多数人使用可视IDE更多),但我想我记得这个问题。
如果我没记错,DisplayObject对象的声明与编程对象不同,因为你不能简单地调用它们的名称来访问它们。 AS3认为你在Sprite上调用了一个属性。 (也就是说,如果你是从时间轴开始工作,那就是另一个故事。)
以下代码应该可以使用,但是未经测试。您的代码没有将“地面”视为DisplayObject,因此无法在其上调用“hitTestPoint”。因此,你必须解决这个问题。
var mcGround:MovieClip = MovieClip(_scrollLayer.getChildByName("ground"));
mcGround.hitTestPoint(getChildAt(c).x, getChildAt(c).y, true);
(感谢Amarghosh的回答here - 我用它交叉检查了我的代码。)