平台游戏。在下一帧跳转到下一个级别

时间:2017-03-22 12:28:00

标签: actionscript-3

我为Android设备创建了一个20级的平台游戏。每个级别都有不同的步行平台和具有不同属性的新敌人。 我有第一帧有20个按钮,第一个按钮进入第一级(第2帧)第二个按钮进入第二级(第3帧)并继续进行到第21帧的最后一级。 我在第2帧(第1级)玩家运动,敌人属性,硬币,生命等中编写了我的所有代码。 当玩家死亡或玩家完成舞台时,我转到第1帧并准备点击第2级按钮,转到第3帧的第二阶段。 那么,我的代码的哪一部分必须转移到第二级呢?

这是我在第二帧中的代码的一部分。 (我只显示一个敌人(medouza)和我移动玩家的控件因为是一个大代码)

 stop();
    l_btn.addEventListener(TouchEvent.TOUCH_BEGIN,lbtisdown);
    l_btn.addEventListener(TouchEvent.TOUCH_END,lbtisup);
    r_btn.addEventListener(TouchEvent.TOUCH_BEGIN,rbtisdown);
    r_btn.addEventListener(TouchEvent.TOUCH_END,rbtisup);
    j_btn.addEventListener(TouchEvent.TOUCH_BEGIN,jbtisdown);
    k_btn.addEventListener(TouchEvent.TOUCH_BEGIN,kbtisdown);
    stop_btns.addEventListener(TouchEvent.TOUCH_END,allup);
    stop1_btn.addEventListener(TouchEvent.TOUCH_END,jkup);
    fire_btn.addEventListener(TouchEvent.TOUCH_BEGIN,fbtisdown);
function lbtisdown(e:TouchEvent)
{
  ldown = true;
}
function lbtisup(e:TouchEvent)
{
  ldown = false;
}
function rbtisdown(e:TouchEvent)
{
  rdown = true;
}
function rbtisup(e:TouchEvent)
{
  rdown = false;
}
function kbtisdown(e:TouchEvent)
{
  kdown = true;
}
function jbtisdown(e:TouchEvent)
{
  if (! jdown && onground && ! dizbl)
  {
  runJump();
  }
  jdown = true;
}
function fbtisdown(e:TouchEvent)
{
  fdown = true;
}
var movers = new Array(bg.ground.platkat0,bg.ground.plator0,bg.ground.platkat1,bg.ground.plator1,bg.ground .plator2,bg.ground.plator3);
var movedirs = new Array(0,1,0,1,1,1);
var movelimits = new Array([-57.5,60],[1853,2021],[-57.5,243],[1935,2072],[2548,2877],[2982,3073]);
var medouzaArr = new Array();
function addMedouza(med)
{
  medouzaArr.push(med);
  med.medouza.gotoAndStop(1);
  med.xvel = 0;
  med.yvel = 0;
  med.hitpoints = 20;
  med.startAttack = 0;
  med.fireAttack = 3;
  med.sp = Math.random() * .7 + .7;
  med.dir = Math.floor(Math.random() * 2);
  med.locksp = med.sp;
}
this.addEventListener(Event.ENTER_FRAME,FramesEvents);
function FramesEvents(e:Event)
{
  completeStage();
  moveplatforms();
  moveMedouza();
  phys();
  controls();
  windowcamera();
}
function moveMedouza()
{
  for (var k1=0; k1<medouzaArr.length; k1++)
  {
  var m = medouzaArr[k1];
  m.x +=  m.xvel;
  m.xvel *=  .3;
  m.y +=  m.yvel;
  m.yvel +=  GRA;
  if (m.x > savvito.x)
  {
  m.scaleX = -1;
  }
  if (m.x < savvito.x)
  {
  m.scaleX = 1;
  }
  if (m.startAttack > 4)
  {
  m.fireAttack = 1 + Math.floor(Math.random() * 2);
  m.startAttack = 0;
  }
  if (m.fireAttack == 0)
  {
  m.medouza.gotoAndStop(1);
  }
  if (m.fireAttack == 1)
  {
  m.medouza.gotoAndStop(2);
  }
  if (m.fireAttack == 2)
  {
  m.medouza.gotoAndStop(3);
  }
  if (m.medouza.currentFrame == 1 && m.medouza.medouza_iddle.currentFrame == m.medouza.medouza_iddle.totalFrames)
  {
  m.startAttack +=  1;
  }
  if (m.medouza.currentFrame == 2 && m.medouza.medouza_jump.currentFrame == m.medouza.medouza_jump.totalFrames)
  {
  m.fireAttack = 0;
  var e = bg.addChild(new enemy1());
  e.x = m.x;
  e.y = m.y;
  }
  if (m.medouza.currentFrame == 3 && m.medouza.medouza_attack.currentFrame == m.medouza.medouza_attack.totalFrames)
  {
  m.fireAttack = 0;
  }
  if (m.medouza.currentFrame == 3 && m.medouza.medouza_attack.currentFrame == 12)
  {
  var s = bg.addChild(new parentsmos());
  smoshArr.push(s);
  s.x = m.x;
  s.y = m.y;
  if (m.scaleX == 1)
  {
  s.scaleX = 1;
  }
  if (m.scaleX == -1)
  {
  s.scaleX = -1;
  }
  }
  if (savvito.hitTestObject(m.med_hit) && ! savvito.hit && ! die)
  {
  herohitpoints++;
  savvito.hit = true;
  savvito.hitcv = 0;
  if (savvito.x < m.x)
  {
  xvel = -8;
  }
  else
  {
  xvel = +8;
  }
  yvel = -6;
  }
  if (savvito.hero.currentFrame == 4 && savvito.hero.attack.hitTestObject(m.med_box) && savvito.hero.attack.currentFrame == 6)
  {
  m.hitpoints -=  15 + KnifeDamage;
  enemieslifebar.enemiesgreenlife.gotoAndStop(m.hitpoints);
  if (m.scaleX == 1)
  {
  m.x = 700;
  }
  if (m.scaleX == -1)
  {
  m.x = 100;
  }
  }
  upPushMedouza(m);
  if (m.hitpoints <= 0)
  {
  addBonusCoins();
  bg.stageClear.x = m.x;
  bg.stageClear.y = m.y + 7;
  medouzaArr.splice(k1,1);
  bg.removeChild(m);
  return;
  }
  }
}
function completeStage()
{
  if (savvito.hitTestObject(bg.stageClear)&&numKey >= 5)
  {
  j_btn.removeEventListener(TouchEvent.TOUCH_BEGIN,jbtisdown);
  stageDone.gotoAndStop(2);
  kdown = false;
  ldown = false;
  rdown = false;
  jdown = false;
  dizbl = false;
  for (var rk1=0; rk1<medouzaArr.length; rk1++)
  {
  var rm = medouzaArr[rk1];
  medouzaArr.splice(rk1,1);
  bg.removeChild(rm);
  return;
  }
  if (medouzaArr.length == 0)
  {
  goto2();
  }
  fl_CountDownTimerInstance.removeEventListener(TimerEvent.TIMER, fl_CountDownTimerHandler);
  fl_CountDownTimerInstance.stop();
  fl_Countstart.removeEventListener(TimerEvent.TIMER, fl_CountDownstart);
  }
}
function goto2()
{
  medouzaArr.length = 0;
  movers.length = 0;
  movedirs.length = 0;
  movelimits.length = 0;
  fl_TimerInstancew.start();
  if (fl_SecondsElapsedw > 5 && herohitpoints <= 29)
  {
  channel1.stop();
  this.addEventListener(Event.ENTER_FRAME,empty1);
  fl_TimerInstancew.removeEventListener(TimerEvent.TIMER, fl_TimerHandlerw);
  fl_TimerInstancew.stop();
  }
  if (fl_SecondsElapsedw == 3 && herohitpoints < 29)
  {
  savecoins.data.banksavecoins = coinscount + buycoins;
  savecoins.flush();
  }
}
function empty1(e:Event)
{
  this.removeEventListener(Event.ENTER_FRAME,FramesEvents);
  gotoAndStop(2);
}

