※本篇为LegendForFlashProgramming脚本引擎的使用教程第二篇。

一,关于LegendForFlashProgramming脚本引擎
http://blog.csdn.net/lufy_legend/article/details/6889424

二,准备工作

本次用LegendForFlashProgramming0.1来制作,本篇教程基于三国记黄巾之乱,你可以到这里下载三国记黄巾之乱,首先需要注意,在游戏剧本里,可能有很多被注释掉的代码,看的时候可以直接跳掉。另外,在第一篇教程《如何用LegendForFlashProgramming来制作LVG游戏》中已经 涉及到的语法等,此篇中就不再累赘了。

 

三, SLG游戏的一些设定

      关于游戏中的几个文件夹

1,initialization文件夹,里面包含游戏中所有数据的设定,。

① Arms.sgj,兵种设定文件

② chara.sgj,人物设定文件

③ Item.sgj,武器装备设定文件

④ Props.sgj,物品设定文件

⑤ Skill.sgj,特技设定文件

⑥ Strategy.sgj,策略设定文件

⑦ Terrain.sgj,地形设定文件

⑧ Stage.sgj,战场上一些特殊物件的设定,比如火焰

2,images文件夹,游戏中所有的图片

① icon文件夹里是游戏的icon文件

② logo文件夹里是游戏的logo页面所需要的背景图片和按钮文件

③ map文件夹里是游戏的地图文件,.rmap为R地图文件,.smap为S地图文件

④ face.swf头像图片

⑤ item.swf武器图片

⑥ meff.swf法术图片

⑦ stage.swf战场上特殊物件的图片,比如火焰

⑧ R.swf人物R动作图片

⑨ S.swf人物S动作图片

⑩ img.swf游戏中的最基本的一些图片,比如框架,按钮等

⑪ sound.swf这个比较特殊,不是图片文件,是游戏中的声效文件

3,sound文件夹,里面是游戏中的音乐文件。

4,script文件夹,里面是游戏的剧本文件。

四, SLG游戏的制作

1,打开MainSLG.lf,可以看到,里面的代码首先是显示loading,然后开始读取logo画面所需要的图片,最后跳转到logo.lf。

Load.script(script/logo.lf);为剧本跳转,

2,Logo.lf中,里面没有基本上都是之前讲过的语法,加入了一张背景图片,五个按钮。

① SouSouObjectLoad.loadimg();和SouSouObjectLoad.loadfile(1);,这两句代码,是游戏的初期化,在调用剧本的时候,必须进行游戏的初期化。

② SouSouSound.musicMode(1);为音乐有效无效的设定,参数为1的时候为有效,0的时候为无效。

③ SouSouWindow.system(read);为显示读档画面

④ SouSouGame.taobao();是为了参加淘宝的移动大赛,专门添加的功能,可以无视之,跳过。

⑤ SouSouGame.close();是关闭游戏。

⑥ SouSouSound.playMusic(sound/sg01.mp3);播放音乐。参数为音乐文件的路径。

3,r01.lf:游戏里的第一个R剧本文件

在SouSouRMap.start();之前的代码,都是以前说过的,下面从SouSouRMap.start();开始的代码说起。

R剧本代码的固定格式为:

SouSouRMap.start();

initialization.start;

addMap(images/map,r01.rmap);

SouSouRCharacter.add(0,34,3,9,7);

SouSouRCharacter.add(0,151,2,15,15);

……

initialization.end;

function.start;

function.end;

loop.start;

loop.end;

SouSouRMap.end();

//设定人物不可控

SouSouRunMode.set(1);

SouSouSound.playMusic(sound/sg02.mp3);

SouSouRCharacter.add(0,163,1,29,19);

SouSouTalk.set(163,0,报!);

……

Load.script(script/r02.lf);

SouSouRMap.start();和SouSouRMap.end();之间,是R剧本的初始化。

①  initialization.start;和initialization.end;之间,添加R剧本地图和出现人物。

