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

时间:2017-10-09 22:06:13

标签: actionscript action cc animate-cc

自Macromedia以来我没有编码,上帝的事情发生了变化。我处于陡峭的学习曲线,并试图回到它。

我制作了一个小型Flash游戏,玩家收集炸玉米饼并且分数上升。

我找不到可以收取资金的在线代码,我可以在Animate 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
}
}

这一切都不起作用。

对不起新的论坛,并且十年没有编码。但正确方向的任何一点都会非常有用!谢谢!

1 个答案:

答案 0 :(得分:1)

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

从您的代码中我可以看出您引用了 taco1 对象,该对象属于后退对象。

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中,或者只是通过后退父级的所有孩子,并测试它们是否为Taco)并对所有人进行命中测试。