我为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);
}
答案 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
等路径访问它。