②  addMap(images/map,r01.rmap);添加地图,参数为(地图路径,地图名)

③  SouSouRCharacter.add(0,34,3,9,7);添加人物,参数为(是否可控制,人物编号,方向,x坐标,y坐标)

④  function.start; 和function.end;之间,是R剧本里的方法初始化。

⑤  function characterclick3();

SouSouTalk.set(3,0,大哥,赶紧出发吧);

endfunction

characterclick方法是人物点击事件,必须加在function.start; 和function.end;之间,方法名是characterclick+人物编号,例如characterclick3是点击人物编号3时调用的方法。

⑥ loop.start;和loop.end;之间,是R剧本的循环事件,例如自由R剧本中的坐标测试等,在三国记黄巾之乱中可以说基本上没有涉及到自由R,没有示例的话,说起来比较麻烦,所以等下一版游戏发布的时候,再做详细说明。

⑦ SouSouRunMode.set(1);设定操作不可控,即剧情模式,当然其相对的就是我刚才提到的自由R模式,在剧情模式中,游戏不可控制,只能按照剧本编写的剧情顺序播放。

⑧ SouSouRunMode.set(0);设定操作可控。

⑨ SouSouTalk.set(163,0, 有大批黄巾军已经攻破了邻县!);游戏对话。

参数(人物编号,表情编号,对话内容)

⑩ SouSouRCharacter.remove(163);移除人物,参数为(人物编号)。

⑪ SouSouRCharacter.moveTo(1,163,24,14);人物移动。

参数(移动模式,人物编号,坐标x,坐标y),

移动模式为0时,表示相对移动,为1时,表示绝对移动。

⑫ Layer.drawRect(-,0,0,800,480,0x000000,1);画一个矩形,

参数(层,起始坐标x,起始坐标y,宽,高,颜色,矩形边框线粗)。

⑬ Load.script(script/r02.lf);跳转页面到 r02.lf。

5,r02.lf:游戏里的第二个R剧本文件

r02.lf 中比r01.lf中多一个新的语句, SouSouRCharacter.changeAction(171,1);表示改变人物动作,参数(人物编号,动作编号)。

6,r03.lf中,无新语句,我们直接看r04.lf。

①  SouSouWindow.addProps(1);加入物品。参数(物品编号)。

② SouSouWindow.msg(得到两个馒头,1);显示信息。参数(信息内容,1)。

③ SouSouMember.add(1,3);我方成员加入。参数(人物标号,人物加入等级)。

④ SouSouMember.addEquipment(1,0,6,1,1,1,0); 加入装备,参数(人物编号,头盔编号,盔甲编号,盔甲lv,武器编号,武器lv,坐骑编号)。

⑤ Load.script(script/s01.lf);跳转到s01.lf第一个s战场剧本,这是进入S战场的第一种方法。还有第二种方法,请看r08_1.lf。

⑥ r08_1.lf也算是一个简单的自由R的例子了,里面的SouSouWindow.preWar(script/s03.lf);表示进入出战准备画面,参数(出战后调用的S剧本)

SouSouMember.setMust(1);是设定默认必须出场的人员,参数(人物编号)

7,在r08.lf中,还有一个SouSouWindow.shop();表示进入商店画面,在endWindow;结束商店之前,可以用shopProps(0);来添加一些该商店能够出售的商品,比如馒头,包子等。shopProps(0)中的参数为物品编号。

8,s01.lf是游戏的第一个S战场剧本--大兴山之战。

首先,需要说明的是,游戏进入S剧本初始化之前,一定要有我方人员出场设定,在r04.lf结束时采用的是直接进入战场,即R剧本中没有出战选择,所以在S剧本中必须要有我方人员出场设定。

S剧本的固定格式为:

SouSouSMap.start();

initialization.start;

SouSouSCharacter.addOur(0,2,1,14,1);

……

SouSouSCharacter.addEnemy(4,4,1,13,7,1,1);

……

SouSouSCharacter.addFriend(7,5,2,2,14,0,0);

……

