我是动作脚本的新手,我一直在努力创造一个侧面滚动游戏。一切顺利,直到我意识到我需要一个游戏而不是功能。问题是我有许多movieclip对象,它们有自己的实例名称,我可以从我的文档类中访问它。
然而,现在我有一个新的文档类启动我的旧文档类来启动游戏,并且还通过屏幕启动游戏,所以我可以重置游戏。除了现在我得到了所有50个实例对象的未定义属性的错误访问(填空)。
所以我的问题是如何让flash识别并允许我的非文档类,类来操作这些Movie Clip实例。
我创建了一个小规模的例子来说明我想要做的事情。
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
public class Test extends MovieClip {
public static var gstage:Stage;
public function Test() {
// constructor code
var playScreen:Go = new Go();
addChild( playScreen );
}
}
}
以上是我的Document类" moveme是实例的名称
另一个类是我的旧Document类
package {
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
import Test;
public class Go extends MovieClip {
public var test:Test;
public function Go()
{
if (stage)
{
init();
}
else
{
addEventListener(Event.ADDED_TO_STAGE, init);
}
}
private function init(e:Event = null):void
{
if (e) removeEventListener(Event.ADDED_TO_STAGE, init);
trace(stage.width);
addEventListener(Event.ENTER_FRAME, loop);
}
public function loop(e:Event, Test):void
{
Test.moveme.scaleX++
Test.moveme.x++
}
}
}
我得到的错误是ArgumentError:错误#1063:Go / loop()上的参数计数不匹配。预计2,得到1。
或者如果我在公共函数循环中删除Test(e:Event,Test):void我得到了和以前一样的错误。我已经尝试了很多东西,我可以用它来追踪舞台宽度,我似乎无法控制实例。
任何帮助将不胜感激!
答案 0 :(得分:1)
由于以下原因,这是错误的:
public function loop(e:Event, Test):void
{
Test.moveme.scaleX++
Test.moveme.x++
}
另外,函数体正在尝试调用类的变量,而不是实例,它应该是:
{
test.moveme.scaleX++
test.moveme.x++
}
在您的情况下,因为test是Class的一个实例,所以Test是一个Class 但是没有理由将Test作为参数传递,只需删除它并仅保留e:Event部分。如果您确实想要使用它,那么使用传递的参数实例,如下所示:
{
// provided that use passed parameter type of Test as a testObj, like in my example
testObj.moveme.scaleX++
testObj.moveme.x++
}
答案 1 :(得分:0)
当事件Event.ENTER_FRAME触发并调用循环时,它只将一个参数(事件本身)传递给函数“loop”。然而,函数“loop”需要2个参数,即未知类型的“e:Event”和“Test”。您可以从函数中删除第二个参数,因为您不在函数中使用它,或者如果您打算稍后从其他地方调用该函数并传递第二个参数,则将其设置为null,以便Event.ENTER_FRAME可以正确地调用它:
或者:
public function loop(e:Event):void
或者:
public function loop(e:Event, test : Test = null):void