平台游戏。(Platform game. Jump to next level in next frame)

编程入门 行业动态 更新时间:2024-10-11 21:24:48
平台游戏。(Platform game. Jump to next level in next frame)

我为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); }

I create a platform game with 20 levels for android devices. Every level has different walking platforms and new enemies with differents properties. I have the first frame with 20 buttons , The first button go to first level(frame 2) the second button go to second level(frame 3) and goes on until the final level in frame 21. I write all of my code in frame 2(level 1) player movement , enemies properties , coins , life etc. When the player die or the player complete the stage i go to frame 1 and im ready to click to level 2 button , go to second stage in frame 3. So , what part of my code i must transfer to second level ?

Here is part of my code in second frame. (i show only one enemy(medouza) and the controls that i move the player because is a large code)

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帧上创建一个名为levelsMC的新MovieClip,它是一个容器,包含所有关卡帧(使用舞台时间线中的“剪切帧”并将它们粘贴到关卡MC时间轴内),

现在你的代码只能说2级= levelsMC.gotoAndStop(2); 或3级levelsMC.gotoAndStop(3); ...

因为代码级别MC都在第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 ,其中click / tap函数简单地告诉levelsMC获取帧x (其中xnextLevel量),如下所示: levelsMC.gotoAndStop( nextLevel );

PS:看看AS3 linkage教程。 更容易创建一个硬币或charatcer的MC,只需addChild到levelMC需要时。 然后通过类似levelsMC.coin = visible = false;代码访问它levelsMC.coin = visible = false; 等等

I would just put all game code on frame 1.

Also make a new MovieClip on frame 1 called levelsMC that is a container all the level frames (use "cut frames" from stage timeline & paste them inside the levels MC timeline),

Now your code can just say for level 2 = levelsMC.gotoAndStop(2); or for level 3 levelsMC.gotoAndStop(3);...

Because code and levelsMC are both on frame 1, you don't have to transfer (re-copy) any code.

Your working logic would be :

I have the first frame with one button ( levelButton ),

I have a variable nextLevel (integer) that has frame number. I update as nextLevel = 2; The first button tells levelsMC go to first level (using levelsMC.gotoAndStop(2);) or can use levelsMC.gotoAndStop(nextLevel); the second button go to second level (using levelsMC.gotoAndStop(3);)

and goes on until the final level in frame 21 (levelsMC.gotoAndStop(21);).

I write all of my code in frame 1 and to show from level 1 onwards I say : startScreenMC.visible = false; and levelsMC.visible = true;

When the player complete the stage I update nextLevel number (integer) as +1 and i'm ready to click to levelButton, where click/tap function simply tells levelsMC to got frame x (where x is nextLevel amount) like this : levelsMC.gotoAndStop( nextLevel );

PS: Look into AS3 linkage tutorials. Makes it easier to create an MC of coin or charatcer and just addChild that to levelsMC when needed. Then code access it via path like levelsMC.coin = visible = false; etc.

更多推荐

本文发布于:2023-08-08 01:31:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1466691.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:平台   游戏   Platform   game   level

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!