addMap(images/map,s01.smap);

initialization.end;

function.start;

function win();

Load.script(script/r05.lf);

Exit.run();

endfunction;

function lose();

SouSouWindow.msg(战斗失败!,1);

Layer.clear(-);

Load.script(script/lose.lf);

Exit.run();

endfunction;

functionatBelongCoordinate(belong,cx,cy);

if(@atBelongCoordinate1 != 1 && @belong==0 &&@cx==13 && @cy==7);

//获得物品(物品编号)

SouSouWindow.addProps(1);

SouSouWindow.msg(得到包子,1);

//SouSouTalk.set(1,0,占领!9-11);

Var.set(atBelongCoordinate1,1);

endif;

endfunction;

function.end;

loop.start;

SouSouSCharacter.checkHp(4,0,0,@checkHp1!=1);

……

loop.end;

SouSouSMap.end();

SouSouMember.addEquipment(4,0,1,1,6,1,0);

……

SouSouSound.playMusic(sound/sg03.mp3);

SouSouRunMode.set(1);

//剧情

……

SouSouWindow.setCondition(1、击毙程远志和邓茂!,1、刘备阵亡!);

SouSouRunMode.set(0);

SouSouSAttack.start(0);

① 先来看剧本中上面的几行代码。

Var.set(save_file,s01);//*1

Var.set(save_word,save_s01_1); //*2

//添加选择

SouSouTalk.select(1.保存存档,2.放弃保存); //*3

if(@select==0);

       SouSouWindow.system(save); //*4

endif;

Mark.save_s01_1; //*5

这些是添加游戏是否存档提示的代码。*1表示当前存档所存的那个剧本。*2表示存储的剧本的哪里。*3显示是否存档选择。*4表示进行存档。*5设定标示,与*2中设定的值必须一致。

② SouSouMember.preWar(1);我方人物出场设定,即设定此战我方队员的参战人员,这个设定必须是加到战场初始化之前,且在R剧本中没有进行出战选择。

9,SouSouSMap.start();和SouSouSMap.end();之间,是S剧本的初始化,添加地图,出现人物及发生事件等信息。

10,     initialization.start;和initialization.end;之间,设定人物的出场和地图。

11,     SouSouSCharacter.addOur(0,2,1,14,1); //我军人物出场设定,参数(人物出战顺序号,方向(0down,1left,2up,3right),出现x坐标,出现y坐标,是否隐藏)。

12,     SouSouSCharacter.addEnemy(4,4,1,13,7,1,1); //敌军人物出战设定,参数(人物编号,等级,方向(0down,1left,2up,3right),出现x坐标,出现y坐标,是否隐藏,AI(0默认,1被动出击,2主动出击))

13,     SouSouSCharacter.addFriend(7,5,2,2,14,0,0);//友军人物出战设定,参数(人物编号,等级,方向(0down,1left,2up,3right),出现x坐标,出现y坐标,是否隐藏,AI)

14,     addMap(images/map,s01.smap);添加S战场地图

15,     function.start;和function.end;之间添加战场上可以触发事件的函数。

16,     win()函数,战斗胜利后调用的函数,必须有。

17,     lose()函数,战斗失败后调用的函数,必须有。

18,     adjacent(index1,index2)人物相邻测试,参数(人物编号,人物编号)。

在adjacent函数里,可以添加多个相邻测试,但是每个相邻测试必须用一个变量来控制,比如if(@adjacent1 != 1&& @index1==3 && @index2==5);这里表示人物3和人物5相邻,且变量adjacent1不等于1的时候,触发这个事件,当事件结束后,使用Var.set(adjacent1,1);将变量adjacent1设为1,表示该事件已经发生,那么下次人物3和人物5相邻的时候,此事件就不发生了。

19,     checkHp(index,minhp,maxhp)hp测试函数,当人物hp处于指定范围内的时候触发,变量(人物编号,hp范围小,hp范围大)。这个事件也一样,可以添加多个测试,需要一个变量来控制。

