找回密码
 点一下
查看: 2232|回复: 27

如何在环形TD地区中高效率检测玩家是否封死了路

[复制链接]
发表于 2012-1-23 08:02:50 | 显示全部楼层 |阅读模式
       如示意图 环形.JPG 有ABCD4个区域,按我的设计,我想让怪物从A出现,ABCDA这样走一圈
我想检测玩家是否完全封死了某条通道,但是如果我用跟随会导致怪物绕圈子,举例如AB被封死,怪物就会绕行ADCBCDA,按我的设计我不想让这种情况发生,而且由于我设计会有先后2波分别从内侧和外侧通过,我也不能把AD间截断。
       我后来想到可以用传送门把AD改成单行道解决问题,但我希望找出一种不这么做也能检测玩家是否封死的办法,我当时想到的是创造马甲X在A,让他沿ABCDA走,每当他进入任意一个区域变量Y+1,如果他完成一圈后Y不为则说明有路封死,但这样效率低且不能找出哪里被封死,有没有人能有更高效的办法。



       强大的GA 没人出来讨论一下吗?有点失望啊= =
       那就沉吧


      补充一点忘记说的,如果完全封死,怪物要拆掉塔
发表于 2012-1-23 16:26:54 | 显示全部楼层
未命名.jpg
用这个来判断的话
速度应该会比马甲行走那样快很多
但是如果地方较大的话估计会很烧机子……
至于怎么判断的话,没想清楚
思路上的话这东西应该是能判断的



至于9个小时没人回复的话
在GA不是常有的事情嘛
回复

使用道具 举报

发表于 2012-1-23 16:32:19 | 显示全部楼层
似乎没有什么高效的方法……
如果像喵呜~说的,检查地面可通行,那么在一些开放性的TD(就是用塔来堆迷宫的)游戏没法起作用……虽说玩过防止封路的TD,不过没去想过原理……
回复

使用道具 举报

发表于 2012-1-23 17:12:23 | 显示全部楼层
不如从玩家建造的时候判断吧~~
回复

使用道具 举报

 楼主| 发表于 2012-1-23 17:35:22 | 显示全部楼层
2楼你那个方框是从哪里点出来的= =我连那个是事件还是条件还是动作都不知道。。。。。。
4楼能说详细点吗,怎么从建造开始判断
回复

使用道具 举报

发表于 2012-1-23 17:38:44 | 显示全部楼层
做一条不可建造的通道...
回复

使用道具 举报

 楼主| 发表于 2012-1-23 18:17:46 | 显示全部楼层
ls绝对不可行= =这是迷宫类TD,玩家建在那里都行,只要不封死
按你的做法结果就是无法建迷宫
回复

使用道具 举报

发表于 2012-1-23 19:27:03 | 显示全部楼层

回 lyzr 的帖子

lyzr:2楼你那个方框是从哪里点出来的= =我连那个是事件还是条件还是动作都不知道。。。。。。
4楼能说详细点吗,怎么从建造开始判断
(2012-01-23 17:35)
那个不是2L啦,沙发是1L啦……
那个可通行状态在布尔值里面……
回复

使用道具 举报

发表于 2012-1-23 19:32:42 | 显示全部楼层
那这样呢,假如怪物也可以攻击,然后如果路封死了,怪物应该自动拆掉建筑吧。
或者,设置单位的碰撞路径以及建筑纹理全都设置成一样的,然后将地形弄成刚好可以摆放成一列不能有间隙的,然后创建区域,创建一条线,并在建造TD的时候判断该单位是否在某区域并且与之一起在这区域的建筑不超过一定数量,那么就行了,不过我觉得这个效率低下啊!
还有一个办法,利用地形,路径,建筑纹理,把建筑纹理弄大一些,地形设置成不可能能够使TD完全堵路的宽度,我估摸着应该行吧……
回复

使用道具 举报

