【问题标题】:1067: Implicit coercion of a value of type Class to an unrelated type flash.display:DisplayObject. - Figuring out the issue1067:将 Class 类型的值隐式强制转换为不相关的 flash.display:DisplayObject 类型。 - 找出问题
【发布时间】:2014-12-24 06:27:49
【问题描述】:

我很难弄清楚这一点。这是我自己的第一个游戏的代码,每当我运行它返回的程序时:

场景 1,图层“Actionscript”,第 2 帧,第 95 行,第 36 列 1067: 将 Class 类型的值隐式强制转换为不相关的类型 flash.display:DisplayObject。

我试图在任何地方切换东西,但我不知道如何解决它。浏览周围我注意到一些关于混合实例和类的事情,但是我对此很陌生,不确定它们之间的差异以及从哪里开始解决这个问题。下面是我的全部代码。

import flash.events.Event;
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.events.MouseEvent;


stop();

var container:MovieClip = new MovieClip;
addChild(container);

//Make the player move
function playerMovement (event:Event):void
{
playerMC.y = stage.mouseY
}

stage.addEventListener(Event.ENTER_FRAME, playerMovement);
//-----

//Make playerLasers work
function playerShoot (event:MouseEvent):void
{
var playerLaser:MovieClip = new playerLaserMC;
playerLaser.y = playerMC.y + 69;
playerLaser.x = playerMC.x + 125;
container.addChild(playerLaser);
}

stage.addEventListener(MouseEvent.CLICK, playerShoot);
//add damage dealt here - 

//--------

//Spawn random enemies
function addEnemy(event:Event)
{

var sendEnemy:Number = Math.random();
if (sendEnemy<=.01)
{
    var enemyGenerator:Number = Math.random();
    var minY:uint = 0;
    var maxY:uint = 300;
    var rangeY = maxY - minY;
    var randomY:Number = Math.ceil(Math.random()*rangeY) + minY
}

    if (enemyGenerator <=.25)
    {
        var newEnemy1:MovieClip = new enemyType1();
        newEnemy1.x = 100;
        newEnemy1.y = randomY;
        container.addChild(newEnemy1);
    }
    else if(enemyGenerator>.25, enemyGenerator<=.5)
    {
        var newEnemy2:MovieClip = new enemyType2();
        newEnemy2.x = 100;
        newEnemy2.y = randomY;
        container.addChild(newEnemy2);
    }
    else if(enemyGenerator>.5, enemyGenerator<=.75)
    {
        var newEnemy3:MovieClip = new enemyType3();
        newEnemy3.x = 100;
        newEnemy3.y = randomY;
        container.addChild(newEnemy3);
    }
    else if(enemyGenerator>.75, enemyGenerator<=1)
    {
        var newEnemy4:MovieClip = new enemyType4();
        newEnemy4.x = 200;
        newEnemy4.y = randomY;
        container.addChild(newEnemy4);
    }
}

stage.addEventListener(Event.ENTER_FRAME, addEnemy);
//--------

//Destoy Enemies
function destroyEnemy(event:Event):void
{
if (container.hitTestObject(enemyType1))
{
    trace ("Hit Enemy");

}
else if (container.hitTestObject(enemyType2))
{
    trace ("Hit Enemy");

}
    else if (container.hitTestObject(enemyType3))
{
    trace ("Hit Enemy");

}
    else if (container.hitTestObject(enemyType4))
{
    trace ("Hit Enemy");

}

}

stage.addEventListener(Event.ENTER_FRAME, destroyEnemy);

【问题讨论】:

  • 你能澄清你的确切问题吗?你有什么问题?

标签: actionscript-3 flash


【解决方案1】:

enemyType1class 而不是 variable,因此你不能写:

if (container.hitTestObject(enemyType1)) {}

您已经创建了一个名为 newEnemy1 的类 enemyType1 的实例:

var newEnemy1:enemyType1 = new enemyType1();
newEnemy1.x = 100;
newEnemy1.y = randomY;
container.addChild(newEnemy1);

你通过它的变量调用这个实例:

if (container.hitTestObject(newEnemy1)) {}

【讨论】:

    【解决方案2】:

    我做了一个类似的例子,问题就解决了。但是,这样做的问题是,如果您在container 中添加newEnemy1,则hitTestObject 循环的事件会重复。运行程序可以看到输出窗口有

    follow..
    Hit Enemy
    Hit Enemy
    Hit Enemy
    Hit Enemy
    Hit Enemy
    ...
    

    因为playerLasernewEnemy1 都在container 中。 我这样解决了这个问题:

    替换此行...

    container.addChild(newEnemy1);
    

    addChild(newEnemy1);
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 2015-12-12
      • 2014-03-06
      • 2014-08-01
      • 2011-10-19
      • 2016-09-24
      相关资源
      最近更新 更多