20,     atBelongCoordinate(belong,cx,cy)坐标测试,当指定方(我方,友方或敌方)到达某一座标后触发的事件。这个事件也一样,可以添加多个测试,需要一个变量来控制。

21,     loop.start;和loop.end;之间,添加需要循环的事件。其实上面所说的函数,只是相当于预设好了事件,我们有地方调用它们,然后它们才会发生,否则它们只是设定好了而已。

SouSouSCharacter.checkHp(4,0,0,@checkHp1!=1);表示当变量checkHp1不为1的时候,不断循环checkHp函数,并传递相应的参数。

SouSouSCharacter.adjacent(3,5,@adjacent1!=1);表示当变量adjacent1不为1的时候,不断循环adjacent函数,并传递相应的参数。

SouSouSCharacter.atBelongCoordinate(0,13,7,@atBelongCoordinate1!=1); 表示当变量atBelongCoordinate1不为1的时候,不断循环atBelongCoordinate函数,并传递相应的参数。

22,     SouSouMember.addEquipment(4,0,1,1,6,1,0);表示设定人物装备,参数(人物编号,头盔编号,装备编号,装备等级,武器编号,武器等级,坐骑编号)

23,     SouSouSCharacter.show(1,1);武将出现,就是让原来设定成隐藏的武将出现在战场上。参数(人物编号,模式),其中模式设为1表示武将出现,如果设定成0,则是将武将隐藏。

24,     SouSouSCharacter.changeAction(3,ATK);武将动作,参数(人物编号,武将动作),其中ATK表示攻击动作,ATKPREPARE表示预备攻击动作,MOVE表示移动动作,HERT表示受攻击动作,PANIC表示原地转圈,PANT表示喘气。

25,     SouSouSCharacter.changeDirection(5,1,1);改变武将方向,参数(人物编号,1,目标人物编号)或者(人物编号,0,方向)

26,     SouSouWindow.singled(3,5);单条开始。

27,     SouSouWindow.singledend();单条结束。

28,     关于单条的各种动作,看下面一段单条吧,里面包含详细注释

//单挑开始[左人物编号,右人物编号]

SouSouWindow.singled(3,5);

Wait.time(40);

//单条控制:人物攻击预备[人物(0左1右)]

SouSouSingled.atkPrepare(0);

//单条控制:单条对话[人物(0左1右),说话内容]

SouSouSingled.talk(0,你爷爷的,有地不种,去当贼!?);

Wait.time(40);

SouSouSingled.block(1);

//单条控制:单条对话[人物(0左1右),说话内容]

SouSouSingled.talk(1,哼!说得轻巧,不造反哪儿来的地种?);

Wait.time(40);

//单条控制:人物前移[人物(0左1右),移动距离(+右-左)]

SouSouSingled.move(0,3);

//单条控制:单条对话[人物(0左1右),说话内容]

SouSouSingled.talk(0,现在后悔还来得及。);

Wait.time(40);

SouSouSingled.talk(1,……);

Wait.time(40);

SouSouSingled.talk(1,拼了!);

//单条控制:人物前移[人物(0左1右),移动距离(+右-左)]

SouSouSingled.move(1,-1);

Wait.time(40);

//单条控制:攻击挡格[人物(0左1右)]

SouSouSingled.atkBlock(1);

//单条控制:攻击挡格[人物(0左1右)]

SouSouSingled.atkBlock(1);

//单条控制:攻击挡格[人物(0左1右)]

SouSouSingled.atkBlock(1);

Wait.time(40);

SouSouSingled.block(0);

SouSouSingled.talk(0,就这点本事吗?);

Wait.time(40);

SouSouSingled.talk(1,(……糟糕!碰到高手了。));

Wait.time(40);

SouSouSingled.talk(1,呀呀呀……!);

//单条控制:人物前移[人物(0左1右),移动距离(+右-左)]

SouSouSingled.move(1,-1);

Wait.time(40);

//单条控制:攻击挡格[人物(0左1右)]