发表于 2012-1-24 00:38:09 | 显示全部楼层
单位的命令ID,如果出现停止,则命令攻击。
话说楼主你可以看看玻璃渣的TD,红蓝CP,有小游戏的那个。
回复

使用道具 举报

发表于 2012-1-24 01:52:15 | 显示全部楼层
不知道LZ在判断出封路后要实现什么效果,LZ只说了一定要让怪按照固定路线移动,但是没说被封路后具体会怎么样。。
根据不同的效果,实现的方法可以完全不一样
   

以下是单纯判断是否封路的算法:
TD.png TD2.png
A-F是塔

判断这里是否被封死,只要判断从A到E是否有塔相连,且A粘内边,E粘外边;
也就是说,比如从E开始判断,范围选取D,D选取C,C选取B,B选取A,判定A为沾内边,那么这路就是封死的。
至于粘边的判断,只要判断坐标或者直接画个比黑色矩形稍大点区域,然后判断塔是不是在里面即可,粘外边判断类似~

PS:每次判定封路只要从内边塔或外边塔开始即可,不要双向判定浪费效率
PS:为了防止右边的图中,A选了B和F后,B和F互相选取这种情况,以及A选了B,B又选A这种情况,应该创建个临时单位组用来储存A、B、F,选取时匹配塔不能在这个单位组里,另外这个临时单位组要等封路判定完再清除,不然会出现别的重复判定
额。。。不知道有没有什么没想到的问题。。
回复

使用道具 举报

 楼主| 发表于 2012-1-24 11:27:28 | 显示全部楼层
8L我没说怪物会拆塔,我已补上,谢谢,你那个区域估计要卡死机子,而且如果对面斜线赌你呢= =
回9L
话说你这个ID我以前有点印象唉= =好像是很老的人了。。。。
玻璃渣那个TD我昨天后来就在看,那个TD我很喜欢玩的,小游戏大亮!的确用无目标指令靠谱,但那个是建立在非环形通道条件下的(也不能有道路交叉出现),否则怪物会绕圈子。如果是一条线,这个方法则很好。
10L好像很高深,目前我觉得。。。。。。。。。。。。。怎么说,能做出一个演示就好了

话说你们都是夜猫子啊。1点2点起来发贴
回复

使用道具 举报

发表于 2012-1-24 12:05:12 | 显示全部楼层
lyzr:8L我没说怪物会拆塔,我已补上,谢谢,你那个区域估计要卡死机子,而且如果对面斜线赌你呢= =
回9L
话说你这个ID我以前有点印象唉= =好像是很老的人了。。。。
玻璃渣那个TD我昨天后来就在看,那个TD我很喜欢玩的,小游戏大亮!的确用无目标指令靠谱,但那个是建立在非环形通道条 .. (2012-01-24 11:27)
我不是夜猫……发帖的时候我这边是下午。。


我说的那个很简单啊~

首先是想什么情况下能够封路,得到的结论是只有当内边和外边都有塔贴着,并且这两塔之间连成一条完整的线的时候才形成封路;

那么接着……

没有接着了,可以直接最后。。
最后就是写触发来判断这种情况即可~
判断的过程10楼已写就不重复了~
就得字太多看着烦的话就出去活动下,然后喝杯茶静下心慢慢看~[s:191]
回复

使用道具 举报

 楼主| 发表于 2012-1-24 12:07:33 | 显示全部楼层
LS我实际面临的情况比这个什么环形严重多了
我的图有个X型通道如果玩家赌了对角线。。。。。。。。
回复

使用道具 举报

发表于 2012-1-24 12:10:37 | 显示全部楼层
于是突然发现LZ补充说怪会拆塔…………

这样的话每次用我那个方法就要在造塔时判断一次是否封路了,然后在封路的地方创造矩形区域,最后命令进入区域的怪拆塔。。

个人能想到的只有这样了……


其实裤子说的应该就可以实现。。
应该吧……

