Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 HitTestObject选择哪一个命中_Actionscript 3 - Fatal编程技术网

Actionscript 3 HitTestObject选择哪一个命中

Actionscript 3 HitTestObject选择哪一个命中,actionscript-3,Actionscript 3,我一直在为我的班级编写ActionScript3中的这个游戏。当水果从树上落下时,我的游戏会将其放入篮子中,并使用HitTestObject函数添加一个点。当被称为圆圈的黑色水果击中篮筐时,它应该会带走一分。在大多数其他具有索引数组和if/else语句的编程语言中,这似乎微不足道。请注意,确保如何使用带有if/else语句的currentFruit电影剪辑设置比较语句。我想我可以做一些类似的事情 if(currentFruit.hitTestObject(basket_mc)!=5)) incr

我一直在为我的班级编写ActionScript3中的这个游戏。当水果从树上落下时,我的游戏会将其放入篮子中,并使用HitTestObject函数添加一个点。当被称为圆圈的黑色水果击中篮筐时,它应该会带走一分。在大多数其他具有索引数组和if/else语句的编程语言中,这似乎微不足道。请注意,确保如何使用带有if/else语句的currentFruit电影剪辑设置比较语句。我想我可以做一些类似的事情

if(currentFruit.hitTestObject(basket_mc)!=5))
increase fruit
  else
decrease fruit
下面是我的代码。

function catchFruit(e:Event):void {

for (var i:int = fruitsOnstage.length-1; i > -1; i--) {
var currentFruit:MovieClip = fruitsOnstage[i];
currentFruit.y += currentFruit.speed;


if (currentFruit.y > stage.stageHeight - currentFruit.
 height) {
currentFruit.y = 0 - currentFruit.height;
fruitsLost++;
field2_txt.text = "Total Fruit Lost: " + fruitsLost;
}


if(currentFruit.hitTestObject(basket_mc)){      
fruitsCollected++;  

field1_txt.text = "Total Fruit Collected: " +
fruitsCollected;


removeChild(currentFruit);
fruitsOnstage.splice(i,1);

}


if (fruitsCollected >= 20) {
basket_mc.gotoAndStop(20);
} else if (fruitsCollected > 15) {
basket_mc.gotoAndStop(15);
} else if (fruitsCollected > 10) {
basket_mc.gotoAndStop(10);
} else if (fruitsCollected > 5) {
basket_mc.gotoAndStop(5);
}

}

if (fruitsOnstage.length <= 0) {
field1_txt.text = "You Win! You have collected enough fruit for dinner.";
field2_txt.text = "";

stage.removeEventListener(Event.ENTER_FRAME, catchFruit);
}


if (fruitsLost >= 20) {
field1_txt.text = "Sorry, you lose. You have lost too much fruit!";
field2_txt.text = "";

stage.removeEventListener(Event.ENTER_FRAME, catchFruit);


for (var j:int = fruitsOnstage.length-1; j > -1; j--) {
currentFruit = fruitsOnstage[j];
removeChild(currentFruit);
fruitsOnstage.splice(j,1);
}
}
函数catchFruit(e:事件):无效{
对于(变量i:int=fruitsOnstage.length-1;i>-1;i--){
var currentFruit:MovieClip=fruitsOnstage[i];
currentFruit.y+=currentFruit.speed;
如果(currentFruit.y>stage.stageHeight-currentFruit。
高度){
currentFruit.y=0-currentFruit.height;
果冻++;
field2_txt.text=“损失的果实总数:”+果实损失;
}
if(currentFruit.hitTestObject(basket_mc)){
水果收集++;
field1_txt.text=“收集的水果总数:”+
果实收集;
去核(当前果实);
子期剪接(i,1);
}
如果(收集的水果>=20){
篮筐(mc.gotoAndStop)(20);;
}否则如果(收集的水果>15){
篮_mc.gotoAndStop(15);
}否则如果(收集的水果>10){
篮_mc.gotoAndStop(10);
}否则如果(收集的水果>5){
篮筐(mc.gotoAndStop)(5);;
}
}
如果(fruitsOnstage.length=20){
field1_txt.text=“对不起,你输了。你输了太多的水果!”;
field2_txt.text=“”;
stage.removeEventListener(Event.ENTER_FRAME,catchFruit);
对于(变量j:int=fruitsOnstage.length-1;j>-1;j--){
当前水果=水果阶段[j];
去核(当前果实);
子期剪接(j,1);
}
}
hitTestObject()
返回一个布尔值,因此将其与索引进行比较没有任何意义。您应该首先检查是否发生了冲突(使用hitTestObject),然后检查冲突对象的标识

您可以检查
currentFruit
对象命中篮子后的类型:

if(currentFruit.hitTestObject(basket_mc)){
    if(currentFruit is Circle){
        decreaseFruit()
    } else {
        increaseFruit()
    }
}
这是完整的代码,正如你所看到的,黑色水果是数组的一部分,其余的水果将会掉落。这个游戏确实有效,你抓住水果并得分,但是如果黑色水果击中篮子,我想扣减分数。我不确定如何确定哪个水果击中篮子。现在知道这是一个布尔n结果确实有帮助,只是不确定如何设置它

函数fl\u单击ToTo和StopAtFrame(事件:MouseeEvent):无效 {

var-froutarray:Array=新数组(苹果、草莓、梨、香蕉、,
橙色,圆形);
var fruitsOnstage:Array=new Array();
收集的风险值:int=0;
var-fruitsLost:int=0;
对于(变量i:int=0;i-1;i--){
var currentFruit:MovieClip=fruitsOnstage[i];
currentFruit.y+=currentFruit.speed;
如果(currentFruit.y>stage.stageHeight-currentFruit。
高度){
currentFruit.y=0-currentFruit.height;
果冻++;
field2_txt.text=“损失的果实总数:”+果实损失;
}
if(currentFruit.hitTestObject(basket_mc)){
水果收集++;
field1_txt.text=“收集的水果总数:”+
果实收集;
去核(当前果实);
子期剪接(i,1);
}
如果(收集的水果>=20){
篮筐(mc.gotoAndStop)(20);;
}否则如果(收集的水果>15){
篮_mc.gotoAndStop(15);
}否则如果(收集的水果>10){
篮_mc.gotoAndStop(10);
}否则如果(收集的水果>5){
篮筐(mc.gotoAndStop)(5);;
}
}
如果(fruitsOnstage.length=20){
field1_txt.text=“对不起,你输了。你输了太多的水果!”;
field2_txt.text=“”;
stage.removeEventListener(Event.ENTER_FRAME,catchFruit);
对于(变量j:int=fruitsOnstage.length-1;j>-1;j--){
当前水果=水果阶段[j];
去核(当前果实);
子期剪接(j,1);
}
}
}
}

您的问题缺少一个问题。你的代码到底有什么问题?你有错误吗?意外的结果?快速看一眼,看起来你在同一个数组中循环,看起来很奇怪哦,仔细看,我发现你的第二个循环不在第一个循环内。您应该适当地缩进代码,以便更容易注意到这些事情。你错过了一个结束语},尽管在这一切结束时。我看不出有什么明显的问题。请根据我的上述评论提供更多详细信息。我更新了我的答案,以说明如何检查碰撞对象是否为
圆圈
aButton.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame);
var fruitArray:Array = new Array(Apple,Strawberry,Pear,Banana,
 Orange,Circle);
