本节,我们开始进行两张扑克牌对战时的情景设计,当用户从底部选中一张扑克牌后,系统需要产生一张对手扑克牌,这样两张牌才能相互较量,接下来我们先实现如何引入敌对扑克牌。
在gamescenecomponent.vue中,我们先添加敌对扑克牌的定义,在标签template中,添加如下代码:
<div class="card opponent" :class="{'out' : cardOpponentOut, 'in': !cardOpponentOut}">
<div class="front face"></div>
<div class="back face">back</div></div>接着在script标签中添加相关变量的定义,以及控制敌对扑克牌的逻辑代码,首先添加几个变量定义:
<script>
import Constant from './constant'
export default {
data () { return {
....
selectedCardPower: 0, opponentCardPower: 100, cardOpponentOut: true
}
....
methods: {
....
cardAClick () { this.cardASelected = true
this.cardAFlipped = false
this.cardBOut = true
this.cardCOut = true
this.beginBattleAnimation()
},
cardBClick () { this.cardBSelected = true
this.cardBFlipped = false
this.cardAOut = true
this.cardCOut = true
this.beginBattleAnimation()
},
cardCClick () { this.cardCSelected = true
this.cardCFlipped = false
this.cardBOut = true
this.cardAOut = true
this.beginBattleAnimation()
},
randomizerPower () { return Math.round(Math.random() * 60) + 40
},
beginBattleAnimation () { this.cardOpponentOut = false
}
}
}
<script>selectedCardPower用来表示选中扑克牌的能量值,opponentCardPower用来表示敌对扑克牌的能量值,cardOpponentOut用来控制敌对扑克牌是否在页面上出现,它的值设置成false的话,它就会出现在页面上。
beginBattleAnimation被调用时,他把变量cardOpponentOut设置成false,这样敌对扑克牌就会出现在页面上,当用户选择任意一张扑克牌时,该函数就会调用,也就是说用户选中一张扑克牌后,程序立马将敌对扑克牌显示在页面上,与用户选择的扑克牌并排放在一起,上面代码完成后加载页面,进入游戏场景,点击选择一张扑克牌后,情形如下:
这里写图片描述
右边是用户选中的扑克牌,左边是用户选择后,程序将敌对扑克牌显示到页面上,敌对扑克牌的显示具有动态效果,具体请参看视频。
实现对战特效
当两张对手牌出现在页面中间后,扑克牌间的厮杀就开始了,玩家选择的牌先发送一个冲击波打击对手牌,接着对手牌也发生一个冲击波打击玩家选择的牌。我们先看看这两个冲击波是如何实现的。
首先在html代码部分增加冲击波的定义:
<div class="card opponent" :class="{'out' : cardOpponentOut, 'in': !cardOpponentOut, 'shake' :opponentCardShake}">
<div class="front face"></div>
<div class="back face">back</div></div>
<div class="blaze toward-left" :class="{'attack' : blazeAttackLeft}"></div><div class="blaze toward-right"></div>冲击波本质上是两个静态图片在页面上实现的动态效果:
这里写图片描述
代码中blazeAttackLeft是定义在组件中的变量,如果这个值是true,那么上面的div控件就会具备attack属性,一旦具备这个属性,div控件就可以实现css定义的动画效果。
利用最新的CSS3标准,我们可以实现很多动画特效,在style标签中,我们先添加以下代码:
<style scoped>@keyframes shake {
0% {transform: translate3d(0, 0, 0);}
20% {transform: translate3d(-5%, 0, 0);}
40% {transform: translate3d(5%, 0, 0);}
60% {transform: translate3d(-5%, 0, 0);}
80% {transform: translate3d(5%, 0, 0);}
100% {transofrm: translate3d(0, 0, 0);}
}.card.shake{animation: shake 300ms ease-out}</style>共同學習,寫下你的評論
評論加載中...
作者其他優質文章