不过难点在于如何判断怪的停止或者转向移动啥的。。
似乎还是要判断封路……

不好……我的思路被封路局限了。。
这种时候需要小鸟。。
回复

使用道具 举报

 楼主| 发表于 2012-1-24 12:25:29 | 显示全部楼层
其实我突然想到我们都是白费功夫
只要告诉玩家把路封死就极易出现bug就行了
正常人 不会故意去封死= =
ls的方法有一点问题,就是只能检测一条线,换句话说,有一个地方没封死就可能通过检测
回复

使用道具 举报

发表于 2012-1-24 12:32:22 | 显示全部楼层
有BUG谁还玩这图额。。。


不会啊……为什么只能检测一条线。。

比如10楼右图,从A开始,选中B和F,F没有了就停止F那端,然后B那端继续检测,直到E,于是检测到封路
回复

使用道具 举报

 楼主| 发表于 2012-1-24 12:38:15 | 显示全部楼层
.....................................你没明白我意思,我给你画个图
等等 示意图.JPG ABCD塔
按你的方法,检测一次如果第一个抽到A则会检测出问题= =
如果是BCD则无误



猛然发现你可以造一座塔检测一次
回复

使用道具 举报

发表于 2012-1-24 12:45:03 | 显示全部楼层
如果怪物数量不多:
每只怪物拥有两块区域,目标区域和出发区域。
目标区域是怪物行走的下一个区域,由”单位进入区域“或”创建单位“启动。
出发区域是怪物接触到的上一个区域,由”单位进入区域“启动。
接下来只要判断单位进入哪一个区域就行了
如果是单位进入目标区域,删除原来的出发区域,把目标区域设置为出发区域,并重新指定一个目标区域。
如果是进入了出发区域,那么就能判断单位走回头路了。
这只是一个思路,从来没用过这种方法,有可能会出现各种问题。

如果怪物数量很多。
一个区域连一个区域,单位经过区域的时候检查单位的自定义值,并且和经过的区域进行比较。
比如说区域1234,他们的方式是 1→2
                                                   ↑    ↓
                                                   4←3

当单位创建的时候,自定义值=0,向任意一个区域发布移动命令。   
经过区域1,读取触发单位自定义值=0。从哈希表或缓存里根据进入区域所存储的信息,读取下一个区域,发布移动命令。
设置触发单位的自定义值=0+1,绑定区域到触发单位身上。   
经过区域2,读取触发单位自定义值=1。从哈希表或者缓存里读取1号区域,如果不存在,从哈希表或缓存里根据进入区域所存储的信息,读取下一个区域,发布移动命令。同时设置触发单位的自定义值=1+1,绑定区域到触发单位身上。
如果1号区域已经存在,说明该单位重复进入了同一个区域,可以考虑枪毙了。   

区域3同上
回复

使用道具 举报

 楼主| 发表于 2012-1-24 12:51:31 | 显示全部楼层
LS就是史奇毕的方法吗,我用了类似的方法,我用了建立N个预设单位组,每换一次目的点就换一个单位组我目前也认为这个方法比较靠谱
刚出的怪物在redgroup0

[trigger]

chuguai001
    事件
        单位 - 单位进入 red 00 <预设>
    条件
        ((触发单位) 的所有者) 等于 玩家11(暗绿)
    动作
        如果所有条件成立则做动作1,否则做动作2
            If - 条件
                ((触发单位) 在 redgroup0 中) 等于 TRUE
            Then - 动作
                单位组 - 把 (触发单位) 从 redgroup0 移除
                单位组 - 添加 (触发单位) 到 redgroup1
                单位 - 对 (触发单位) 发布 跟随 命令到目标: 能量圈 0005 <预设>
            Else - 动作
                单位 - 对 (触发单位) 发布 攻击移动 命令到目标点: (red 01 <预设> 的中心点)
[/trigger]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-4 03:07 , Processed in 0.189302 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表