平台游戏。下一帧跳转到下一级
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);
}
我只想将所有游戏代码放在第 1 帧上。
还在第 1 帧上制作一个名为 levelsMC 的新 MovieClip,它是所有关卡帧的容器(使用舞台时间轴中的 "cut frames" 并将它们粘贴到关卡 MC 中时间轴),
现在您的代码可以只说 2 级 = levelsMC.gotoAndStop(2);
或 3 级 levelsMC.gotoAndStop(3);
...
因为 code 和 levelsMC 都在第 1 帧上,所以您不必传输(重新复制)任何代码。
你的工作逻辑是:
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:查看 AS3 linkage
教程。使创建硬币或字符的 MC 变得更容易,并且在需要时只需 addChild
到 levelsMC。然后代码通过 levelsMC.coin = visible = false;
等路径访问它
我为 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 帧上。
还在第 1 帧上制作一个名为 levelsMC 的新 MovieClip,它是所有关卡帧的容器(使用舞台时间轴中的 "cut frames" 并将它们粘贴到关卡 MC 中时间轴),
现在您的代码可以只说 2 级 = levelsMC.gotoAndStop(2);
或 3 级 levelsMC.gotoAndStop(3);
...
因为 code 和 levelsMC 都在第 1 帧上,所以您不必传输(重新复制)任何代码。
你的工作逻辑是:
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 uselevelsMC.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;
andlevelsMC.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:查看 AS3 linkage
教程。使创建硬币或字符的 MC 变得更容易,并且在需要时只需 addChild
到 levelsMC。然后代码通过 levelsMC.coin = visible = false;
等路径访问它