2017-03-22 92 views
0

我为Android设备创建了一个包含20个关卡的平台游戏。每个级别都有不同的行走平台和具有不同属性的新敌人。 我有20个按钮的第一帧,第一个按钮去第一级(第二帧)第二个按钮去第二级(第3帧),并一直持续到第21帧的最后一级。 我写了我所有的代码在第2帧(第1级)玩家移动,敌人属性,硬币,生命等等。 当玩家死亡或玩家完成舞台时,我会转到第1帧,即时消息准备点击第2级按钮,转到第2阶段3. 那么,我的代码中的哪一部分我必须转移到第二级?平台游戏。跳转到下一帧

这是我的第二帧中的代码的一部分。 (i显示了只有一个敌人(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); 
} 

回答

0

我只想把所有的游戏代码的框架1.

也使新影片剪辑名为levelsMC帧1这是一个容器中的所有等级的帧(使用来自阶段时间表“剪切帧” &它们粘贴水平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;

  • 当玩家完成了I期更新nextLevel号(整数)作为+1我已经准备好点击levelButton,其中点击/点功能 只是告诉levelsMC得了框架X(其中XnextLevel量)是这样的:
    levelsMC.gotoAndStop(nextLevel);

PS:寻找到AS3 linkage教程。使它更容易创建一个硬币或charatcer MC和addChild水平MC需要时。然后通过代码访问它像levelsMC.coin = visible = false;等。

+0

谢谢你非常匹配。它看起来很聪明。 –