cocos2dx 3d开源项目 fantasyWarrior3D 从零走起 2 [ChooseRoleScene]

cocos2dx 3d开源项目 fantasyWarrior3D 从零走起 2 [ChooseRoleScene],第1张

概述1. 触摸事件 function ChooseRoleScene:initTouchDispatcher()  初始化监听对象     local listenner = cc.EventListenerTouchOneByOne:create() 注册 eventDispatcher:addEventListenerWithSceneGraphPriority(listenner, self.l 1. 触摸事件
function ChooseRoleScene:inittouchdispatcher()


初始化监听对象
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增加了一些先慢后快的d性效果
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个弧度 总结

以上是内存溢出为你收集整理的cocos2dx 3d开源项目 fantasyWarrior3D 从零走起 2 [ChooseRoleScene]全部内容,希望文章能够帮你解决cocos2dx 3d开源项目 fantasyWarrior3D 从零走起 2 [ChooseRoleScene]所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1016944.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存