制作CC动画,为收藏品创建代码



自从Macromedia之后,我就没有编码过,天哪,事情已经改变了。我正处于一个陡峭的学习曲线上,并试图重新进入其中。

我正在做一个小的快闪游戏,玩家收集玉米卷,分数就会上升。

我在网上找不到任何可以为我在动画CC上赚钱的代码。我不确定为什么会这样。脚本运行良好,调试检测不到任何东西。但是代码没有任何作用。

我试过这个:

if(player.hitTestObject(taco1))
{
if(back.contains(taco1))
removeChild(taco1);
score += 10;
points.text = String(score);
}

要么不收集玉米卷,要么玉米卷跟随玩家(如果我把它放在主场景中的话)

我还试着在AS3游戏教程中提供的代码中插入我的实例。它可以在这里看到,没有改变。

if(keyCollected == false){ // if we still haven't collected the key
if(player.hitTestObject(back.doorKey)){ // and if the player collides 
with the key
back.doorKey.visible = false; // hide the key from view
keyCollected = true; // set our Boolean to true
}
}

这些都不起作用。

很抱歉,我是论坛的新手,已经十年没有编码了。但任何正确的方向都会很有帮助!非常感谢。

似乎应该将hitTestObject封装在函数中,并在ENTER_FRAME事件或TimerEvent上运行它。如果没有ENTER_FRAME或计时器,您的代码将只运行一次,因此您看不到任何效果。

从您的代码中,我可以看出您有一个对taco1对象的引用,该对象属于back的对象。

if(back.contains(taco1))
removeChild(taco1);

在上面的代码中有一个问题。你应该有:

if(back.contains(taco1))
back.removeChild(taco1);

除此之外,代码块应该可以正常工作。例如,使用ENTER_FRAME事件,您的代码将如下所示:

this.addEventListener(Event.ENTER_FRAME, collectTaco);
function collectTaco(evt:Event):void {
if(taco1 != null && player.hitTestObject(taco1)) {
if(back.contains(taco1)) {
back.removeChild(taco1);
taco1 = null;
}
score += 10;
points.text = String(score);
}
} 

请注意,有一种假设是taco1对象始终包含对要进行测试的taco的引用。这就是为什么我在将taco1背面移除后将其作废的原因。收集玉米卷后,if语句将评估为false,因此不会再次尝试收集。我认为随着游戏的进行,你会创建更多的玉米卷,你必须将新玉米卷的引用设置为taco1

如果你在舞台上有更多的玉米饼,你应该遍历所有的玉米饼(要么将它们存储在Vector中,要么只遍历返回父对象的所有子对象,也许可以测试它们是否是玉米饼),并对所有的玉米卷进行命中测试。

相关内容

  • 没有找到相关文章

最新更新