|
- -- 借用了花麻将的翻萝卜动画
- local MJDefine = MJFramework.MJImport("mj.luaScript.MJDefine")
- local yibinmajiangFanBenJinView = class("yibinmajiangFanBenJinView", cc.UIView);
-
- local OTHER_CARD_MOVE_X = 115 -- 上下牌的偏移值
- local LAYOUT_SCALE = 0.35 -- 整个layout缩小值
-
- function yibinmajiangFanBenJinView:ctor (desktopType)
- yibinmajiangFanBenJinView.super.ctor(self);
- self.desktopType = MJDefine.DesktopType.TwoD
- self.cardValue = nil
- self.endCallback = nil
- self.isShowAni = true
- self:loadUI();
- end
-
- function yibinmajiangFanBenJinView:onEnter ()
- yibinmajiangFanBenJinView.super.onEnter(self);
- self:initViews();
- end
-
- function yibinmajiangFanBenJinView:loadUI( )
- local ui = loadUI("mj_yibinmajiang/res/ui_fangjian/mj_yibinmajiang_fanbenjin.ui");
- self.ui = ui;
- self:addChild(ui);
- end
-
- function yibinmajiangFanBenJinView:initViews ()
- self.ui.Items.ImageView:setVisible(false)
- self.ui.Items.Layout_BenJinCards:setTouchEnabled(true)
- end
-
- -- 设置结束回调
- function yibinmajiangFanBenJinView:setEndCallback(endCallback)
- self.endCallback = endCallback
- end
-
- -- 设置是否要播放动画
- function yibinmajiangFanBenJinView:setIsShowAni(isShow)
- self.isShowAni = isShow
- end
-
- function yibinmajiangFanBenJinView:setCards (cardValue, tingCardTable)
- self:clearCards()
- self.cardValue = cardValue
- self.tingCardTable = tingCardTable
-
-
- local layoutCards = self.ui.Items.Layout_BenJinCards;
- local card = self:createCard(cardValue, false)
- local cardBlack = self:createCard(cardValue, true)
- card:setName('card_benjin')
- cardBlack:setName('card_black')
- layoutCards:addChild(card)
- layoutCards:addChild(cardBlack)
-
- self:createTingYongCard()
- self:startCard()
- end
-
- function yibinmajiangFanBenJinView:startCard()
- if self.isShowAni then
- self:startAniOpenCard()
- else
- self:startOpenCard()
- end
- end
-
- -- 开牌动画
- --[[
- 1.翻转背面
- 2.翻转正面
- 3.延迟若干秒数后,显示其他牌
- 4.其他牌执行显示动画
- 5.其他牌执行缩小和移动动画
- 6.结束
- ]]
- function yibinmajiangFanBenJinView:startAniOpenCard()
- local layoutCards = self.ui.Items.Layout_BenJinCards
- local card = layoutCards:getChildByName("card_benjin")
- local cardBlack = layoutCards:getChildByName("card_black")
- local card_prev = layoutCards:getChildByName("card_prev")
- local card_next = layoutCards:getChildByName("card_next")
-
- card_prev:setVisible(false)
- card_next:setVisible(false)
-
- if not card or not cardBlack or not card_prev or not card_next then
- return
- end
-
- local cardDelayTime = 0.25
- local otherCardMoveTime = 0.25 -- 其他牌移动的时间
- card:setScale(cc.p(0, 1.7))
-
- -- 结束操作
- local endCallback = function()
- self:setTingCardColor(card, card_prev, card_next)
- if self.endCallback then
- self.endCallback()
- end
- end
-
- -- 执行缩小和移动动画(移动到左上角)
- local setCardScaleAndMove = function()
- local time = 0.5
- local layoutSize = self.ui:getContentSize()
- local moveToPos = cc.p(68, layoutSize.height - 95) -- 移动到的位置
- local scaleBy = cc.ScaleBy:create(time, LAYOUT_SCALE)
- local moveTo = cc.MoveTo:create(time, moveToPos)
- local end_func = cc.CallFunc:create(endCallback)
-
- self.ui.Items.Layout_1:setBackGroundColorOpacity(0)
- self.ui.Items.ImageView:setVisible(false)
- self.ui.Items.Layout_BenJinCards:runAction(cc.Sequence:create(cc.Spawn:create(scaleBy, moveTo), end_func))
- end
-
- -- 执行显示上下牌动画
- local showOtherCard = function()
- card_prev:setVisible(true)
- card_next:setVisible(true)
- local prev_moveBy = cc.MoveBy:create(otherCardMoveTime, cc.p(-OTHER_CARD_MOVE_X, 0))
- local next_moveBy = cc.MoveBy:create(otherCardMoveTime, cc.p(OTHER_CARD_MOVE_X, 0))
- -- local endFunction = cc.CallFunc:create(handler(self, self.hideOpenCard))
- card_prev:runAction(prev_moveBy)
- card_next:runAction(next_moveBy)
-
- self:runDelay(otherCardMoveTime + 0.25, setCardScaleAndMove)
- end
-
- -- 正面牌翻转完之后的回调
- local cardScaleEndCallback = function()
- self:runDelay(cardDelayTime, showOtherCard)
- end
-
- -- 背面牌翻转完之后的回调
- local blackCardScaleEndCallback = function()
- local acScale = cc.ScaleTo:create(0.1, 1.7, 1.7, 1)
- local acCallFunc = cc.CallFunc:create(cardScaleEndCallback)
- card:runAction(cc.Sequence:create(acScale, acCallFunc))
- end
-
- local acScaleBlack = cc.ScaleTo:create(0.1, 0, 1.7, 1)
- local acScaleBlackCb = cc.CallFunc:create(blackCardScaleEndCallback)
- cardBlack:runAction(cc.Sequence:create(acScaleBlack, acScaleBlackCb))
- end
-
- -- 不需要动画,直接开牌
- function yibinmajiangFanBenJinView:startOpenCard()
- local layoutCards = self.ui.Items.Layout_BenJinCards
- local card = layoutCards:getChildByName("card_benjin")
- local cardBlack = layoutCards:getChildByName("card_black")
- local card_prev = layoutCards:getChildByName("card_prev")
- local card_next = layoutCards:getChildByName("card_next")
- local tingyong = app.room.roomInfo:getGameRule().jingnum
- local layoutSize = self.ui:getContentSize()
-
- cardBlack:setVisible(false)
- self.ui.Items.Layout_BenJinCards:setVisible(false) -- 先将该层隐藏,避免突然放大缩小
- self.ui.Items.Layout_1:setBackGroundColorOpacity(0)
- self.ui.Items.ImageView:setVisible(false)
- card_prev:setPositionX(card_prev:getPositionX() - OTHER_CARD_MOVE_X)
- card_next:setPositionX(card_next:getPositionX() + OTHER_CARD_MOVE_X)
- self.ui.Items.Layout_BenJinCards:setScale(LAYOUT_SCALE)
- -- self.ui.Items.Layout_BenJinCards:setPosition(cc.p(68, layoutSize.height - 95)) -- 与上面动画位置一致
- self.ui.Items.Layout_BenJinCards:setPositionPercent(
- cc.p(
- 68 / layoutSize.width,
- (layoutSize.height - 95) / layoutSize.height
- )
- ) -- 与上面动画位置一致(这里要用百分比)
- self:setTingCardColor(card, card_prev, card_next)
-
- -- 执行显示动画和结束操作
- local function fun_show()
- self.ui.Items.Layout_BenJinCards:setVisible(true)
- if self.endCallback then
- self.endCallback()
- end
- end
-
- fun_show()
- end
-
- function yibinmajiangFanBenJinView:createCard(cardValue, isBlack)
- -- local mjType = isBlack and MJDefine.MJType.OutBlack or MJDefine.MJType.Operate
- local mjType = MJDefine.MJType.Operate
-
- -- 用新版的创建时候
- -- local CardClass = require('mj_yibinmajiang.luaScript.Views.2d.Card_2d')
- local CardClass = require(MJDefine.MJConfig_2d.MAHJONG_CARD)
- local card = CardClass:new(cardValue, MJDefine.PlayerViewType.My, mjType, -1)
-
- local scale = 1.7
- local layoutWidth = 200
- local w = card:getContentSize().width * scale
- local x = layoutWidth / 2
- card:setAnchorPoint(cc.p(0.5, 0.5))
- card:setPositionX(x)
- card:setScale(scale)
-
- -- 显示为盖牌
- if isBlack then
- card:setOperateBackImage()
- end
-
- return card
- end
-
- -- 清除牌
- function yibinmajiangFanBenJinView:clearCards( )
- self.cardValue = nil
- self.tingCardTable = nil
- self.ui.Items.Layout_BenJinCards:removeAllChildren()
- end
-
- -- 重置所有数据
- function yibinmajiangFanBenJinView:defaultState()
- self:clearCards()
- self.endCallback = nil
- self.isShowAni = true
- end
-
- -- 创建听用卡
- function yibinmajiangFanBenJinView:createTingYongCard()
- local prevCardValue, nextCardValue = self:getPrevAndNextValue(self.cardValue)
- local prevCard = self:createCard(prevCardValue, false)
- local nextCard = self:createCard(nextCardValue, false)
- prevCard:setName('card_prev')
- nextCard:setName('card_next')
- self.ui.Items.Layout_BenJinCards:addChild(prevCard)
- self.ui.Items.Layout_BenJinCards:addChild(nextCard)
- end
-
- -- 根据牌值获取上下值
- function yibinmajiangFanBenJinView:getPrevAndNextValue(cardValue)
- local prevValue, nextValue = MJDefine.getPrevAndNextValue(cardValue)
- return prevValue, nextValue
- end
-
- function yibinmajiangFanBenJinView:hideOpenCard()
- self:setVisible(false)
- self:defaultState()
- end
-
- function yibinmajiangFanBenJinView:setTingCardColor(card, card_prev, card_next)
- local tingyong = app.room.roomInfo:getGameRule().jingnum
- if tingyong then
- if tingyong == 4 then
- card_next:setTingColor()
- elseif tingyong == 8 then
- card_prev:setTingColor()
- card_next:setTingColor()
- elseif tingyong == 11 then
- card:setTingColor()
- card_prev:setTingColor()
- card_next:setTingColor()
- end
- end
- end
-
- return yibinmajiangFanBenJinView
|