SouSouSingled.atkBlock(1);

//单条控制:攻击挡格[人物(0左1右)]

SouSouSingled.atkBlock(1);

//单条控制:攻击挡格[人物(0左1右)]

SouSouSingled.atkBlock(1);

Wait.time(40);

//单条控制:人物喘气[人物(0左1右)]

SouSouSingled.pant(1);

Wait.time(40);

SouSouSingled.talk(1,不行啊,完全无效……);

Wait.time(40);

SouSouSingled.block(0);

SouSouSingled.talk(0,怎么样?还打吗?);

Wait.time(40);

//单条控制:人物攻击预备[人物(0左1右)]

SouSouSingled.atkPrepare(1);

//单条控制:单条对话[人物(0左1右),说话内容]

SouSouSingled.talk(1,打,不打就没饭吃啊,杀啊!);

Wait.time(40);

//单条控制:人物前移[人物(0左1右),移动距离(+右-左)]

SouSouSingled.move(1,-1);

//单条控制:攻击跳闪[人物(0左1右)]

SouSouSingled.atkDodge2(1);

Wait.time(40);

SouSouSingled.talk(1,嗯?人呢?);

Wait.time(40);

SouSouSingled.talk(0,笨蛋,在你后面呢,看招!);

//单条控制:攻击致命[人物(0左1右)]

SouSouSingled.atkHertFatal(0);

//单条控制:人物喘气[人物(0左1右)]

SouSouSingled.pant(1);

SouSouSingled.talk(1,我的妈呀,不行了);

Wait.time(40);

//单条控制:人物前移[人物(0左1右),移动距离(+右-左)]

SouSouSingled.move(0,1);

//单条控制:攻击挡格[人物(0左1右)]

SouSouSingled.block(0);

Wait.time(40);

//单条控制:单条对话[人物(0左1右),说话内容]

SouSouSingled.talk(0,明知道打不过俺,还这么拼命,勇气可嘉,今天就饶你命吧。);

Wait.time(40);

//单条控制:单条结果[-1失败0平手1胜利]

SouSouSingled.result(1);

Wait.time(100);

//单条结束

SouSouWindow.singledend();

29,     SouSouWindow.setCondition(1、击毙程远志和邓茂!,1、刘备阵亡!);显示胜利条件

30,     SouSouSAttack.start(0);当一切准备就绪,战斗开始。

31,     SouSouWindow.addMoney(100);获得银两。参数(银两数)。

32,     Exit.run();该剧本结束,不再进行此剧本的其他代码了。

33,     SouSouSound.playEffect(Se35);播放声效。

34,     SouSouSCharacter.outRect(1,0,0,15,15);区域撤退,第一个参数是表示所属,-1为友军,0为我军,1为敌军。

35,     SouSouSCharacter.changeRect(1,status,chaos,14,6,19,7);区域混乱,第一个参数是表示所属,-1为友军,0为我军,1为敌军。

四,关于游戏中各种图片的修改
现在手头没带源文件,稍后补充。

五, 作者的话
写的有些乱,大家最好对照着游戏和游戏剧本看一下,以后有时间了会专门制作一个剧本编辑器,欢迎大家拍砖。

