我一次又一次地问这个问题,并且得到了答案。它驱使我疯狂的evertytime我得到它。有时它有效,有时它不起作用。当我通过构造函数传递一个对象时,它给出了错误消息。所以我总是要制定第二种方法让它发挥作用。这是我的代码,如果有人可以请帮助我
var ds = new desertStorm(ship);
以上是我打电话的对象,下面是班级。
package com.objects{
import flash.display.MovieClip
public class desertStorm extends Stinger {
private var turret1:Torret;
private var swap:Boolean = false;
private var target:Avatar;
public function desertStorm(target:Object):void
{
this.target = target;
health = 2;
turret1 = new Torret();
eApi.addGameChild(turret1);
}
override public function updateObject():void
{
if(!swap)
{
eApi.swapGameChildren(this, turret1);
swap = true;
}
y += cspeed;
turret1.x = x;
turret1.y = (y + 40);
}
}
}
如果有人能帮助我,那就太棒了
答案 0 :(得分:1)
我遇到了同样的错误。在我的场景中,我在一个名为按钮的子文件夹中有一个类。我相应地修改了包语句(包括文件夹路径),并在实例化按钮文件夹中的类的类中正确使用了import语句。按钮文件夹中的类已附加到fla的库中的movieclip。
那是我的问题。对于库(fla)中的movieclip,我不得不修改符号属性>用于包含文件夹路径的类名称框。
我的类名为MakeButton.as,位于名为buttons的文件夹中。我因此修改了库中的符号,如下所示:buttons.MakeButton,其中buttons是MakeButton.as所在的子文件夹.flag,文档类和其他类位于buttons文件夹上方的文件夹中。
答案 1 :(得分:0)
您看到的错误似乎就在这一行:
eApi.addGameChild(turret1);
我会查看eApi
对象,看看addGameChild
是否接受任何参数。
答案 2 :(得分:0)
尝试将以下行添加到构造函数中:
super();
这将显式调用基类的构造函数并将其传递给零参数。可能是如果基类的构造函数没有以这种方式显式调用,则使用与子类的构造函数相同的参数调用它。
但这只是一种预感;我不记得ActionScript 3中构造函数的规则。
编辑:看来加布里埃尔麦克亚当斯在我面前想出了这个,但我没有及时看到他的评论。答案 3 :(得分:0)
This listing of compiler errors说:
如果基类的构造函数有一个或多个必需参数,则必须使用super()语句显式调用它。
鉴于您的错误(1203: No default constructor found in base class com.objects:desertStorm.
),看起来您正在某处扩展desertStorm
并需要使用适当的参数调用super()
函数。
下面给出的这个简单示例将因此编译错误而失败:
1203: No default constructor found in base class Class1.
表明问题出在Class1
扩展的类中。
所以,无论你是在扩展desertStorm
还是调用正确的超级构造函数,都要找到它。
package
{
import flash.display.MovieClip;
public class Class1 extends MovieClip
{
public function Class1(property:String)
{
super();
}
}
}
package
{
import flash.display.MovieClip;
public class Class2 extends Class1
{
public function Class2()
{
// You need to call the super constructor here.
// super("Work!");
}
}
}
如果我从参数中删除了ship并保持公共功能 desertStorm(目标:对象):无效。这是我得到的错误.... '1203:在基类com.objects中找不到默认构造函数:desertStorm。'
我不知道这意味着什么,但听起来我做的时候没有构造函数
虽然您有构造函数,但您没有默认构造函数。
如果您通过将它们从库拖到舞台上创建了desertStorm
的任何实例,则必须定义默认构造函数,例如:
public function desertStorm():void
{
super();
// Do simple initialisation behaviour here.
}
这是因为如果它有一个自定义构造函数,Flash不知道如何实例化你的类 - 它怎么能?
相反,将其他行为移动到初始化函数中,该函数了解您的target
对象的所有内容:
public function init(target:Object)
{
this.target = target;
health = 2;
turret1 = new Torret();
eApi.addGameChild(turret1);
}
然后你可以像这样实例化它:
var ds = new desertStorm();
ds.init(ship);
// Do whatever else you need to do with your desertStorm object, e.g.:
addChild(ds);
答案 4 :(得分:0)
我发现如果您不小心将类文件和fla文件放在不同的文件夹中,将显示1136错误。确保fla文件找到了类文件。
答案 5 :(得分:0)
以下是一些现有回复的简单版本:
确保符号属性中的链接名称/类路径包含类的完整包路径。
例如,如果您的包是com.company.project,并且您的类是MyClass,则“符号属性”中“类”框中的字符串必须为:
com.company.project.MyClass
如果你在该框中只有MyClass,Flash会为你创建一个类定义,而不是你编码的那个,这就是为什么没有构造函数参数并给你“预期0”错误。
答案 6 :(得分:-1)
事实证明,问题在于附加到库中动画片段的自定义类。由于某种原因,你不能将争论传递给附有图书馆动画片段的类。不相信我?尝试一下!!!
嗯,对于谁给了我一个否定的人,试试这个
package {
import flash.display.MovieClip;
public class Main extends MovieClip
{
public function Main():void
{
var test:Block = new Block("test");
}
}
}
添加以下内容
package com {
import flash.display.MovieClip;
public class Block extends MovieClip
{
public function Block(test:String):void
{
trace(test);
}
}
}
然后创建一个块动画片段并将其附加到Block。确保将Block放入com文件夹。这样做时,您将获得以下内容
1136: Incorrect number of arguments. Expected 0.
如果你把Block放到带有fla文件的根文件夹中,它应该可以正常工作。