铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 1824|回复: 7

如何一次性退出多层父菜单?

[复制链接]
发表于 2012-1-1 09:24 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
本帖最后由 查理猫 于 2012-1-1 09:25 编辑

RT吖   这几天看源码,发现菜单项的注释里面有一条

-- 返回值  0 Esc返回
--         >0 选中的菜单项(1表示第一项)
--         <0 选中的菜单项,调用函数要求退出父菜单,这个用于退出多层菜单

于是我便试了试 写了个如下的三层菜单代码


发现最后不能全部退出所有菜单啊 求解 如何退出多层菜单?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2012-1-1 09:26 | 显示全部楼层
本帖最后由 查理猫 于 2012-1-1 09:27 编辑
  1. local function aaa()
  2.       
  3.     return -1
  4. end

  5. local function aa()

  6. local menu={{1,aaa,1},{1,nil,1},{1,nil,1},{1,nil,1}}
  7. local r=ShowMenu(menu,4,0,21,21,0,0,1,1,CC.DefaultFont,C_ORANGE,C_WHITE);

  8. end

  9. local function a()
  10.     local menu={{1,aa,1},{1,nil,1},{1,nil,1},{1,nil,1}}
  11.     local r=ShowMenu(menu,4,0,11,11,0,0,1,1,CC.DefaultFont,C_ORANGE,C_WHITE);
  12. end

  13. local menu={{1,a,1},{1,nil,1},{1,nil,1},{1,nil,1}}
  14. local r=ShowMenu(menu,4,0,1,1,0,0,1,1,CC.DefaultFont,C_ORANGE,C_WHITE);
复制代码
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-1-1 09:38 | 显示全部楼层
回复 查理猫 的帖子

同问,坐等高人
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-1-1 10:25 | 显示全部楼层
本帖最后由 Simikool 于 2012-1-1 10:27 编辑

每一层都加一个 if r < 0 then return 0  不知怎样?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-1-1 10:42 | 显示全部楼层
本帖最后由 南风一梦 于 2012-1-1 11:40 编辑

他的意思是你调用其他函数的同时,退出整个菜单界面

而且itemfuction返回1时才退出菜单所以你的代码里面
第3行应该写成return 1

而且第10行和第15行后应该添加return 1

当你用调用其它函数的方式退出当前级菜单以后,当前级showmenu函数返回负值,它是这个因果关系,不是说你返回负值才调用函数退出

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-1-2 19:28 | 显示全部楼层
好帖子我很喜欢
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-1-3 10:12 | 显示全部楼层
027提供的源码里,有这么一段代码,需要仔细看哦。 返回1的时候break;
  1. elseif  keyPress==VK_SPACE or keyPress==VK_RETURN  then
  2.             if newMenu[current][2]==nil then
  3.               returnValue=newMenu[current][4];
  4.               break;
  5.             else
  6.               local r=newMenu[current][2](newMenu,current);               --调用菜单函数
  7.               if r==1 then
  8.                   returnValue= -newMenu[current][4];
  9.                   break;
  10.               end
  11.                                 lib.LoadSur(surid,0,0);
  12.                                 if isBox==1 then
  13.                                         DrawBox(x1,y1,x1+w,y1+h,C_WHITE);
  14.                                 end
  15.                         end
复制代码
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2012-1-3 10:29 | 显示全部楼层
回复 蓝烟清 的帖子

问题是 这个BREAK 是针对当层的while来的吧 如果是多层菜单,每层菜单都是有一个while的  这个break 不够用啊。。。。

点评

被调用的函数,只要返回1,那么它对应的父窗口就会关闭。按照这样推算, 如果你要实现一次全部退出,所有的函数都要返回1  发表于 2012-1-3 10:36
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-15 11:42

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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