展会信息港展会大全

cocos2dx 3d开源项目 fantasyWarrior3D 从零走起 2 [ChooseRoleScene]
来源:互联网   发布日期:2015-09-27 15:14:34   浏览:1622次  

导读: 1. 触摸事件 function ChooseRoleScene:initTouchDispatcher() 初始化监听对象 local listenner = cc.Event...

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增加了一些先慢后快的弹性效果

cc.EaseCircleActionInOut:create(cc.MoveTo:create(rotatetime,pos[3]))(4)EVENT_TOUCH_ENDED

换装的实现

在每个角色中实现了switchArmourswitchWeaponswitchHelmet

切换两套装备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,y=rotation.y+rotate,z=0}) 开启一个schedule每次旋转了0.5个弧度

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港