自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
}
}
这一切都不起作用。
对不起新的论坛,并且十年没有编码。但正确方向的任何一点都会非常有用!谢谢!
答案 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)并对所有人进行命中测试。