2015-11-13 44 views
-1

我需要一些帮助,一些摇滚运动......我在这个编码的东西真的新的和有几乎不知道我在做什么...摇滚运动

我有岩石以每一种方式移动......我想要的是他们从左边的一组边界开始,移动到右边的一组边界。

如果他们被击中,我希望他们爆炸,而不是分裂成另外2块岩石。在电影里我有多个岩石(大,中,小)和一个叫做爆炸框架,但这个剧本我试图从另一个代码适应似乎没有在它的工作..

public function planeHit() { 
     removeEventListener(Event.ENTER_FRAME,movePlane); 
     MovieClip(parent).removePlane(this); 
     gotoAndPlay("explode"); 
    } 

当所有虫子都没有了(从正在拍摄或离开屏幕),我想新一轮的开始...

这里的脚本我有位置和岩石的运动...

任何帮助你可以给会很棒!

// ROCKS   

    // create a single rock of a specific size 
    public function newRock(x,y:int, rockType:String) { 

     // create appropriate new class 
     var newRock:MovieClip; 
     var rockRadius:Number; 
     if (rockType == "Big") { 
      newRock = new Rock_Big(); 
      rockRadius = 35; 
     } else if (rockType == "Medium") { 
      newRock = new Rock_Medium(); 
      rockRadius = 20; 
     } else if (rockType == "Small") { 
      newRock = new Rock_Small(); 
      rockRadius = 10; 
     } 


     // choose a random look 
     newRock.gotoAndStop(Math.ceil(Math.random()*3+1)); 

     // set start position 
     newRock.x = x; 
     newRock.y = y; 

     // set random movement and rotation 

     var dx:Number = Math.random()*2.0; 
     var dy:Number = Math.random()*2.0-1.0; 

     // add to stage and to rocks list 
     gameObjects.addChild(newRock); 
     rocks.push({rock:newRock, dx:dx, dy:dy, rockType:rockType, rockRadius: rockRadius}); 
    } 

    // create four rocks 
    public function nextRockWave(event:TimerEvent) { 
     rocks = new Array(); 
     newRock(100,100,"Big"); 
     newRock(200,100,"Big"); 
     newRock(450,100,"Big"); 
     newRock(350,100,"Big"); 
     gameMode = "play"; 
    } 

    // animate all rocks 
    public function moveRocks(timeDiff:uint) { 
     for(var i:int=rocks.length-1;i>=0;i--) { 

      // move the rocks 
      var rockSpeed:Number = rockSpeedStart + rockSpeedIncrease*gameLevel; 
      rocks[i].rock.x += rocks[i].dx*timeDiff*rockSpeed; 
      rocks[i].rock.y += rocks[i].dy*timeDiff*rockSpeed; 


      // wrap rocks 
    if ((rocks[i].dx > 0) && (x <-50)) { 
      gameObjects.removeChild; 
      rocks.splice(); 
     } 
      else if ((rocks[i].dx < 0) && (x > 350)) { 
      gameObjects.removeChild; 
      rocks.splice();   
     } 


     } 
    } 

    public function rockHit(rockNum:uint) { 
     // create two smaller rocks 
     if (rocks[rockNum].rockType == "Big") { 
      newRock(rocks[rockNum].rock.x,rocks[rockNum].rock.y,"Medium"); 
      newRock(rocks[rockNum].rock.x,rocks[rockNum].rock.y,"Medium"); 
     } else if (rocks[rockNum].rockType == "Medium") { 
      newRock(rocks[rockNum].rock.x,rocks[rockNum].rock.y,"Small"); 
      newRock(rocks[rockNum].rock.x,rocks[rockNum].rock.y,"Small"); 
     } 
     // remove original rock 
     gameObjects.removeChild(rocks[rockNum].rock); 
     rocks.splice(rockNum,1); 
    } 
+0

你的问题是什么?现在你只需要一个代码转储和一个愿望清单来改变。你能把它缩小到你正在努力的一件事吗? – Brian

+0

嘿,对不起,没问题。我喜欢改变岩石的移动方式,我希望它们能够更直线地移动,但无论我改变什么,它们似乎都是随机移动的,我很小心Math.random控制着这个,但我不是确定如何改变它,让它们沿着屏幕直线前进。其次,我不确定为什么当岩石从屏幕上移开不再开始时,它们就会消失,什么都不会发生,我甚至不知道代码是如何控制的。任何帮助,这将是伟大的 – jbuzz

回答

0

要使用您发布的代码将物体移动到一条直线上,您有两个选项。

1.改变岩石定义

更改你这样的摇滚一代代码:

var dx:Number = Math.random()*2.0; 
var dy:Number = 0; 

// add to stage and to rocks list 
gameObjects.addChild(newRock); 
rocks.push({rock:newRock, dx:dx, dy:dy, rockType:rockType, rockRadius: rockRadius}); 

然后,当你动画的岩石上,不会对你的y - 协调的任何变化,所以当它移动时它将保持在同一条线上。

2.更改您的动画代码

简单地删除动画的y值岩石的行:

// move the rocks 
var rockSpeed:Number = rockSpeedStart + rockSpeedIncrease*gameLevel; 
rocks[i].rock.x += rocks[i].dx*timeDiff*rockSpeed; 

// wrap rocks 
... 

然后没有在你的循环改变y - 协调,所以他们将留在同一条线上。

+0

嘿,这有助于,我解决了随机高度的问题! YAY – jbuzz

+0

你能帮我解决我在Wrap Rocks下的界限吗?我不确定为什么在他们离开屏幕后我没有得到任何新的岩石...... – jbuzz