Flash 向数组添加对象时类型转换失败
我收到以下错误Flash 向数组添加对象时类型转换失败,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,我收到以下错误 Type Coercion failed: cannot convert Stinger@d8d43a1 to Array. 在总结中。这就是我想做的 var laser = new StingerLaser(); laser.laserDir = dir1; laser.wielder.push(this); laser.x = x + 20; laser.y = y + 40; eApi.addGameChild(laser);
Type Coercion failed: cannot convert Stinger@d8d43a1 to Array.
在总结中。这就是我想做的
var laser = new StingerLaser();
laser.laserDir = dir1;
laser.wielder.push(this);
laser.x = x + 20;
laser.y = y + 40;
eApi.addGameChild(laser);
其中laser.Welver是在StingerLaser类中声明的数组。到目前为止,我只尝试将一种类型的对象放入数组中。这就是毒刺
尝试将Stinger类型的对象添加到数组时。这是我的密码
package com.objects{
import flash.display.MovieClip
public class StingerLaser extends gameObject {
public var speed:Number = 20;
public var targets:Array;
public var laserDir:Number = -40;
public var wielder:Array; // <-------- Here is the array
public function StingerLaser():void{
stop();
wielder = new Array(); //<---- it gets declared here
targets = new Array();
}
override public function updateObject():void
{
blowUp();
rotation = laserDir;
//blowUp();
var xdir = Math.cos(laserDir * Math.PI/180);
var ydir = Math.sin(laserDir * Math.PI/180);
x += xdir * speed;
y += ydir * speed;
if(y > 800 || y < -30 || x > 800 || x < -30)
{
garbage = true;
}
if(eApi.gameStage[2] != undefined && eApi.gameStage[2] != null)
{
for(var i = 0; i < eApi.gameStage[2].length; i++)
{
if(hitTestObject(eApi.gameStage[2][i]) && eApi.gameStage[2][i] != wielder)
{
//dead();
var w:Boolean = false;
for(var wd = 0; wd < wielder.length; wd++)
{
if(eApi.gameStage[2][i] == wielder[wd])
w = true;
}
if(eApi.gameStage[2][i].dead != true && w != true)
{
eApi.gameStage[2][i].Hit(.01);
dead = true;
}
}
}
}
}//update object
protected function blowUp():void
{
if(dead)
{
play();
if(currentFrame == totalFrames)
{
garbage = true;
}
}
}
}
}
包com.objects{
导入flash.display.MovieClip
公共类StingerLaser扩展了gameObject{
公共var速度:数字=20;
公共var目标:数组;
公共var激光雷达:数字=-40;
公共变量持用者:数组;//800 | | x<-30)
{
垃圾=真;
}
if(eApi.gameStage[2]!=undefined&&eApi.gameStage[2]!=null)
{
对于(var i=0;i
下面是我试图放入数组中的类
package com.objects{
import flash.display.MovieClip
public class Stinger extends gameObject {
public var cspeed:Number = 2;
public var attackDelay:Number = 1350;
protected var scale:Number = 1;
public function Stinger():void
{
stop();
lastTime = getTime();
health = 1;
}
public function Hit(dmg:Number = .01):void {
if(health > 0)
health -= dmg;
if(health < 0)
health = 0;
}
public function blowUp():void
{
attackDelay = 100;
scaleX -= .01;
scaleY -= .01;
if((getTime() - lastTime) > attackDelay)
{
var explode = new Explosions();
explode.x = x - (width/2) + (Math.random()* width);
explode.y = y - (height/2) + (Math.random()* height);
explode.scaleX = scaleX;
explode.scaleY = scaleY;
eApi.addGameChild(explode,3);
lastTime = getTime();
}
if(scaleX < .5)
{
rotation = 25;
cspeed = 20;
}
}
override public function Attack(dir:Number = 40):void
{
if((getTime() - lastTime) > attackDelay)
{
var laser = new StingerLaser();
laser.laserDir = dir;
laser.wielder.push(this);
laser.x = x;
laser.y = y;
eApi.addGameChild(laser);
lastTime = getTime();
}
}
public function DoubleShot(dir1:Number = 40, dir2:Number = 120):void
{
if((getTime() - lastTime) > attackDelay)
{
var laser = new StingerLaser();
laser.laserDir = dir1;
laser.wielder.push(this);
laser.x = x + 20;
laser.y = y + 40;
eApi.addGameChild(laser);
var laser2 = new StingerLaser();
laser2.laserDir = dir2;
laser2.wielder.push(this);
laser2.x = x + -20;
laser2.y = y + 40;
eApi.addGameChild(laser2);
lastTime = getTime();
laser.wielder = this;
}
}
override public function updateObject():void
{
eApi.setChildIndex(this, (eApi.numChildren - 5));
if(!dead)
{
DoubleShot(70,110);
}
y += cspeed;
if(y > 800 || y < -45)
garbage = true;
if(health <= 0)
{
dead = true;
blowUp();
}
}
}
}
包com.objects{
导入flash.display.MovieClip
公共类毒刺扩展游戏对象{
公共变量cspeed:Number=2;
公共var attackDelay:Number=1350;
保护var标度:数字=1;
公用函数托管架():void
{
停止();
lastTime=getTime();
健康=1;
}
公共函数命中(dmg:Number=.01):无效{
如果(运行状况>0)
健康-=dmg;
如果(健康状况<0)
健康=0;
}
公共函数blowUp():void
{
攻击延迟=100;
scaleX-=.01;
scaleY-=.01;
if((getTime()-lastTime)>attackDelay)
{
var explode=新爆炸();
explode.x=x-(宽度/2)+(Math.random()*宽度);
explode.y=y-(高度/2)+(数学随机()*高度);
explode.scaleX=scaleX;
explode.scaleY=scaleY;
eApi.addGameChild(explode,3);
lastTime=getTime();
}
如果(scaleX<.5)
{
旋转=25;
cspeed=20;
}
}
覆盖公共函数攻击(dir:Number=40):无效
{
if((getTime()-lastTime)>attackDelay)
{
var激光=新的StingerLaser();
laser.laserDir=dir;
激光。持用者。推(这个);
激光x=x;
激光y=y;
eApi.addGameChild(激光);
lastTime=getTime();
}
}
公共功能双重射击(dir1:Number=40,dir2:Number=120):无效
{
if((getTime()-lastTime)>attackDelay)
{
var激光=新的StingerLaser();
laser.laserDir=dir1;
激光。持用者。推(这个);
激光,x=x+20;
激光,y=y+40;
eApi.addGameChild(激光);
var laser2=新的StingerLaser();
laser2.laserDir=dir2;
激光2。持用者。推(这个);
激光器2.x=x+-20;
激光器2.y=y+40;
eApi.addGameChild(激光2);
lastTime=getTime();
laser.Welver=这个;
}
}
重写公共函数updateObject():void
{
eApi.setChildIndex(这个(eApi.numChildren-5));
如果(!死了)
{
双打(70110);
}
y+=cspeed;
如果(y>800 | | y<-45)
垃圾=真;
如果(health数组非常开放,您可以将任何需要的内容推入其中。下面是导致您出现问题的代码行:
laser.wielder = this
它在“毒刺”类,方法“双重射击”中
祝你好运!阵列非常开放,你可以将任何你想要的东西放入其中。下面是导致你麻烦的代码行:
laser.wielder = this
它在“毒刺”类,方法“双重射击”中
祝你好运!你的问题是这一行:
laser.wielder = this;
您正在将持用者(阵列)分配给“this”,这是一个毒刺。您的问题是这行:
laser.wielder = this;
您正在将持用者(一个数组)分配给“this”,这是一个毒刺。Flash中的数组非常松散!它们不限于单一类型,因此可以包含任意数量的不同类型的对象。例如,这在ActionScript 3中是有效的:
var arr:Array=new Array();
arr.push(“苹果”);
arr.push(新的MovieClip());
arr.push(234);
arr.push(新StingerLaser());
trace(arr);//Traces:“苹果”[object MovieClip],234[object StingerLaser]
因此,您的问题实际上并没有添加到阵列中。这是因为在Stinger类的DoubleShot方法的以下行中:
laser.wielder = this;
“this”指的是Stinger类的实例
注:要使数组只能有一种类型,必须使用顶级类型。但是,这仅在发布到FlashPlayer 10时可用。Flash中的数组非常松散!它们不限于单个类型,因此可以包含任意数量的不同类型的对象。例如,这在ActionScript 3中是有效的:
var arr:Array=new Array();
arr.push(“苹果”);
arr.push(新的MovieClip());
arr.push(234);
arr.push(新StingerLaser());
trace(arr);//Traces:“苹果”[object MovieClip],234[object StingerLaser]
因此,您的问题实际上并没有添加到阵列中。这是因为在Stinger类的DoubleShot方法的以下行中:
laser.wielder = this;
“this”指的是Stinger类的实例
注:要使数组只能有一种类型,必须使用顶级类型。但是,这仅在发布到FlashPlayer 10时可用。此外,您可能需要查看StingerLaser的updateObject方法中的以下行:
if(hitTestObject(eApi.gameStage[2][i])&eApi.gameStage[2][i]!=持用者)
它似乎在比较持用者(阵列)和什么