получаю следующую ошибку ..
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.wielder - Массив, который объявлен внутри класса 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;
}
}
}
}
}
Вот класс, который я пытаюсь поместить в массив
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();
}
}
}
}
Если никто не может решить эту проблему, по крайней мере, я хотел бы знать, насколько свободен массив в ActionScript? Можно ли использовать все типы классов или только классы одного родительского класса или что? спасибо!