大家好,所以我在我的platforms
电影剪辑中有一个名为mcTaco
所以platforms.mcTaco
的电影片段。我使用代码动态地将platforms
和player
我检查hitTest碰撞添加到舞台。当我检查player
和platforms.mcTaco
碰撞时,一切正常。当我在mcTaco
动画片段中复制platforms
创建多个实例时,我遇到了主要问题。
我知道我必须将它们添加到数组中并使用for循环来检查多个platforms.mcTaco
实例的hitTest,但我不知道如何实现这一点。我正在为我的代码使用IDE Flash Develop,这是我到目前为止所拥有的:
我将平台添加到舞台上,如下所示:
//ADD PLATFORMS AND ENVIRONMENT
private function addPlatForms():void
{
//Add Obstacle Platforms
platforms = new mcPlatforms();
platforms.x = (stage.stageWidth / 2) - 80;
platforms.y = (stage.stageHeight / 2) + 165;
addChildAt(platforms, 1);
aPlatformArray.push(platforms);
//trace(aPlatformArray.length + " NPLATFORMS");
}
和我的玩家:
//Add Character
player = new mcPlayer();
player.x = (stage.stageWidth / 2) - 80;
player.y = (stage.stageHeight / 2) + 78;
addChildAt(player, 1);
在我的ENTER_FRAME事件监听器中,我这样做是为了测试player
和platforms.mcTaco
hitTest,如下所示:
private function tacoHitTestHandler():void
{
if (player.hitTestObject(platforms.mcTaco))
{
platforms.mcTaco.visible = false;
trace("HIT TACO");
}
}
我只是需要一些帮助来弄清楚如何去做这件事。我将我的Taco数组private var aTacoArray:Array;
实例化,但我不知道如何将platforms.mcTaco
影片剪辑推入其中以使用for循环来测试它。任何有关如何做到这一点的帮助将不胜感激。我只是不想做if (player.hitTestObject(platforms.mcTaco1) || player.hitTestObject(platforms.mcTaco2) etc...)
答案 0 :(得分:1)
您需要在每个平台内循环子项以按类或/和名称获取所有炸玉米饼。
private function tacoHitTestHandler():void
{
// Loop through the list of the platforms.
for (var i:int = 0; i < aPlatformArray.length; i++)
{
// Get a platform instance from the Array.
var aPlatform:mcPlatforms = aPlatformArray[i];
// Loop through the children of a platform.
for (var j:int = 0; j < aPlatform.numChildren; j++)
{
// Get a potential taco.
var aTaco:mcTaco = aPlatform.getChildAt(j) as mcTaco;
// Skip if it is not a taco.
if (!aTaco) continue;
// Ignore invisible objects.
if (!aTaco.visible) continue;
// Ignore wrong tacos by name.
if (aTaco.name != "mcTaco") continue;
// Hit test against taco.
if (player.hitTestObject(aTaco))
{
aTaco.visible = false;
trace("HIT TACO");
}
}
}
}
一些注释。
首先,调用类 mcTaco 并提供相同的实例名称 mcTaco 会让人头疼,因为有些时候您的代码无法确定,如果您引用的话一类声明的实例。
其次,用大写的头字母打电话给你的课,因为它很好。一个不错的苏格兰 McTaco 就足够了。
答案 1 :(得分:0)
您可以像使用平台一样将炸玉米饼推送到aTacoArray:
aTacoArray.push(myTacoMC);
然后你可以循环使用它们并测试每个碰撞:
private function tacoHitTestHandler():void
{
for(var i:int = 0; i < aTacoArray.length; i++)
{
// get taco from array
var currentTaco:MovieClip = aTacoArray[i];
if (player.hitTestObject(currentTaco))
{
currentTaco.visible = false;
trace("HIT TACO");
}
}
}