1 个答案:

答案 0 :(得分:0)

我只想将所有游戏代码放在第1帧上。

另外在第1帧上创建一个名为 levelsMC 的新MovieClip,这是一个容器所有级别的帧(使用&#34;剪切帧&#34;从舞台时间线&amp;粘贴它们在级别MC中时间表),

现在您的代码可以说2级= levelsMC.gotoAndStop(2);或级别3 levelsMC.gotoAndStop(3); ......

由于代码 levelsMC 都在第1帧,因此您无需转移(重新复制)任何代码。

你的工作逻辑是:

  

我的第一帧有一个按钮( levelButton ),

     
      
  • 我有一个带有帧号的变量 nextLevel (整数)。我更新为nextLevel = 2;
  •   
  • 第一个按钮告诉 levelsMC 转到第一级(使用levelsMC.gotoAndStop(2);)或可以使用   levelsMC.gotoAndStop(nextLevel);
  •   
  • 第二个按钮转到第二级(使用levelsMC.gotoAndStop(3);
  •   
  • 一直持续到第21帧(levelsMC.gotoAndStop(21);)的最后一级。

  •   
  • 我在第1帧中编写了所有代码,并从第1级开始显示,我说:“startScreenMC.visible = false;levelsMC.visible = true;

  •   
  • 当玩家完成阶段后,我将 nextLevel 数字(整数)更新为+1,然后我就可以点击 levelButton ,点击/点击功能   只需告诉 levelsMC 获取框架 x (其中 x nextLevel 金额),如下所示:
    { {1}}

  •   

PS:查看levelsMC.gotoAndStop( nextLevel );教程。可以更轻松地创建硬币或charatcer的MC,并在需要时将AS3 linkage设置为 levelsMC 。然后代码通过addChild等路径访问它。