cocos2dx 3d开源项目 fantasyWarrior3D 从零走起 2 [ChooseRoleS
发布时间:2020-12-14 19:37:04 所属栏目:百科 来源:网络整理
导读:1. 触摸事件 function ChooseRoleScene:initTouchDispatcher() 初始化监听对象 local listenner = cc.EventListenerTouchOneByOne:create() 注册 eventDispatcher:addEventListenerWithSceneGraphPriority(listenner,self.layer) 设置处理函数函数 listenner
1. 触摸事件初始化监听对象 local listenner = cc.EventListenerTouchOneByOne:create() 注册 eventDispatcher:addEventListenerWithSceneGraphPriority(listenner,self.layer) 设置处理函数函数 listenner:registerScriptHandler(function(touch,event) //函数体 return true end,cc.Handler.EVENT_TOUCH_BEGAN ) (1) EVENT_TOUCH_BEGAN实现旋转 如果点击到了英雄区域if cc.rectContainsPoint(heroSize,touchbeginPt) then --rotate isRotateavaliable = true return true end 记录一下点击位置 touchbeginPt (2) 判断是否点击背包里的装备因为self._weaponItem:getBoundingBox()获得的区域都是与背包的相对区域,所以鼠标点击位置首选转换到与背包的相对位置 touchbeginPt = self._bag:convertToNodeSpace(touchbeginPt) 如果点到装备了,放大和调透明度 self._weaponItem:setScale(1.7) self._weaponItem:setOpacity(150) (3)EVENT_TOUCH_MOVED 滑动角色判断滑动位置是否超过50像素调用rotate3Heroes 通过3d坐标的移动来实现位置轮换,EaseCircleActionInOut增加了一些先慢后快的弹性效果 cc.EaseCircleActionInOut:create(cc.MoveTo:create(rotatetime,pos[3])) (4)EVENT_TOUCH_ENDED换装的实现在每个角色中实现了switchArmour switchWeapon switchHelmet 切换两套装备mesh的显示与隐藏。 不过这种实现方式的扩展性有待考量,难道说有n套装备,那么每个部位都需要 n个对应的mesh吗? 2. UI上的对象(1) function ChooseRoleScene:addButton() “进入游戏”按钮使用到了全局变量 ReSkin 来记录穿戴的装备id 在跳转BattleScene之前把相关的lua 对象清空了一下 package.loaded["BattleScene"]=nil package.loaded["Manager"]=nil package.loaded["Helper"]=nil package.loaded["MessageDispatchCenter"]=nil package.loaded["BattleFieldUI"]=nil 设置button位置 next_Button:setNormalizedPosition({x=0.34,y=0.13}) Node::setNormalizedPosition方法,Node的位置像素会根据它的父节点的尺寸大小计算,即按比例 (2). function ChooseRoleScene:addBag() 装备和属性self:switchTextWhenRotate() 切换职业图标和设置属性值 其实装备的位置都是写死了的,就没有什么参考的必要了 (3). function ChooseRoleScene:addHeros() 添加角色旋转英雄: local function hero_rotate() local rotation = self.layer:getChildByTag(sortorder[2]):getRotation3D() self.layer:getChildByTag(sortorder[2]):setRotation3D({x=rotation.x,y=rotation.y+rotate,z=0}) end sortorder[2] 存放的中间位置的英雄 setRotation3D({x=rotation.x,z=0}) 开启一个schedule每次旋转了0.5个弧度(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c#中合并excel表格的方法示例
- ajax级联菜单实现方法实例分析
- flashdevelop air 无法调试的问题
- c# – HttpHeaders.TryAddWithoutValidation的目的是什么?
- flash – 如何从swf文件中提取图像?
- c – 抽象类为std :: initializer_list对象
- ruby-on-rails – Ruby和Ruby on Rails有什么区别?
- c – 在常量表达式上下文中定义之前嵌套的`constexpr`函数调
- c – 为什么在Windows上没有具有microsec分辨率的boost ::
- ios – i386架构的未定义符号:“_OBJC_CLASS _ $_ MFMailC