我有两个问题。
第一个问题是以下功能;当我在(enterFrame)中调用函数时,它不起作用:
onClipEvent (load) {
function failwhale(levelNum) {
_root.gotoAndStop("fail");
failFrom = levelNum;
}
function guardSightCollision(guardName, guardSightName) {
if (_root.guardName.guardSightName.hitTest(_x, _y+radius, true)) {
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x, _y-radius, true)) {
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x-radius, _y, true)) {
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x+radius, _y, true)) {
failwhale(1);
}
}
}
onClipEvent (enterFrame) {
guardSightCollision(guard1, guard1Sight);
}
为什么不起作用?...
第二个问题在于failFrom变量:
function failwhale(levelNum) {
_root.gotoAndStop("fail");
failFrom = levelNum;
}
如何使failFrom为“全局”变量,因为它可以在任何地方访问(从帧中的动作脚本甚至动画片段)...现在,当我尝试在不同的帧中跟踪failFrom时,它是“未定义的” ”
答案 0 :(得分:0)
failFrom将从您跟踪的任何其他地方“未定义”的原因是因为您只是在您在答案中添加的所有功能中本地声明它。如果要像全局变量一样访问它,则必须将其分配给可在任何地方访问的对象。喜欢_root。
function failwhale(levelNum)
{
_root.failFrom = levelNum;
}
function anotherFunc()
{
trace( "failed on: " + _root.failFrom );
}
如果从脚本中的任何其他地方调用anotherFunc,如果在调用anotherFunc之前已经分配了任何内容,它应该正确地打印出failFrom。
至于你的功能问题。看起来你正试图在事件处理程序中定义函数。通过使用onClipEvent,您可以在时间轴中添加它。如果是这种情况,您的load事件将定义不再可用于on enter frame事件的本地函数。应该始终定义辅助函数:
function failwhale(levelNum)
{
//...
}
function guardSightCollision(guardName, guardSightName)
{
//...
}
onClipEvent (enterFrame)
{
guardSightCollision(guard1, guard1Sight);
}
由于您添加的功能与剪辑事件的范围相同,因此可以从enterFrame访问它们。
答案 1 :(得分:0)
您可以将它放在_global上,而不是将值放在_root上。当你没有明确指定范围时,它/似乎/本地值(在函数/对象上)将覆盖_root,然后_root覆盖_global。我看到各种各样的东西使用_global而不是_root,但我不确定任何真正的好处。
如果您想在实例上使用函数定义,请尝试:
onClipEvent (load)
{
this.failwhale = function (levelNum)
{
_root.gotoAndStop("fail");
failFrom = levelNum;
}
this.guardSightCollision = function(guardName, guardSightName)
{
if (_root.guardName.guardSightName.hitTest(_x, _y+radius, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x, _y-radius, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x-radius, _y, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x+radius, _y, true))
{
failwhale(1);
}
}
}
onClipEvent (enterFrame)
{
this.guardSightCollision(guard1, guard1Sight);
}
否则,您应该将它们放在父对象(或根时间轴)的时间轴上,并引用对象方向,如:
myobject.failwhale = function (levelNum)
{
_root.gotoAndStop("fail");
failFrom = levelNum;
}
myobject.guardSightCollision = function(guardName, guardSightName)
{
if (_root.guardName.guardSightName.hitTest(_x, _y+radius, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x, _y-radius, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x-radius, _y, true))
{
failwhale(1);
}
if (_root.guardName.guardSightName.hitTest(_x+radius, _y, true))
{
failwhale(1);
}
}
myobject.onEnterFrame = function()
{
this.guardSightCollision(guard1, guard1Sight);
}
另外,我建议强烈输入变量/参数,以便进行编译错误检查和一些速度提升。