如何用LegendForFlashProgramming来制作SLG游戏相关推荐

  1. 学习制作SLG游戏(一)

    好吧,最近迷上了海岛奇兵,打算学习学习SLG的游戏开发,教程参考: [系列原创教程]制作基于Cocos2d-x的SLG游戏.貌似原教程没有素材,我就只在第四章找到了一个类似素材...但是后来发现貌似图 ...

  2. python能制作游戏吗_如何用Python制作小游戏

    要想用Python制作小游戏,必须要安装一个插件Pygame 什么是Pygame Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.建立在SDL基础上,允许实时电子游戏研发而无需 ...

  3. 如何用python制作五子棋游戏_Python制作打地鼠小游戏

    原文链接 Python制作小游戏(二十一)​mp.weixin.qq.com 效果展示 打地鼠小游戏https://www.zhihu.com/video/1200492442610450432 简介 ...

  4. 如何用UE4制作2D游戏文档(一)——基础篇

    一.前言 首先感谢B站马克镇镇长的视频讲解清晰把很多细节都照顾到了,我本来自己做的时候没有视频说的那么细,参考他的全套系列视频之后完善了很多内容. 视频指路:https://www.bilibili. ...

  5. 如何用UE4制作2D游戏文档(二)——资源篇

    一.前言 首先感谢B站马克镇镇长的视频讲解清晰把很多细节都照顾到了,我本来自己做的时候没有视频说的那么细,参考他的全套系列视频之后完善了很多内容. 视频指路:https://www.bilibili. ...

  6. 如何用UE4制作2D游戏文档(三)——角色篇

    一.前言 首先感谢B站马克镇镇长的视频讲解清晰把很多细节都照顾到了,我本来自己做的时候没有视频说的那么细,参考他的全套系列视频之后完善了很多内容. 视频指路:https://www.bilibili. ...

  7. 城市代码表_从零开始做一个SLG游戏(六)游戏系统以及配置表

    本文主要是来梳理下游戏内的基本系统(虽然只是照搬polytopia的,但是还是要总结一下),并预先做一些配置表,并实现读取. 一.经济系统 1.总述 经济系统可以是整个游戏的核心.在本游戏中只有一种资 ...

  8. 腾讯游戏学院------SLG游戏技术【笔记】

    文章仅记录部分内容作为笔记,对视频感兴趣的可见下面链接的原视频: https://gameinstitute.qq.com/course/detail/10108 课程目录: 这里面提到的游戏,直接用 ...

  9. SLG游戏性能优化个人总结

    最近一直在做SLG游戏的性能优化,趁着手还热乎,把自己一些心得总结一下. 目前SLG是基于Flash制作的,语言当然是AS3.0,目前Flash虽然要死要死的了,可是他背后的AS3.0是非常强大的,目 ...

最新文章

  1. 硬盘出现坏道后的修复技巧
  2. 阻挡一个人前进的东西是什么?无聊+浮躁!
  3. C/C++调试:gdbserver的简单使用
  4. php ajax 重复提交,php+ajax远程加载避免重复提交
  5. 通过google app engine 在google cloud 部署支持quic的Java web 应用(多种方式)
  6. 关于窗口的一些小脚本
  7. BZOJ 1270: [BeijingWc2008]雷涛的小猫( dp )
  8. go语言结构体作为函数参数,采用的是值传递
  9. Hibernate(十三)迫切内连接fetch
  10. Centos7安装Redis4.0.8
  11. 通信网真的面临容量危机?
  12. HTML矩形与矩形、圆形与圆形、矩形与圆形元素的碰撞判断与动画
  13. 达而稳 驱动 fl2000dx_Intel-AMD核显驱动没人管:Win10无法升级,不要撞车
  14. paip.验证码识别---反馈法提高识别率
  15. xshell写JS脚本自动进行操作
  16. ionic 中使用 slidebox 利用angular ng-repeat 渲染后不显示问题
  17. 关闭开机弹窗广告2345(其他弹窗也适用)
  18. 【问题解决方案】电脑版微信如何使用外接摄像头
  19. Photoshop滤镜巧制超级美女插画效果(转)
  20. open连接MySQL超时_mysql5 超时链接

热门文章

  1. [转]2013个人淘金时代渐渐落幕 市场风标指向团队开发
  2. C语言sleep函数与usleep函数
  3. php网上花店开题报告,《网上花店设计开题报告.doc
  4. excel补充操作技能3--日期函数、表格、文档安全性、邮件合并
  5. 西门子免授权数控机床采集方案
  6. 博客园博客如何使用模板
  7. 北京大学2021年优秀中学生寒假学堂报名通知
  8. 这些常见产品问题你会解吗?
  9. 21点双人对战和人机对战C++
  10. 增加出库通知单统计事件