Project1

标题: 【★】如何实现物品在地图任意位置的收起与摆放? [打印本页]

作者: 迷糊的安安    时间: 2012-10-8 13:59
标题: 【★】如何实现物品在地图任意位置的收起与摆放?
本帖最后由 迷糊的安安 于 2012-10-25 10:58 编辑

本问题为【Ace推荐问答计划】活动问题。
详情请点击:http://rpg.blue/forum.php?mod=viewthread&tid=251118

实现要求:在特定的地图区域,可以把身上的部分物品(例如椅子)摆放到该地图特定区域的任意位置。也可以把部分物品收走进物品栏。可以考虑制作一个“主角摆放障碍物阻挡怪物直到撑过若干分钟”的小游戏。
在地图上摆满事件格的方式是不可取的。dsu_plus_rewardpost_czw
作者: 亿万星辰    时间: 2012-10-9 10:59
事件用多个事件页来实现就好,配合ACE的特殊物品调用功能,获取物品ID,把这个事件移动到角色面前的位置,需要做范例?
作者: 婉烟沉沫    时间: 2012-10-9 11:03
用变量判断地图ID和地点,然后再用公共事件调用吧……
作者: 没是的人    时间: 2012-10-18 17:29
本帖最后由 没是的人 于 2012-10-19 10:45 编辑

附上工程:
(百度网盘)
(¥http://pan.baidu.com/share/link?shareid=89746&uk=3993422208)(有错误,不要下这个)
http://pan.baidu.com/share/link?shareid=90151&uk=3993422208第二版,修正了两个bug
这次的范例用了一个外挂脚本——
因为箱子放地上了以后,进出房间要保证箱子的位置不刷新掉,要是用事件来完成这个的话,工程就失去了可扩展性
用的是可乐君的这个脚本@feizhaodan(场所移动后保存事件位置 ):
http://rpg.blue/forum.php?mod=vi ... p;extra=#pid1895656
想那这个范例,做游戏的同学要看看这个脚本怎么用,别把自己原有的地图上的事件颠覆了
注:如果不想用这个脚本也可以(什么都不用改,就把范例中的这个脚本去掉就好了)
不过这样就要在游戏中设置限制,不能让玩家进出门来掩饰bug,比如:完成房间内的解谜才能出门,之类的。
如果觉得这个bug无所谓(其实不追求完美,不影响游戏流程的话的确可忽略),不限制也行



工程里的范例有两部分:自己看↓



在特定的地图区域,(实现,在非物品使用区域使用物品时候系统会提示)
可以把身上的部分物品摆放到该地图特定区域的任意位置。也可以把部分物品收走进物品栏。(实现,各项操作不冲突,进出房门物品位置不变)
可以考虑制作一个“主角摆放障碍物阻挡怪物直到撑过若干分钟”的小游戏。(改进,做了两个,一个是用箱子(椅子?无所谓啦,没素材)来堵怪物,一个是用捕兽夹来抓怪物)
在地图上摆满事件格的方式是不可取的。(肯定不会这样啦)
总体思路:
任意位置的物品捡拾和摆放是一种视觉上的假象,他的本质是


箱子有两个事件页,按确定键后会切到第二页(空白),造成箱子被捡走的假象,同时物品“木箱子”+1
在使用“木箱子”的时候,调用公共事件,判断场地上已经变成空白的箱子事件,把箱子事件移动到人物的面前一格,
再把事件页切到第一页(同时物品“木箱子”-1),造成箱子被摆放的假象




本范例有可扩展性,但是要保证物品的个数不能超过地图中准备的事件个数(要设置限制,比如捕兽夹携带个数不能超过n个,n为地图中事件准备的个数)������������
作者: 怪蜀黍    时间: 2012-10-18 18:59
没是的人 发表于 2012-10-18 17:29
附上工程:
(百度网盘)
http://pan.baidu.com/share/link?shareid=89746&uk=3993422208

范例做得号萌哦,超喜欢。
这里需要优化一下:

作者: 没是的人    时间: 2012-10-18 23:50
本帖最后由 没是的人 于 2012-10-19 10:45 编辑
protosssonny 发表于 2012-10-18 18:59
范例做得号萌哦,超喜欢。
这里需要优化一下:


重传范例:
(百度网盘)
http://pan.baidu.com/share/link?shareid=90151&uk=3993422208
以修正毒囊未得到的问题,(小细节物品居然给忘了,其实物品都设计好了)
修正捕兽夹放到树上的问题:
一激动把所有地方都铺上区域1了

把不能通行的这部分去掉就可以了,我粗心,大家可不要粗心啊!

多谢p叔测试
作者: 没是的人    时间: 2012-10-19 19:15
@迷糊的安安

最多这样了,就两句我就解释一下好了,应该不难
1.$game_self_switches[[地图id,事件id ,"独立开关字母"]] == false/true(真假,代表了独立开关的开关)
用其他事件来控制独立开关
主要原因是:事件形式没有控制其他事件独立开关的功能(不用独立开关又没有扩展性了)
2.$game_map.events[id].moveto(x,y)
设置事件位置,events[id],里的id是事件id,x,y就是想要移动到的坐标
主要原因是:在事件方法不能指定以变量为目标的事件的移动,想要移动的事件必须直接指定,虽然可以用条件分歧来判断,但肯定会失去扩展性了




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1