var fruitsOnstage:Array = new Array();
var fruitsCollected:int = 0;
var fruitsLost:int = 0;
for (var i:int = 0; i<20; i++) {
var pickFruit = fruitArray[int(Math.random() * fruitArray.
 length)];
var fruit:MovieClip = new pickFruit();
addChild(fruit);
fruit.x = Math.random() * stage.stageWidth;
fruit.y = Math.random() * -500;
fruit.speed = Math.random() * 15 + 5;
fruitsOnstage.push(fruit);
}
basket_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragBasket);
stage.addEventListener(MouseEvent.MOUSE_UP, dragStop);
function dragBasket(e:Event):void {
basket_mc.startDrag();
}
function dragStop(e:Event):void {


basket_mc.stopDrag();
}
stage.addEventListener(Event.ENTER_FRAME, catchFruit);


function catchFruit(e:Event):void {

for (var i:int = fruitsOnstage.length-1; i > -1; i--) {
var currentFruit:MovieClip = fruitsOnstage[i];
currentFruit.y += currentFruit.speed;


if (currentFruit.y > stage.stageHeight - currentFruit.
 height) {
currentFruit.y = 0 - currentFruit.height;
fruitsLost++;
field2_txt.text = "Total Fruit Lost: " + fruitsLost;
}


if(currentFruit.hitTestObject(basket_mc)){      
fruitsCollected++;  

field1_txt.text = "Total Fruit Collected: " +
fruitsCollected;


removeChild(currentFruit);
fruitsOnstage.splice(i,1);

}


if (fruitsCollected >= 20) {
basket_mc.gotoAndStop(20);
} else if (fruitsCollected > 15) {
basket_mc.gotoAndStop(15);
} else if (fruitsCollected > 10) {
basket_mc.gotoAndStop(10);
} else if (fruitsCollected > 5) {
basket_mc.gotoAndStop(5);
}

}

if (fruitsOnstage.length <= 0) {
field1_txt.text = "You Win! You have collected enough fruit for dinner.";
field2_txt.text = "";

stage.removeEventListener(Event.ENTER_FRAME, catchFruit);
}


if (fruitsLost >= 20) {
field1_txt.text = "Sorry, you lose. You have lost too much fruit!";
field2_txt.text = "";

stage.removeEventListener(Event.ENTER_FRAME, catchFruit);


for (var j:int = fruitsOnstage.length-1; j > -1; j--) {
currentFruit = fruitsOnstage[j];
removeChild(currentFruit);
fruitsOnstage.splice(j,1);
}
}






}

}