本文主要是介绍00003 不思议迷宫.0006:客户端的操作如何反应到服务器?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
00003 不思议迷宫.0006:客户端的操作如何反应到服务器?
玩家点击手机屏幕,根据点到内容的不同而执行不同的操作,比如切换画面或者场景、播放动画或声音、发送数据等等。我现在所关心的是点到物品,比如主界面中的海怪触手、漂流瓶、罐子等等,还有地牢中神龙许愿点击99次矿物后才出现的钻石。
我在主界面的创建代码中未能找到海怪触手、漂流瓶、罐子之类的相关代码(可能有,但被我忽略了;也可能是确实没有,它们都是动态创建的),所以研究下地牢中的物品捡取吧。
地牢界面的入口代码为/src/game/ui/form/dungeon/UIDungeonMain.luac。打开瞅瞅,发现代码很长,那如何快速找到我们所关心的物品捡取事件呢?其实办法很简单,只要搜索就行。
所谓物品捡取事件,其实也就是屏幕点击事件,只不过点击到的是物品。在cocos2dx中,点击事件需要通过addTouchEventListener、addClickEventListener之类的函数进行注册。查找结果让我有点意外:
-- 注册点击事件
functionUIDungeonMain:registerTouchEvent()
-- 卷轴按钮
local btn_Magic =findChildByName(self.node, "CT2/juanzhou");
local function onMagicOnClick(sender,eventType)
if eventType == ccui.TouchEventType.endedthen
AudioM.playFx("button_spell");
if ME.user.forbidToOpenMagicUI andnot DungeonGuideM.isGuideFinished() then
-- 禁止打开魔法书界面
return;
end
-- 打开魔法书界面
self:showMagicScrollUI();
end
end
AddTouchEventListener(btn_Magic,onMagicOnClick);
-- 宝物按钮
local btnTreasure =findChildByName(self.node, "CT2/baowu");
……
AddTouchEventListener(btnTreasure,onTreasureOnClick);
-- 英雄格子
localbgHero = findChildByName(self.node, "CT2/bg3");
……
AddTouchEventListener(bgHero,onBgHeroOnClick);
-- 施法选择目标背景
local screen_bg =self.node:getChildByName("select_target_bg")
……
screen_bg:addTouchEventListener(onOnClick);
-- 称号冒泡点击事件
local careerBubble =findChildByName(self.node, "CT2/career_bubble/bg");
……
careerBubble:addTouchEventListener(onBubbleClick);
end
和捡取物品一点关系都没有!
好吧,那就换个思路。想想,既然是捡取物品,那相关的函数的函数名或者函数代码中总应当出现item、equipment这些字样吧?这次确实找到了:
-- 注册捡取物品的处理函数
EventMgr.register("UIDungeonMain", event.PICK_UP_ITEM,function(params)
self.grids[params.pos]:onPickUp(params.bonus, params.newBonus,
params.isItemVisible, params.noAlert, nil, params.borrowGrid);
localpos = params.pos;
localtype = params.type;
-- 如果是拾取地图
if type== GRID_TYPE_MAP then
-- 判断邻格是否开启
local adjoinGrids = DungeonM.getAdjoinGrids(pos);
fori = 1, #adjoinGrids do
local targetPos = adjoinGrids[i];
local ok = DungeonM.canOpenGrid(targetPos);
if ok == GRID_OPEN_OK then
self.grids[targetPos]:gotoVisible();
end
end
end
self:whenPickUpItem(params);
-- 更新界面UI
--self:updateUI();
end);
拾取地图这什么鬼?先不管它,还是研究下self.grids[params.pos]:onPickUp和self:whenPickUpItem。
找到self.grids的赋值处,确定self.grids[params.pos]的类型:
-- 生成格子
self.grids ={}
for i = 1,GRID_ROW_NUM do
for j =1, GRID_COL_NUM do
……
local grid = UIGrid.create(……);
……
self.grids[index] = grid;
……
end
……
end
<这篇关于00003 不思议迷宫.0006:客户端的操作如何反应到服务器?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!