我正在尝试制作炸弹捕捉游戏(我实际上正在使用阵列中的书中的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);
}
}
}
答案 0 :(得分:0)
也许是为了避免让你的编程生活比现在更加扭曲......
编程中有对象和类,类是对一组对象的描述,比如说“table”(或者,因为它最好区分类和变量的名称,“表“,首字母大写”是一个类的名称。 实例或对象是属于一个或多个类的结构,其中Object
是最顶层的,因为编程中的所有内容都是对象或“简单变量”,即数字,真/假,字符串(这些也是AS3中的对象类型,Number
,Boolean
,String
,但是这些通常不需要通过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可能会有更多,一个阶段。