在非构造函数上尝试实例化

时间:2013-12-10 00:11:21

标签: arrays actionscript-3 flash instantiation

我正在尝试制作炸弹捕捉游戏(我实际上正在使用阵列中的书中的AS3课堂代码)。当我在代码中将单词fruit更改为炸弹时,我得到了错误1007.除了将basket_mc更改为eod_mc并将水果更改为炸弹(我使用命令-F并将其替换为区分大小写)之外,我没有太大改变。它适用于eod_mc,但不适用于炸弹。

var bombArray:Array = new Array(bomb);
var bombsOnstage:Array = new Array();
var bombsCollected:int = 0;
var bombsLost:int = 0;
for (var i:int = 0; i<20; i++) {
var pickBomb = bombArray[int(Math.random() * bombArray.length)];
var bomb:MovieClip = new pickBomb();
addChild(bomb);
bomb.x = Math.random() * stage.stageWidth-bomb.width;// bomb.width is subtracted from the random x position to elimate the slight possibility that a clip will be placed offstage on the right.
bomb.y = Math.random() * -500;
bomb.speed = Math.random() * 15 + 5;
bombsOnstage.push(bomb);
}
eod_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragEod);
stage.addEventListener(MouseEvent.MOUSE_UP, dragStop);
function dragEod(e:Event):void {
eod_mc.startDrag();
}
function dragStop(e:Event):void {
eod_mc.stopDrag();
}
stage.addEventListener(Event.ENTER_FRAME, catchBomb);
function catchBomb(e:Event):void {
for (var i:int = bombsOnstage.length-1; i > -1; i--) {
    var currentBomb:MovieClip = bombsOnstage[i];
    currentBomb.y +=  currentBomb.speed;
    if (currentBomb.y > stage.stageHeight - currentBomb.height) {
        currentBomb.y = 0 - currentBomb.height;
        bombsLost++;
        field2_txt.text = "Total Bombs Detonated: " + bombsLost;
    }
    if (currentBomb.hitTestObject(eod_mc)) {
        bombsCollected++;
        removeChild(currentBomb);
        bombsOnstage.splice(i,1);
        field1_txt.text = "Total Bombs Caught: " + bombsCollected;
        if (bombsCollected >= 20) {
            eod_mc.gotoAndStop(20);
        } else if (bombsCollected > 15) {
            eod_mc.gotoAndStop(15);
        } else if (bombsCollected>10) {
            eod_mc.gotoAndStop(10);
        } else if (bombsCollected>5) {
            eod_mc.gotoAndStop(5);
        }
    }
}
    if (bombsOnstage.length <= 0) {
    field1_txt.text = "You Win! You have defused the bombs.";
    field2_txt.text = "";
    stage.removeEventListener(Event.ENTER_FRAME, catchBomb);
}
if (bombsLost >= 20) {
    field1_txt.text = "Sorry you lose. You have lost your foot!";
    field2_txt.text = "";
    stage.removeEventListener(Event.ENTER_FRAME, catchBomb);
    for (var j:int = bombsOnstage.length-1; j > -1; j--) {
        currentBomb = bombsOnstage[j];
        removeChild(currentBomb);
        bombsOnstage.splice(j,1);
    }
}

}

1 个答案:

答案 0 :(得分:0)

也许是为了避免让你的编程生活比现在更加扭曲......

编程中有对象和类,是对一组对象的描述,比如说“table”(或者,因为它最好区分类和变量的名称,“表“,首字母大写”是一个类的名称。 实例对象是属于一个或多个类的结构,其中Object是最顶层的,因为编程中的所有内容都是对象或“简单变量”,即数字,真/假,字符串(这些也是AS3中的对象类型,NumberBooleanString,但是这些通常不需要通过new)实例化,或者可能是其他一些我现在不记得的简单类型。

类具有属性方法。属性是可以从类的任何对象请求的东西,例如表的“高度”。属性可以是任何类型,包括嵌套对象,具体取决于您的基类。说AS3中的stage是任何DisplayObject的属性,用于获取运行时唯一的Stage对象[1]。方法是可以告诉类的任何对象。说,炸弹掉落,爆炸,MovieClip可以告诉stop()等等。你编写类代码时要记住,这个类的所有对象都必须像你写的那样表现,但由于它们的属性可能不同,因此您可以为它们提供条件行为。例如,如果炸弹已经爆炸,它就不能再爆炸了。

变量,无论是属性还是独立var(如果在函数中声明一个),都是对给定类型的对象的引用。说var i:int指的是某种整数。简单类型变量是容器,即i=2;将在引用的整数中放置2,而i=j;会将值从j复制到i,而var theStage:Stage=this.stage相反,将创建对现有对象的引用,如果该对象将更改,则引用将为您提供已更改的对象而不是其先前的状态。数组是可通过索引访问的变量的集合,在AS3中它们不必是一种类型,Vector是类型化的数组。

接下来,对象的生命周期。对象只有在有活动引用时才会存在,无论是在另一个活动对象的属性中,还是在可见变量中,还是在事件侦听器中(特定于AS3)。一个对象是通过new ClassName(<parameters>)创建的,虽然你可以以某种方式到达它,但是一旦你没有活动的链接就会被破坏,并且Flash播放器决定运行垃圾收集器。在此程序员必须自己解除对象之前,可以在BitmapData.dispose()看到一个雏形。因此,为了避免Flash播放器耗尽空闲内存,请完全控制链接的创建和销毁。你不需要关心简单的变量,它们正在被Flash播放器照顾。

很多交互的基本功能已经在AS3中实现,查找它们以及它们如何在Adobe's manual中工作的示例,在左下角导航包,大多数交互式内容都在{{ 1}}包,根据需要参考其他包。

希望这能为您带来一些编程基础知识。

[1]:除非你正在加载一个SWF,否则有一个阶段,那么每个SWF可能会有更多,一个阶段。