微信小程序翻牌游戲如何做,微信小程序翻牌游戲?qū)崿F(xiàn)效果
背景
ps:本次開發(fā)基于wepy框架
由于最近接到一個(gè)需求--抽獎(jiǎng)活動(dòng);
翻牌打亂活動(dòng)抽獎(jiǎng)活動(dòng),大概需求是這樣的,九宮格卡牌,先正面展示所有獎(jiǎng)品,然后卡牌翻轉(zhuǎn),打亂排序,點(diǎn)擊卡牌,然后抽獎(jiǎng)。
這個(gè)需求本身其實(shí)不難,主要是分為三步;
-
展示所有卡牌,然后翻轉(zhuǎn)。
-
打亂所有卡牌
-
點(diǎn)擊其中一張卡牌,抽獎(jiǎng)
第一步:卡牌翻轉(zhuǎn)
我們先在dom中渲染9個(gè)卡牌。
-
{{cardItem.front}} -
{{cardItem.back}}
script
-
allMove () {
-
// 110 是卡牌寬度加邊距
-
this.methods.shuffle.call(this, 110)
-
let timer = setTimeout(() => {
-
clearTimeout(timer)
-
this.methods.shuffle.call(this, 0)
-
this.$apply()
-
}, 1000)
-
},
-
// 洗牌
-
shuffle (translateUnit) {
-
let curCardData = this.cardData
-
curCardData.map((item, index) => {
-
let animation = wepy.createAnimation({
-
duration: 500,
-
timingFunction: 'ease'
-
})
-
animation.export()
-
switch (index) {
-
case 0:
-
animation.translate(translateUnit, translateUnit).step()
-
break
-
case 1:
-
animation.translate(0, translateUnit).step()
-
break
-
case 2:
-
animation.translate(-translateUnit, translateUnit).step()
-
break
-
case 3:
-
animation.translate(translateUnit, 0).step()
-
break
-
case 4:
-
animation.translate(0, 0).step()
-
break
-
case 5:
-
animation.translate(-translateUnit, 0).step()
-
break
-
case 6:
-
animation.translate(translateUnit, -translateUnit).step()
-
break
-
case 7:
-
animation.translate(0, -translateUnit).step()
-
break
-
case 8:
-
animation.translate(-translateUnit, -translateUnit).step()
-
break
-
}
-
item.animationData = animation.export()
-
})
-
this.cardData = curCardData
-
this.$apply()
-
},
算法后面需要優(yōu)化,我們先完成功能效果,
第三步:卡牌翻轉(zhuǎn)
dom代碼
-
{{cardItem.front}} -
{{cardItem.back}}
script代碼
-
data中定義一個(gè)curIndex = -1的對(duì)象
-
data = {
-
curOpen: -1,
-
}
-
methods = {
-
// 抽獎(jiǎng)
-
itemChage (item, curIndex) {
-
this.cardData[curIndex].front = 'iphone x'
-
console.log(item, curIndex)
-
this.curOpen = curIndex
-
}
-
}
less
-
.card.getprize{
-
.front{
-
z-index:2;
-
transform: rotateY(0deg);
-
}
-
.back{
-
z-index:1;
-
transform: rotateY(180deg);
-
}
-
}
現(xiàn)在我們就已經(jīng)完成了基本的需求;但是在位移動(dòng)畫時(shí)候代碼寫的太丑陋了。
我們來想想怎么優(yōu)化算法;
我們現(xiàn)在就九宮格布局,我們可以看成是二維布局
那我們是不是可以在卡牌中也使用二維數(shù)組布局屬性
-
resetData () {
-
const total = 9 // 總數(shù)
-
const lineTotal = 3 // 單行數(shù)
-
curCardData.map((item, index) => {
-
let curCardData = this.cardData
-
let x = index % lineTotal
-
let y = parseInt(index / lineTotal)
-
item.twoArry = {x, y}
-
})
-
}
在位移動(dòng)畫中使用二維布局的差值進(jìn)行位移
-
// 洗牌
-
shuffle (translateUnit) {
-
let curCardData = this.cardData
-
curCardData.map((item, index) => {
-
let animation = wepy.createAnimation({
-
duration: 500,
-
timingFunction: 'ease'
-
})
-
animation.export()
-
const translateUnitX = translateUnit * (1 - item.twoArry.x)
-
const translateUnitY = translateUnit * (1 - item.twoArry.y)
-
animation.translate(translateUnitX, translateUnitY).step()
-
item.animationData = animation.export()
-
})
-
this.cardData = curCardData
-
this.$apply()
-
},
這樣整個(gè)動(dòng)畫就算完成了,
第二部分:如何開通一個(gè)小商店