2017-10-09 239 views
1

自Macromedia以来,我还没有编码,上帝的事情已经改变。我处于一个陡峭的学习曲线,并试图回到它。Animate CC,创建可收藏的代码

我正在做一个小型的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

看来你应该将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对象始终坚持自己的,你想打的测试与塔科参考。这就是为什么我从返回取消taco1。在taco收集后,if语句将被评估为false,因此不会尝试再次收集它。我想你会在游戏进行时制作更多炸玉米饼,并且您必须将新塔克酱的参考设置为taco1

如果你在舞台上有更多的炸玉米饼,你应该遍历所有的炸玉米饼(或者将它们存储在一个Vector中,或者只是通过父母的所有孩子,或者测试它们是否是塔科炸玉米饼)测试他们所有人。

+0

这似乎运行良好,但它之间交替无所作为,或告诉我“collecttaco”不存在。它需要一个var吗? –

+0

然后你可能只有一些框架上的代码片段。它应该在时间轴上具有全球范围(因为它看起来你的游戏是在时间轴上构建的)。你能证实吗?如果不是,你能描述一下这个架构吗? –