52乘以9可以看做50减5我这样爱你对不对对

【数据】不为人所知的攻速,18级自带红X攻速,冰心甲、蓝盾减攻速测试(完结)
可用积分 点
游园积分 点
本帖最后由 wzwingz 于
15:47 编辑
一( d+ G; I# |$ b8 I4 L( |
最近看到有人讨论无尽红X和饮血红X,于是算了下,发现计算很麻烦,因为攻速这个东西。。。。人物升级会加攻速,于是自定义测试了下。。。发现了让人惊讶的发现。。。: ~) k8 K4 O" X4 \6 L, |
首先来看两张攻速图,默认天赋里面点了4%攻速,所以会有那个0.026%; b( O% h4 A3 @3 r/ ^5 V; K+ q6 o
; G. Z" G; l# h% _7 x6 M8 z5 a
这个其实很明显,人物角色攻速会有成长,相信很多人都知道,只是先给不知道的人提一下; s% C9 ?8 a# W# Y- E4 m
然后进入正题,再是2张图。。。。8 y6 X&&r0 D&&S, S& \# l
% m% N0 [- u+ ]- Y6 H1 K% s
发现什么?升级送的攻速不会受到装备加成有木有。。。。单是鞋子加上天赋是29%攻速,0.191/0.29=0.6586发现什么。。。。
这不就是1级的基础攻速么。。。。攻速装备加成是根据1级来算的啊。。。。$ f1 m$ {$ m, u9 ~3 [
也就是说,升级的同时送的攻速不会受到装备加成,那么,可以把升级送的攻速看为加攻速的装备属性来看& m- e. W) b) R3 v# }
肯定会有人说,这有什么用?好吧,可以继续看一组艾希等级与基础攻速的数据# [# q3 A. q% K. c
6 u3 W9 r0 c" e+ [, F+ t
好吧,仔细一看,是的,每级提升0.022攻速,按照装备来算就是3.34%攻速,满级能够达到56%,也就是说,由于不叠加,角色升级自带的攻速提升已经相当是一把红X的攻速,11级的时候攻速自身就提高了30%,加上鞋子就是50%多。。
那么,是不是颠覆了很多人所想的,一把红X提升了50%的攻速?其实红X还没占到攻速提升量的一半。。。( d' r2 V. ^* W4 A8 Y" _% a0 Q
8 g8 ~( A* K- L' [/ _
以艾希攻速鞋红X来算,13级和18级红X所占攻速比例(天赋均点了有4%攻速)1 {* `( [1 w5 m. M. @
# G7 U8 B5 e) x- b
& H8 m' J/ X+ }- l% n! h
红X提升攻速为0.658*0.55=0.3619&&
13级时,攻速总提升了0.816,那么占的比例就是44%,实际相比没有红X提升攻速是32.54%4 h&&Z( H' S# z$ k: q# j
18级时,攻速总提升了0.926,占比例只有39%,相比没有红X提升攻速是29.6%# C7 i" u: t) R* A/ w
其中攻速鞋也占了一部分攻速提升,如果不算攻速鞋,红X的提升比例也不会这么低,大概是39%和35%
18级以后由于人物攻速不再增长,继续堆攻速能增加装备攻速所占比例,但是实际还是根据1级攻速加成,相比18级的1.0左右的攻速提升大概是攻速百分比的2/3+ c0 g- V' `* h+ K4 Q7 `
攻速鞋可能不出,但是人物攻速是会成长的。。相比暴击之类的,人物没有暴击成长这些,相比400的暴击手套和420的攻速刀,加成算来是差不了多少的,攻速高一点
而且上两图可以看出同样的攻速装备下,升级以后装备部分攻速并未提升; V& u3 c6 @& p&&P+ t) m
$ u/ ]( ]8 y2 S3 k8 Y- @/ Z1 H
升级所给攻速基本上没被注意到。。。满级算来,角色其实已经自带了相当于装备上所写的50%攻速,并且是和其他攻速类装备效果一样不会互相加成( U) l+ g/ X&&s+ ^- E&&g
! T# E9 @& c/ U+ L
然后为了看是不是其他英雄也是一样,专门测试了小炮和好运姐
小炮攻速成长如下:
可见每个英雄的成长都不一样,艾希可能是由于没有主动攻速技能的平衡吧。。。其实LZ也是随便选的英雄,完了才发现这个。。。 # \9 R4 V5 H( }- D; v6 H+ R
PS:补充梦魇攻速成长,1级0.668,满级0.975,大概是45%攻速,可能是因为W被动有攻速而平衡。。其他无攻速类英雄未测试
那么又会来一个疑问,升级所给的攻速会不会受到技能加成?- M' t6 D7 _' u8 Z; j
这下选小炮测试,因为Q技能加速明显。。。先看1级和2级的时候1级Q的加成(30%攻速提高):( c# Q5 a( @' [! U+ ^
( O1 ?! T/ j0 r. H5 j# _
这说明升级所提升的攻速不会受到技能加成,仔细记录之后又有:
0 q% K! Z4 [&&I
这里可以看到,升级不会提高绿字部分也就是额外提高的攻速
(0.223-0.026)/0.656=30%
(0.42-0.026)/0.656=60%5 a9 _; q" ?/ B# D
&&w5 G$ ~' o1 W
那么有攻速装备的情况下也可9以继续测试(5级Q,90%攻速增加)( ^* Q# B4 ^& W5 k5 h&&r&&F! D
上图可以看到,5级Q提升90%攻速,开了Q以后实际攻速提升了1.142-0.551=0.591& & 而& &0.591/0.656=0.9
这里也可以看出,增加攻速的技能不会受到装备攻速加成,也不会受到升级增加的攻速加成
蛋疼补充,貌似英雄18级装备220%或者技能加起来有220%攻速就能达到2.5的攻速上限了哦
话说后边还有给力的测试哦,不一口气看完么亲~
---------------------------------------------分割线------------------------------------------------------------------------------
8 m2 [8 E. n$ V3 m4 J
既然装备和技能都不能提升升级所给的攻速,那么如果看作是装备一样给的攻速的话,会不会受到减攻速的影响呢由于木有基友帮忙测试,于是自定义了大虫子,因为他会出冰心甲。。。。直接2张图说明&&R" V9 _8 @% g# S, ?9 g6 O; P( F! k3 W&&N
$ q7 X, v8 |, D9 ~
# Q1 K& U' [& N$ ^3 |$ {
1 j- T7 m" `/ S+ _1 z. y% t
可以看到,绿字部分被减少了一半多,而冰心的光环是减少20%攻速总共减少了0.317的攻速,乘以5的话就是1.585,也就是直接减少了总攻速的20%,而不是单件装备上所能看到的那个百分之<font color="#%。。。。是的,冰心直接减你总攻速。。。。是不是没感觉?也就是攻速越高,减得越多,在红X攻速鞋的情况下,减少了0.317/0.658*100%=48%的装备说明量的攻速。
而正常情况下,18级爱射裸鞋子也是1.22的攻速。。。也就是攻速鞋+红X的组合,冰心甲基本减完了红X部分的攻速
。。如果攻速更高,被减的部分更多,满攻速2.5上限的攻速会被减成2.0, 而0.5/0.65=0.76,满攻速会被减掉大概76%的装备说明数字的攻速。。。。
补充:其实就是总体攻速的20%,1级基础攻速减20%,成长减20%,装备部分也是20%,总的多了加起来就会比较多/ h7 c: D/ h/ h) d
关于冰心甲的光环,大概就是爱射的射程600码。。。。难怪chaox也说这玩意儿逆天了,无CD减速,群体范围光环减速。。。。。
补充测试:( u# ~" p+ K0 a9 A; L
①梦魇W被动,跟小炮的Q测试结果相同
②好运姐W主动,与小炮Q测试相同,同时额外测试了裸攻速鞋被冰心减速的情况
9 j&&n* m/ l- w
% ?7 O6 ]&&M% I2 O7 i3 y
可以看到,被冰心减攻速以后鞋子的效果被减掉不说连升级所给的部分都被削减了
由此可见,就算身上无攻速装,由于升级提高的攻速存在,也会被减攻速& i( w# H+ A! J" n! T0 H&&W+ o
至于会不会被减到1级攻速以下就不知道了,拿个1级的角色去冰甲对手旁边估计可以知晓。。。
PS:好运姐5级W技能加速测试,结果,技能跟梦魇被动一样,照样是总攻速减少<font color="#%
7 E5 {# h0 l&&P! {2 K
题外话:其他蓝盾,石头人的减攻速未测试,因为冰心比较方便。。。其实测试很累,特别是遗漏了某些想法之类的又要重新出装和补刀打钱练级,还MB要等虫子出冰甲。。。/ A% B* r/ O0 M1 ^
时间有点仓促,有感而测,不带有任何英雄和装备歧视,拒绝被黑。。。遗漏和错误的地方希望指正,转帖也请注明(其实我觉得初中数学的水平的帖子毫无技术可言啊),都是截图来算的,一看居然截了57张。。。$ b- M1 G- ?2 i/ G
-------------------------------------------分割线-------------------------------------------------------------------------------
三# ]% Q9 [3 J) w) x&&n&&s8 ^" n" o* N&&s
再次更新部分,关于兰顿与石头人的E8 c# F' j7 [, c3 i& }
由于兰顿和石头人的E都能减攻速,于是做了以下测试
包括内容为,兰顿主动效果和被动效果以及石头人E,冰心几者之间的关系,还有冰心的生效范围7 ]1 D8 V0 t- b8 N3 X
测试对象为自定义剑圣以及部分野怪
$ {7 M% y5 W8 z9 m, u9 P: m
1 L&&l" Z2 ^) n! [8 z
①:由于野怪测试起来比较简单,于是先找了BUFF怪进行了兰顿的测试
当触发兰顿被动时& H% |, W% @( ^5 [- U2 b7 N
2 Y/ I# V$ t2 v) o
可以看到,攻速减少,并且被动是2个debuff,一个减移动,一个减攻速,小刀那个是减攻速那么减少量就可以算出是减少了35%符合装备说明然后对野怪测试主动效果由于不小心测漏的问题,于是只有换了个红BUFF怪
2 e3 r$ C# L% [
$ ^: p3 a, b' W( o( w
这里可以看到,主动效果是蓝盾图标为减攻速,减移动依然为被动的图标减少量也是35%左右 8 a' ?, [5 I# k% l6 o, }5 B$ v
那么可以看做主动与被动相同?答案是NO!是的,主动与被动是不同的,是的,是不同的
% t/ ]6 ]5 [- G4 T9 h
接下来以剑圣为测试对象就可以看到. \7 j. ~3 ~$ B) o1 {4 p4 t' ]&&^' c" C
( O; [* n" [1 w0 Z2 C+ H
# d2 H&&E& ~; e+ G( _" W
7 J( J, |. n" }4 p0 G% p& \
上边3个图分别为剑圣全状态,被动效果,主动效果时候的属性(第一个图并没有被减攻速,是因为我有红BUFF去打了他,2个DEBUFF是掉血和减移动速度)可以看到,主动效果减少攻速是35%,被动效果减少0.23才减少了13%攻速。。。。那么为什么不一样呢,被动效果为什么对野怪和英雄差别这么大仔细一看就会发现,<font color="#.23的攻速就是1级基础攻速的35%,那么可以看到被动效果是减少35%的基础攻速来算,是的,跟红X一样是根据基础攻速来加成。。。。至于野怪嘛,只能说,野怪的基础攻击可能是1.0 不过为了严谨,再次进行了更多的测试
$ P$ \+ h/ h' q8 S0 g2 p
+ V; x4 x& d+ R* g, [
依然是无效果,被动,主动,可以看到,被动效果固定是减少<font color="#ff*35%=0.2345主动效果是减少当前攻速的35%那么可以断定,除了<font color="#级时候人物无任何攻速加成的情况下,被动效果永远不如主动效果
上两图可以看出,被动和主动效果是可以同时存在的,不会存在某个被覆盖情况也可以看出,主动效果始终是减少当前攻速的35%至于先后计算方式,个人估计是跟穿甲和减护甲一样是优先计算固定部分,也就是根据基础加成的攻速部分,不然在众多百分比减攻速的情况下然后再算根据固定减少攻速会有把攻速减为负数的可能。因为剑圣只要被减速就会跑掉,屡次尝试无法实现先出主动再出被动效果双DEBUFF同时的情况也测试了野怪9 h. ~2 u" V$ |) x% W3 H' g) F6 ?
6 \+ Z# C: I2 S2 I( P
) G/ J; b0 Y+ M. i
甚至测试了男爵4 f! H* e! F, \4 }, Q9 O6 t
- [6 r: j9 H: P/ D9 p, |
可以看出,对男爵无效,虽然debuff是弄上去了
期间LZ又发现蓝盾被动是和合成的小件的说明效果是一样的,于是又测试了小件& E( K: |- t) K5 Y; x" p) u
小件的被动效果与蓝盾被动相同) F. F" U/ v$ d+ p" W- J/ K
3 @$ z, a2 \7 n, T/ w
接下来,就是石头人的E2 a) I7 g- E+ a$ U&&T
9 y4 ~5 A8 Q, C&&g$ l& N' S
石头人1级的E减少30%攻速1级的剑圣直接被减到基础攻速以下,不过通过野怪也可以看出,野怪也是默认当前攻速少于基础攻速的然后不去管他,大家都默默的成长
" r+ q&&I6 J# _9 g( [( ^6 O
然后我再次准备对他拍照的时候就是这个属性了然后他直接3级大招向我奔来,看到那攻速,当时我就吓尿了% I. e' h4 M3 {- ~& l3 G
攻速2.38看起来很吓人的样子,怎么办?我扭头就跑----过去就是一个5级的E加上蓝盾主动效果
" \3 `+ O( [2 G4 F
0 L2 F' \( Q' w8 D4 t9 w* Q5 K3 @
是的,减成了这个样子。。。可以看出,2个减少当前攻速的效果算来就是2.38*0.65*0.5=0.77 , t6 a7 M! N2 r8 k9 e: s
接下来,蓝盾以后继续出个冰心测试关于冰心的范围,可以见下2图
6 I7 y8 w3 w. x
6 q3 @2 W' W$ ^3 [; m
上两图为石头人大招参考,可以看出冰心的范围稍微比石头人大招大一些$ y3 k0 _8 M- J$ w$ y' H
% l, z6 [; N+ {% Q
对于冰心与蓝盾的加成方式,大家继续看两张图$ J! |7 X5 E1 n# b3 A
# h5 a5 U% W- x" |
8 Q& \3 ?! s4 a8 |+ O6 ]1 T$ M
冰心+蓝盾被动减少了0.55的攻速仔细计算下,1.83*0.8-0.234=1.23(1.83-0.234)*0.8=1.276
可以看出,蓝盾的被动效果由于是固定减攻速,是优先计算的,原因见前边主动与被动叠加的情况
之前个人猜测是冰心减少了剑圣的基础攻速使得蓝盾的被动减速效果减少,, s8 L% m* a8 x8 D6 }
1.83*0.8-0.234*0.8=(1.83-0.234)*0.8=1.276,实际看来其实是一个计算公式2 M- Y1 K$ ~6 h' Q6 J
再次证明固定与比例减速先后顺序是先固定减固定部分,或者说是减总攻速的效果减少了基础攻速也是一个道理
最后上一张冰心与蓝盾双效果的图2 {# Y: V- f6 B1 L
以上部分的总结在结论3里面
总结论:9 Q& [/ C( S# h1 z* Y% u
---------------------------------------------------------------------------------------------------------------------------------------------------------------
①:各种加攻速的技能和装备,如小炮的Q,好运姐W梦魇W被动,还有红X攻速鞋,天赋4%攻速,都是按照1级英雄的基础攻速来加成的。
人物升级到18级大概都是1.0的攻速,所以装备上的攻速提升按照1级的0.65来算的话,满级后效果只有2/3。。。这也就是同样价格的420G的攻速刀15攻速而暴击手套8%(无尽特效能加成),同样的价格最后的效果基本上差不多
角色升级大概也会相当于1级提升3%,并且升级提升部分不会与装备技能叠加,可以看做是一件隐藏的升级装备或者一个被动技能,每级提升3%攻速,18级提升50%左右(好吧,梦魇只有45%,可能波动跟本身有技能攻速加成有关,未测试其他无技能攻速加成英雄),18级攻速鞋红X大概其实有120%多的攻速。# Z: O% X/ q4 a) m
3 F5 F" [, M+ {) E
不是贬低攻速装,也不是说攻速装不值价,是被很多人高估了效果,攻速装实际并没有达到装备所说的提升,因为人物本身攻速会增加使得攻速装伤害提升比重变低,而不是像暴击一类是固定百分比提升。。。18级的情况下攻速鞋+红X,红X提供的攻速大概占总攻速提高量的40%-50%,等级高些比例就会低些。
技能攻速提升实际也没有那么多,18级小炮无装备的话,1.0左右的攻速,5级Q提高90%攻速实际也就0.6左右,而不是提高到1.9这种,都是因为攻速加成是根据1级攻速来计算的
2 J' l1 P' t2 R: @6 O0 Z0 ]% {
但是人物的成长攻速是固定的没法提升,攻速装的效果还是显而易见的,平衡下来基本上攻速和暴击详相当,毕竟攻击力-攻速-暴击这三个是互相加成的。。攻速不是真的像说明那样是给你加了多少攻速就是百分之几十伤害,也不是2个红X就能比无红X多砍一刀。。。
当然,1级的时候所有攻速提升百分比是符合的,但是等级高了以后就不会实际提高那么高的百分比了
7 |! X: G" v( ?8 T( J
说了一大篇,其实就是人物升级会加攻速,18级攻速会贬值到和暴击相当的水平,暴击有无尽特效和爆发应该在18级更占优势些,18级之前攻速比暴击大些% k* F- m: j% W' j$ X- l
②:冰心很IMba,光环持续减速,18级人物有攻速鞋和红X的情况下,连同升级所给的攻速一起被减20%,由于攻速组成和减攻速不同,减攻速效果连同成长攻速一起计算进去会减得比较多。。。攻速鞋红X的情况下会被减掉相当于48%的装备说明的攻速(18级艾希),基本上快减掉红X的攻速了,而不是你有冰心我有红X减下来我红X还剩35%。
开了技能或者BUFF之类的BUFF提高也会被减少,攻速越高,被减速得越多,但是总体是被减少了20%,堆攻速基本无法与减攻速抗衡,只要是平A就是被减少了20%伤害。& q2 m' I& u2 B0 r. z. s
同样的资金投入看起来攻速数字百分比比较大,但是收益并不会那么高,按照400的8%暴击手套和420的15%攻速刀的价格属性对照来看的话感觉攻速给力些,攻速刀大概18级果体艾希提高了9.5%攻速,价格贵20,总体差别不大,继续堆攻速和暴击都是固定“被减伤”。冰甲蓝盾各种受欢迎也不是没有道理,反伤甲之类的只能减少自己的伤害,冰甲能减所有人的攻击速度。。。。而且曾经是某个光头的必出大件之一,一身防装打出超高伤害,觉得打不动可能是因为被减速了。。。。
! s8 `* y+ j9 S6 U0 a
③:结论:蓝盾主动效果与被动有差别,主动的减少攻速跟石头人E、冰心一样是减少当前攻速,被动效果的减攻速是与红X等攻速装一样按照1级基础攻速加成,算来是0.234的面板,主动与被动可以共存,减少攻速部分不会覆盖,但是移动部分只能存在1个减移动速度,被动效果的持续时间比较长,减移动速度防风筝意义大些蓝盾的被动效果由于是减少固定攻速,实际与石头人的E、冰心、蓝盾主动等减攻速效果并存的时候会优先计算,然后再算减少总攻速的部分
个人意见:蓝盾和冰心的差别其实在于蓝盾主动需要靠近对面,需要有突进能力,被动减速又需要承受伤害,一般为肉或者半肉出,并且坦克类英雄的高护甲对于蓝盾主动效果有加成。冰心由于范围比较大,不加HP但是加很多MP,而且有减CD,那么其他位置比如辅助之类的出冰心也不会跟坦克类英雄出冰心效果有多大差别,也就是说,冰心适应的位置多些,但是不加HP其实不是那么的肉。。。PS:LZ又想到了当年2个硬又黑的角色,光头和蝎子。。。。. m8 T. p) E. j6 T( ^9 i8 U$ n
1 {+ m" j: F2 [& ^
至于更多英雄的技能和装备之类的,暂时未有测试和测试的念头1 k" s1 u* y0 G% ?
' a( l* I' {; \, D3 b7 ]+ y* G
---------------------------------------------------------------------------------------------------------------------------------------------------------3 w5 j! O3 I: \: c
PS :对于觉得我写了一大堆结果没说什么东西,我也没办法,本来就是探索发现类。。。而且补补改改所以比较乱+ E2 H7 Y/ ~; B: I$ c% ]
其实有了最开始的攻速部分才会有蓝盾被动加成方式的解释的。。。。. {0 A5 {# m- V; |
然后,完了,基本没什么可说的了,由于LOL本身没有伤害浮动,以及本文所探讨的攻速,使得人物的普通攻击伤害可以实际计算出,有空我可能会计算各个时期无尽饮血红X灯笼轻语等常见出装组合在相同价格下各个阶段的大概伤害- Z$ x% j" V) D# Q$ _6 X
装备DPS的计算
4 o&&S* b9 Z& N2 Z
欢迎转载,请注明COLG就行了
可用积分 +151
我只知道,石头人 狗头的减速恨OP。
冰心按照总攻速减20%.
比较在意 石头人 狗头。。adc克星。。
这帖子真心不错。我要推到微博啥的给小伙伴们看看:
这人还没添加签名啦。别再看她啦
可用积分 点
游园积分 点
技术贴帮顶- `" |$ K* b) a, G9 L8 [: _
虽然我没看完
这人还没添加签名啦。别再看她啦
可用积分 点
游园积分 点
就冲你写了那么多 帮顶下
这人还没添加签名啦。别再看她啦
可用积分 点
游园积分 点
虽& &但& &厉
这人还没添加签名啦。别再看她啦
可用积分 点
游园积分 点
头像被屏蔽
本帖最后由 Aoyama 于
16:01 编辑 , u" U+ N( B0 h9 E2 j+ S& c&&W
6 D3 t" O) d" a1 n* s3 o
- -技术贴留名
这人还没添加签名啦。别再看她啦
可用积分 点
游园积分 点
LOL板块好久没有技术帖了,看不懂也支持下。
这人还没添加签名啦。别再看她啦
可用积分 点
游园积分 点
LOL板块好久没有技术帖了,看不懂也支持下。
这人还没添加签名啦。别再看她啦
可用积分 点
游园积分 点
支持技术贴!~希望有这样的更多的帖子,有益点
这人还没添加签名啦。别再看她啦
可用积分 点
游园积分 点
兰盾是第一物防装 这很早之前国外论坛就有过研究了
这人还没添加签名啦。别再看她啦
可用积分 点
游园积分 点
LZ好厉害。。。。
这人还没添加签名啦。别再看她啦
Powered by搞笑3乘以5好难国语版/3乘以5/5乘以3表示什么继后会无期后超5亿票房杨幂主演的《小时代3》超搞笑拍摄花絮
行尸走肉(欢欢搞笑)第3期高清视频混剪
行尸走肉第5季 行尸走肉第5季全集
最新国外整人搞笑短片 邪恶雪人系列恶搞录像第3季第5集
3D搞笑动画短片《猴扑团》1个肉包招惹来的5指山...
轻松时刻!开心每一秒,时时更新!
3乘以5真的太难了急哭小萝莉教育反思,难吗,不难。但要怎么教?急于求成吗?显然不能
花花你不懂爱-华晨宇-5进3白色秋天差评原因分析-搞笑
搞笑视频 Apple iPhone 5 VS 三星 Galaxy S3
哪个更好?搅拌机决定!
2014年5月第3周搞笑失误傻缺蛋疼囧人囧事集锦
“小萝莉”背乘法口诀急哭
大呼:3乘以5太难了 高清
2014年5月第3周失误搞笑合辑
搞笑 > 奇闻趣事5月档 大象把3吨重河马当球踢
【夜风解说】英雄无敌3新版本1V5露娜首次登场燃爆搞笑灵异之火篇
"搞笑3乘以5好难" 详细介绍5 乘以3 ,两种翻译表达都对吗?五乘以三等于十五。
Five multiplied by three is fifteen.
Five times three is fifteen.
1 如果正确,第一句,是不是 five 后面 看做省略了,multiplied 怎么理解?被动语态? 过去分词。表被动?
is 能换成 equls 吗?谢谢了
两个句子改成 疑问句, 都是用 what is 吗?写一下
如果前面两句 改成 equls
请写出,疑问句 形式,该用 does 提问了么?
谢谢了。1 两句都正确,第一句, five 后面 是过去分词短语作定语 ,multiplied是过去分词 理解成 被3乘的5 是 15 过去分词作定语 与所修饰的词是被动关系 第二句 5倍的3 是15 2 i12乘以10/3乘以5/4等于多少,要简算,要过程。先10/3乘5/4~得50/12然后再乘12.答案五十好难啊,求解(7x-1)/5 -3 ≤2x-5 两边同乘以5,得 (7x-1)-15≤10x-25 移项,得 -3x≤-9 解得x≥32/3乘以[(3/4减1/6)除以1/5]2/3乘以[(3/4减1/6)除以1/5] =2/3×(7/12×5) =2/3×7/12×5 =35/18 如有不明白,可以追问 如有帮助,记得采纳,谢谢 祝学习进步!分数简算 要过程 3/4乘以16= 12除以3/5= 0.3乘以5/6= 1除以7/8=5/7乘以2/3除以5/7
1/2乘以1/3除以1/2乘以1/3
0乘以7/12+1/8
48乘以(7/12+1/3)除以2/3
23-8/9乘以3/4除以1/27
5除以[(2/3+1/5)乘以1/13]3/4乘以16 =3×4 =12; 12除以3/5 =12×5/3; =4×5 =20; 0.3乘以5/6 =0.05×5 =0.25; 1除以7/8 =1×8/7 =8/7; 5/7乘以2/3除以乘以5/3+141又4/3乘以7/4+181又5/4乘以9/5=?您好: 101又3/2乘以5/3+141又4/3乘以7/4+181又5/4乘以9/5 =(100+3/5)x5/3+(140+4/7)x7/4+(180+5/9)x9/5 =60+1+80+1+1005分之3乘以3分之2等于多少?怎么个乘法?最好是列出公式.
那除呢,又是怎么除?(3/5)*(2/3) =(3*2)/(5*3) =2/5 (3/5)/(2/3) (3/5)*(3/2) =(3*3)/(5*2) =9/101/1乘以2乘以3+1/2乘以3乘以4+1/3乘以4乘以5…+1/20乘以21乘以22的最简便的计.1/1乘以2乘以3+1/2乘以3乘以4+1/3乘以4乘以5…+1/20乘以21乘以22的最简便的计算方法这道题是数列求和问题 an=1/[n(n+1)(n+2)]=1/2 * [1/n(n+1) -1/(n+1)(n+2) ] 就是裂项相消法 你要求的 原式=1/2 *{ [1/(1*2)-1/(2*35/11乘以3/4大于多少分之五5&#47;11乘以3&#47;4大于多少分之五 5/11乘以3/4大于多少分之五
11:14 匿名
来自手机知道
分类:数学 我有更好的答案 3.4乘以5/171该系列其他文章
Quick-cocos2d-x-3.2中示例Coinfilp解析(五)
一、最后的前言依旧使用久方法:顺藤摸瓜,一点一点发现,打开ChooseLevelScene.lua吧local&AdBar&=&import(&..views.AdBar&)
local&LevelsList&=&import(&..views.LevelsList&)
local&ChooseLevelScene&=&class(&ChooseLevelScene&,&function()
&&&&return&display.newScene(&ChooseLevelScene&)
function&ChooseLevelScene:ctor()
&&&&--&背景
&&&&local&bg&=&display.newSprite(&#OtherSceneBg.png&)
&&&&--&make&background&sprite&always&align&top&用于对齐顶部
&&&&bg:setPosition(display.cx,&display.top&-&bg:getContentSize().height&/&2)
&&&&self:addChild(bg)
&&&&--&标题
&&&&local&title&=&display.newSprite(&#Title.png&,&display.cx,&display.top&-&100)
&&&&self:addChild(title)
&&&&--&信息条
&&&&local&adBar&=&AdBar.new()
&&&&self:addChild(adBar)
&&&&--&create&levels&list&创建等级列表
&&&&local&rect&=&cc.rect(display.left,&display.bottom&+&180,&display.width,&display.height&-&280)
&&&&self.levelsList&=&LevelsList.new(rect)
&&&&self.levelsList:addEventListener(&onTapLevelIcon&,&handler(self,&self.onTapLevelIcon))
&&&&self:addChild(self.levelsList)
&&&&--&后退按钮
&&&&cc.ui.UIPushButton.new({normal&=&&#BackButton.png&,&pressed&=&&#BackButtonSelected.png&})
&&&&&&&&:align(display.CENTER,&display.right&-&100,&display.bottom&+&120)
&&&&&&&&:onButtonClicked(function()
&&&&&&&&&&&&app:enterMenuScene()
&&&&&&&&end)
&&&&&&&&:addTo(self)
function&ChooseLevelScene:onTapLevelIcon(event)
&&&&audio.playSound(GAME_SFX.tapButton)
&&&&app:playLevel(event.levelIndex)
function&ChooseLevelScene:onEnter()
&&&&self.levelsList:setTouchEnabled(true)
return&ChooseLevelScene不难,唯一需要继续深入的就是这段代码:--&create&levels&list&创建等级列表
&&&&local&rect&=&cc.rect(display.left,&display.bottom&+&180,&display.width,&display.height&-&280)
&&&&self.levelsList&=&LevelsList.new(rect)
&&&&self.levelsList:addEventListener(&onTapLevelIcon&,&handler(self,&self.onTapLevelIcon))
self:addChild(self.levelsList)其实,想要顺着代码往看下,我们将会把要这个游戏剩下的五个脚本关联起来:LevelsList.lua
LevelsListCell.lua
PageControl.lua
ScrollView.lua
ScrollViewCell.lua只要明白了这五个脚本,就懂得了该游戏的关卡选择场景是如何建立的,进而整个游戏也就完整了解了一遍。先让大家了解下我对这最后的五个脚本理解的关系:LevelsList继承自→PageControl继承自→ScrollViewLevelsListCell继承自→ScrollViewCellLevelsList在内部使用了LevelsListCell让我们先从简单的讲起,就是cell(单元),先明白,该游戏运用时,一个页面就是一个cell(单元),如下图:包含了1到16有一个看不见的矩形,它就一个cell(单元),你向左滑动一下就会进入下一个cell(单元):17到32二、cell(单元)&从ScrollViewCell.lua开始:local&ScrollViewCell&=&class(&ScrollViewCell&,&function(contentSize)
&&&&local&node&=&display.newNode()&--&该类基础只是一个节点
&&&&if&contentSize&then&node:setContentSize(contentSize)&end&&&&--&根据传入参入确立该节点的ContentSize
&&&&node:setNodeEventEnabled(true)&&--设置该节点可以&为特定事件设置处理函数
&&&&cc(node):addComponent(&components.behavior.EventProtocol&):exportMethods()
&&&&return&node
function&ScrollViewCell:onTouch(event,&x,&y)
function&ScrollViewCell:onTap(x,&y)
--&退出时调用
function&ScrollViewCell:onExit()
&&&&--移除所用的事件响应事件
&&&&self:removeAllEventListeners()
return&ScrollViewCellScrollViewCell.lua并不复杂,因为它只是作为一个“骨架”存在,很多功能并没有实现,所以需要我们再去扩展,所以有了LevelsListCell.lua,一定有人觉得为什么不直接写一个LevelsListCell.lua就够了呢?反正我们就扩展一个类而已,干嘛要“骨架”呢? &这我回答不好,只能说这样编程遵循了良好的设计模式,对以后程序的改良有很大的好处。回到正题,进入LevelsListCell.lua:local&ScrollViewCell&=&import(&..ui.ScrollViewCell&)
--&继承自ScrollViewCell
local&LevelsListCell&=&class(&LevelsListCell&,&ScrollViewCell)
function&LevelsListCell:ctor(size,&beginLevelIndex,&endLevelIndex,&rows,&cols)
&&&&local&rowHeight&=&math.floor((display.height&-&340)&/&rows)&&&--&每行的高度
&&&&local&colWidth&=&math.floor(display.width&*&0.9&/&cols)&&&&&&&--&每列的宽度
&&&&--&使用了批量渲染对象,在Board.lua也用过
&&&&local&batch&=&display.newBatchNode(GAME_TEXTURE_IMAGE_FILENAME)
&&&&self:addChild(batch)
&&&&self.pageIndex&=&pageIndex
&&&&--&button集合
&&&&self.buttons&=&{}
&&&&--&第一个将要加入的button的X,Y坐标
&&&&local&startX&=&(display.width&-&colWidth&*&(cols&-&1))&/&2
&&&&local&y&=&display.top&-&220
&&&&--&捕获传入参数beginLevelIndex
&&&&local&levelIndex&=&beginLevelIndex
&&&&--&添加button,每个cell(单元)是16个按钮哦
&&&&for&row&=&1,&rows&do
&&&&&&&&local&x&=&startX
&&&&&&&&for&column&=&1,&cols&do
&&&&&&&&&&&&--&button的一系列处理
&&&&&&&&&&&&local&icon&=&display.newSprite(&#LockedLevelIcon.png&,&x,&y)
&&&&&&&&&&&&batch:addChild(icon)
&&&&&&&&&&&&icon.levelIndex&=&levelIndex
&&&&&&&&&&&&self.buttons[#self.buttons&+&1]&=&icon&
&&&&&&&&&&&&&
&&&&&&&&&&&&--&等级标签
&&&&&&&&&&&&local&label&=&cc.ui.UILabel.new({
&&&&&&&&&&&&&&&&UILabelType&=&1,
&&&&&&&&&&&&&&&&text&&=&tostring(levelIndex),
&&&&&&&&&&&&&&&&font&&=&&UIFont.fnt&
&&&&&&&&&&&&})
&&&&&&&&&&&&:align(cc.ui.TEXT_ALIGN_CENTER,&x,&y&-&4)
&&&&&&&&&&&&self:addChild(label)
&&&&&&&&&&&&&
&&&&&&&&&&&&--&处理完一个button后,重置数据,为添加下一个button做准备&&&&&&&&&&&
&&&&&&&&&&&&x&=&x&+&colWidth
&&&&&&&&&&&&levelIndex&=&levelIndex&+&1
&&&&&&&&&&&&if&levelIndex&&&endLevelIndex&then&break&end
&&&&&&&&end
&&&&&&&&y&=&y&-&rowHeight
&&&&&&&&if&levelIndex&&&endLevelIndex&then&break&end
&&&&--&add&highlight&level&icon
&&&&self.highlightButton&=&display.newSprite(&#HighlightLevelIcon.png&)
&&&&self.highlightButton:setVisible(false)
&&&&self:addChild(self.highlightButton,100)
--&触摸响应函数
function&LevelsListCell:onTouch(event,&x,&y)
&&&&if&event&==&&began&&then
&&&&&&&&local&button&=&self:checkButton(x,&y)
&&&&&&&&if&button&then
&&&&&&&&&&&&self.highlightButton:setVisible(true)
&&&&&&&&&&&&self.highlightButton:setPosition(button:getPosition())
&&&&&&&&end
&&&&elseif&event&~=&&moved&&then
&&&&&&&&self.highlightButton:setVisible(false)
--&触摸敲中button的响应函数
function&LevelsListCell:onTap(x,&y)
&&&&local&button&=&self:checkButton(x,&y)
&&&&if&button&then
&&&&&&&&self:dispatchEvent({name&=&&onTapLevelIcon&,&levelIndex&=&button.levelIndex})
--&获取传入参数X,Y坐标所对应的button
function&LevelsListCell:checkButton(x,&y)
&&&&local&pos&=&cc.p(x,&y)
&&&&--&遍历所有的button
&&&&for&i&=&1,&#self.buttons&do
&&&&&&&&local&button&=&self.buttons&i&
&&&&&&&&--&如果传入的点在该button的方位内,则返回该button
&&&&&&&&if&cc.rectContainsPoint(button:getBoundingBox(),&pos)&then
&&&&&&&&&&&&return&button
&&&&&&&&end
&&&&return&nil
return&LevelsListCell扩展后的Cell,在ctor中对Cell的视觉界面进行了排版和布局,同时还有两个响应函数:onTouch(event, x, y)和onTap(x, y);这里我要特别解释一句代码: self:dispatchEvent({name = &onTapLevelIcon&, levelIndex = button.levelIndex}) 意思就委派一个Event,其中name属性是必须,作为事件的名字,但要触发该事件时就需要用到,而其他属性可以任意。这句代码结束后就相当LevelsListCell 这个类有了一个Event,可以看做一个表event={{name = &onTapLevelIcon&, levelIndex = button.levelIndex}}三、滚动控件ScrollView.lualocal&ScrollView&=&class(&ScrollView&,&
--&创建一个控件基础的节点
function(rect)
&&&&if&not&rect&then&rect&=&cc.rect(0,&0,&0,&0)&end
&&&&local&node&=&display.newClippingRegionNode(rect)&&--&剪裁区域的节点
&&&&node:setNodeEventEnabled(true)
&&&&cc(node):addComponent(&components.behavior.EventProtocol&):exportMethods()
&&&&return&node
ScrollView.DIRECTION_VERTICAL&&&=&1&&&&--&垂直方向
ScrollView.DIRECTION_HORIZONTAL&=&2&&&&--&水平方向
--&参数:区域,拖动方向
function&ScrollView:ctor(rect,&direction)
&&&&assert(direction&==&ScrollView.DIRECTION_VERTICAL&or&direction&==&ScrollView.DIRECTION_HORIZONTAL,
&&&&&&&&&&&&ScrollView:ctor()&-&invalid&direction&)
&&&&self.dragThreshold&=&40&&&&&&&&&&&&&&&&&--&拖动最小临界值
&&&&self.bouncThreshold&=&140&&&&&&&&&&&&&&&--&拖动到能翻页的最小临界值&&&
&&&&self.defaultAnimateTime&=&0.4&&&&&&&&&&&--&默认动画时间
&&&&self.defaultAnimateEasing&=&&backOut&&&&--&默认的ease
&&&&self.direction&=&direction&&&&--&滚动方向
&&&&self.touchRect&=&rect&&&&&&&&&--&触摸矩形
&&&&self.offsetX&=&0&&&&&&&&&&&&&&--&X轴偏移量
&&&&self.offsetY&=&0&&&&&&&&&&&&&&--&Y轴偏移量
&&&&self.cells&=&{}&&&&&&&&&&&&&&&--&单元集合
&&&&self.currentIndex&=&0&&&&&&&&&--&当前索引(对应self.cells)
&&&&--&为self的节点事件cc.NODE_EVENT&设置处理函数(返回一个id表示注册成功)
&&&&self:addNodeEventListener(cc.NODE_EVENT,&function(event)
&&&&&&&&if&event.name&==&&enter&&then
&&&&&&&&&&&&self:onEnter()
&&&&&&&&elseif&event.name&==&&exit&&then
&&&&&&&&&&&&self:onExit()
&&&&&&&&end
&&&&--&create&container&layer&&创建一个容器层
&&&&self.view&=&display.newLayer()
&&&&self:addChild(self.view)&&&
&&&&--&为self.view的触摸事件cc.NODE_TOUCH_EVENT&设置处理函数
&&&&self.view:addNodeEventListener(cc.NODE_TOUCH_EVENT,&function(event)
&&&&&&&&return&self:onTouch(event.name,&event.x,&event.y)
----&一些简单的对外接口函数
--&得到当前索引所指向的单元
function&ScrollView:getCurrentCell()
&&&&if&self.currentIndex&&&0&then
&&&&&&&&return&self.cells[self.currentIndex]
&&&&&&&&return&nil
--&得到当前索引
function&ScrollView:getCurrentIndex()
&&&&return&self.currentIndex
--&设置当前索引
function&ScrollView:setCurrentIndex(index)
&&&&self:scrollToCell(index)
--&添加单元
function&ScrollView:addCell(cell)
&&&&self.view:addChild(cell)
&&&&self.cells[#self.cells&+&1]&=&cell
&&&&self:reorderAllCells()
&&&&self:dispatchEvent({name&=&&addCell&,&count&=&#self.cells})
--&根据索引插入一个单元
function&ScrollView:insertCellAtIndex(cell,&index)
&&&&self.view:addChild(cell)
&&&&table.insert(self.cells,&index,&cell)
&&&&self:reorderAllCells()
&&&&self:dispatchEvent({name&=&&insertCellAtIndex&,&index&=&index,&count&=&#self.cells})
--&根据索引移除一个单元
function&ScrollView:removeCellAtIndex(index)
&&&&local&cell&=&self.cells[index]
&&&&cell:removeSelf()
&&&&table.remove(self.cells,&index)
&&&&self:reorderAllCells()
&&&&self:dispatchEvent({name&=&&removeCellAtIndex&,&index&=&index,&count&=&#self.cells})
--&得到容器层
function&ScrollView:getView()
&&&&return&self.view
--&得到可触摸矩形
function&ScrollView:getTouchRect()
&&&&return&self.touchRect
--&设置可触摸矩形
function&ScrollView:setTouchRect(rect)
&&&&self.touchRect&=&rect
&&&&self:dispatchEvent({name&=&&setTouchRect&,&rect&=&rect})
--&得到剪裁后的矩形
function&ScrollView:getClippingRect()
&&&&return&self:getClippingRegion()
--&设置剪裁后的矩形
function&ScrollView:setClippingRect(rect)
&&&&self:setClippingRegion(rect)
&&&&--&委派事件&,名字:setClippingRect
&&&&self:dispatchEvent({name&=&&setClippingRect&,&rect&=&rect})
--&滚动cell(单元)&&传入参数,index当前页码,&后面三个为跳转Cell时执行动作的参数
function&ScrollView:scrollToCell(index,&animated,&time,&easing)
&&&&--&cell(单元)总数
&&&&local&count&=&#self.cells
&&&&if&count&&&1&then
&&&&&&&&self.currentIndex&=&0
&&&&&&&&return
&&&&--&对index进行判断与处理
&&&&if&index&&&1&then
&&&&&&&&index&=&1
&&&&elseif&index&&&count&then
&&&&&&&&index&=&count
&&&&self.currentIndex&=&index
&&&&--&根据滚动方向,设置偏移量
&&&&local&offset&=&0
&&&&for&i&=&2,&index&do
&&&&&&&&local&cell&=&self.cells[i&-&1]
&&&&&&&&local&size&=&cell:getContentSize()
&&&&&&&&if&self.direction&==&ScrollView.DIRECTION_HORIZONTAL&then
&&&&&&&&&&&&offset&=&offset&-&size.width
&&&&&&&&else
&&&&&&&&&&&&offset&=&offset&+&size.height
&&&&&&&&end
&&&&self:setContentOffset(offset,&animated,&time,&easing)
&&&&--&委派事件
&&&&self:dispatchEvent({name&=&&scrollToCell&,&animated&=&animated,&time&=&time,&easing&=&easing})
--&检测容器层self.view是否允许触摸
function&ScrollView:isTouchEnabled()
&&&&return&self.view:isTouchEnabled()
--&设置容器层是否允许触摸响应(默认是false)
function&ScrollView:setTouchEnabled(enabled)
&&&&self.view:setTouchEnabled(enabled)
&&&&--&self:setTouchEnabled(enabled)
&&&&self:dispatchEvent({name&=&&setTouchEnabled&,&enabled&=&enabled})
----&events&事件处理函数
function&ScrollView:onTouchBegan(x,&y)
&&&&self.drag&=&{
&&&&&&&&currentOffsetX&=&self.offsetX,
&&&&&&&&currentOffsetY&=&self.offsetY,
&&&&&&&&startX&=&x,
&&&&&&&&startY&=&y,
&&&&&&&&isTap&=&true,
&&&&local&cell&=&self:getCurrentCell()
&&&&cell:onTouch(event,&x,&y)
&&&&return&true
function&ScrollView:onTouchMoved(x,&y)
&&&&local&cell&=&self:getCurrentCell()
&&&&if&self.direction&==&ScrollView.DIRECTION_HORIZONTAL&then
&&&&&&&&if&self.drag.isTap&and&math.abs(x&-&self.drag.startX)&&=&self.dragThreshold&then
&&&&&&&&&&&&self.drag.isTap&=&false
&&&&&&&&&&&&cell:onTouch(&cancelled&,&x,&y)
&&&&&&&&end
&&&&&&&&if&not&self.drag.isTap&then
&&&&&&&&&&&&self:setContentOffset(x&-&self.drag.startX&+&self.drag.currentOffsetX)
&&&&&&&&else
&&&&&&&&&&&&cell:onTouch(event,&x,&y)
&&&&&&&&end
&&&&&&&&if&self.drag.isTap&and&math.abs(y&-&self.drag.startY)&&=&self.dragThreshold&then
&&&&&&&&&&&&self.drag.isTap&=&false
&&&&&&&&&&&&cell:onTouch(&cancelled&,&x,&y)
&&&&&&&&end
&&&&&&&&if&not&self.drag.isTap&then
&&&&&&&&&&&&self:setContentOffset(y&-&self.drag.startY&+&self.drag.currentOffsetY)
&&&&&&&&else
&&&&&&&&&&&&cell:onTouch(event,&x,&y)
&&&&&&&&end
--&Ended&&里面调用了onTouchCancelled(x,&y)与onTouchEndedWithTap(x,&y)
function&ScrollView:onTouchEnded(x,&y)
&&&&if&self.drag.isTap&then
&&&&&&&&self:onTouchEndedWithTap(x,&y)
&&&&&&&&self:onTouchEndedWithoutTap(x,&y)
&&&&self.drag&=&nil
--&Cancelled&&
function&ScrollView:onTouchCancelled(x,&y)
&&&&self.drag&=&nil
--&触摸结束时,结束点敲中按钮
function&ScrollView:onTouchEndedWithTap(x,&y)
&&&&local&cell&=&self:getCurrentCell()
&&&&cell:onTouch(event,&x,&y)
&&&&cell:onTap(x,&y)&&&&&&--&该函数的启动将会触发许多函数!!&&&&&&&&&&&&&&&&&&
--&触摸结束时,结束点没有敲中按钮
function&ScrollView:onTouchEndedWithoutTap(x,&y)
&&&&error(&ScrollView:onTouchEndedWithoutTap()&-&inherited&class&must&override&this&method&)
--&onTouch&&根据事件调用&Began、Moved、Ended与Cancelled
function&ScrollView:onTouch(event,&x,&y)
&&&&if&self.currentIndex&&&1&then&return&end
&&&&if&event&==&&began&&then
&&&&&&&&--&判断起始的触摸点是否在可触摸矩形中,若不在则直接返回不做任何操作
&&&&&&&&if&not&cc.rectContainsPoint(self.touchRect,&cc.p(x,&y))&then&return&false&end
&&&&&&&&return&self:onTouchBegan(x,&y)
&&&&elseif&event&==&&moved&&then
&&&&&&&&self:onTouchMoved(x,&y)
&&&&elseif&event&==&&ended&&then
&&&&&&&&self:onTouchEnded(x,&y)
&&&&else&--&cancelled
&&&&&&&&self:onTouchCancelled(x,&y)
----&private&methods&私有方法
--&重新整理所有的单元
function&ScrollView:reorderAllCells()
&&&&--&1、设置每个Cell(单元)的position,注意cell的锚点在(0,0)
&&&&local&count&=&#self.cells
&&&&local&x,&y&=&0,&0
&&&&local&maxWidth,&maxHeight&=&0,&0
&&&&for&i&=&1,&count&do
&&&&&&&&local&cell&=&self.cells&i&
&&&&&&&&cell:setPosition(x,&y)
&&&&&&&&--&根据滚动方向确定下个cell的position
&&&&&&&&if&self.direction&==&ScrollView.DIRECTION_HORIZONTAL&then
&&&&&&&&&&&&local&width&=&cell:getContentSize().width
&&&&&&&&&&&&if&width&&&maxWidth&then&maxWidth&=&width&end
&&&&&&&&&&&&x&=&x&+&width
&&&&&&&&else
&&&&&&&&&&&&local&height&=&cell:getContentSize().height
&&&&&&&&&&&&if&height&&&maxHeight&then&maxHeight&=&height&end
&&&&&&&&&&&&y&=&y&-&height
&&&&&&&&end
&&&&--&2、重置数据
&&&&if&count&&&0&then
&&&&&&&&if&self.currentIndex&&&1&then
&&&&&&&&&&&&self.currentIndex&=&1
&&&&&&&&elseif&self.currentIndex&&&count&then
&&&&&&&&&&&&self.currentIndex&=&count
&&&&&&&&end
&&&&&&&&self.currentIndex&=&0
&&&&--&3、添加完所有Cell后,根据滚动方向,设置好容器层的大小
&&&&local&size
&&&&if&self.direction&==&ScrollView.DIRECTION_HORIZONTAL&then
&&&&&&&&size&=&cc.size(x,&maxHeight)
&&&&&&&&size&=&cc.size(maxWidth,&math.abs(y))
&&&&self.view:setContentSize(size)
--&根据偏移量触发动作
function&ScrollView:setContentOffset(offset,&animated,&time,&easing)
&&&&local&ox,&oy&=&self.offsetX,&self.offsetY
&&&&local&x,&y&=&ox,&oy
&&&&if&self.direction&==&ScrollView.DIRECTION_HORIZONTAL&then
&&&&&&&&self.offsetX&=&offset
&&&&&&&&x&=&offset
&&&&&&&&local&maxX&=&self.bouncThreshold
&&&&&&&&local&minX&=&-self.view:getContentSize().width&-&self.bouncThreshold&+&self.touchRect.width
&&&&&&&&if&x&&&maxX&then
&&&&&&&&&&&&x&=&maxX
&&&&&&&&elseif&x&&&minX&then
&&&&&&&&&&&&x&=&minX
&&&&&&&&end
&&&&&&&&self.offsetY&=&offset
&&&&&&&&y&=&offset
&&&&&&&&local&maxY&=&self.view:getContentSize().height&+&self.bouncThreshold&-&self.touchRect.height
&&&&&&&&local&minY&=&-self.bouncThreshold
&&&&&&&&if&y&&&maxY&then
&&&&&&&&&&&&y&=&maxY
&&&&&&&&elseif&y&&&minY&then
&&&&&&&&&&&&y&=&minY
&&&&&&&&end
&&&&--&根据传入的动作参数执行动作
&&&&if&animated&then
&&&&&&&&transition.stopTarget(self.view)
&&&&&&&&transition.moveTo(self.view,&{
&&&&&&&&&&&&x&=&x,
&&&&&&&&&&&&y&=&y,
&&&&&&&&&&&&time&=&time&or&self.defaultAnimateTime,
&&&&&&&&&&&&easing&=&easing&or&self.defaultAnimateEasing,
&&&&&&&&})
&&&&&&&&--&如果animated这项为空,就没有动作了,直接使用setPosition跳转到下一个Cell
&&&&&&&&self.view:setPosition(x,&y)
function&ScrollView:onExit()
&&&&--&移除所有指定类型的事件处理函数
&&&&self:removeAllEventListeners()
return&ScrollView该脚本代码很多,可能比较麻烦看,但基本可以为四大部分:ctor,在里面设置了基本属性;对外接口函数,大部分为对属性进行操作的简单接口函数;events 事件处理函数;private methods 私有方法;剩下的需要大家看着注释慢慢理解了。四、PageControlPageControl继承自ScrollView,并且改动很小,只是重写一个方法,就是:onTouchEndedWithoutTap(x, y),原本该方法只在未点中时输出信息,但重写后会根据触摸偏移量进行翻页动作local&ScrollView&=&import(&.ScrollView&)
--&继承自ScrollView
local&PageControl&=&class(&PageControl&,&ScrollView)
--&重新定义了触摸点未敲中button时的函数,会根据触摸的偏移量执行翻页的动作
function&PageControl:onTouchEndedWithoutTap(x,&y)
&&&&local&offsetX,&offsetY&=&self.offsetX,&self.offsetY
&&&&local&index&=&0
&&&&local&count&=&#self.cells
&&&&if&self.direction&==&ScrollView.DIRECTION_HORIZONTAL&then
&&&&&&&&offsetX&=&-offsetX
&&&&&&&&local&x&=&0
&&&&&&&&local&i&=&1
&&&&&&&&while&i&&=&count&do
&&&&&&&&&&&&local&cell&=&self.cells&i&
&&&&&&&&&&&&local&size&=&cell:getContentSize()
&&&&&&&&&&&&if&offsetX&&&x&+&size.width&/&2&then
&&&&&&&&&&&&&&&&index&=&i
&&&&&&&&&&&&&&&&break
&&&&&&&&&&&&end
&&&&&&&&&&&&x&=&x&+&size.width
&&&&&&&&&&&&i&=&i&+&1
&&&&&&&&end
&&&&&&&&if&i&&&count&then&index&=&count&end
&&&&&&&&local&y&=&0
&&&&&&&&local&i&=&1
&&&&&&&&while&i&&=&count&do
&&&&&&&&&&&&local&cell&=&self.cells&i&
&&&&&&&&&&&&local&size&=&cell:getContentSize()
&&&&&&&&&&&&if&offsetY&&&y&+&size.height&/&2&then
&&&&&&&&&&&&&&&&index&=&i
&&&&&&&&&&&&&&&&break
&&&&&&&&&&&&end
&&&&&&&&&&&&y&=&y&+&size.height
&&&&&&&&&&&&i&=&i&+&1
&&&&&&&&end
&&&&&&&&if&i&&&count&then&index&=&count&end
&&&&self:scrollToCell(index,&true)
return&PageControl五、最终的成品LevelsListLevelsList继承自PageControl ,重写了两个方法:ctor和scrollToCell,与其说是重写不如说是为他们增加了功能,两个方法都首先执行了父类的方法,在ctor增加了按钮的布局添加与指示灯,在scrollToCell中增加了指示灯的动作效果。这就是指示灯:同时,扩增了一个方法onTapLevelIcon,作用是委派事件。local&LevelsListCell&=&import(&.LevelsListCell&)
local&Levels&=&import(&..data.Levels&)
local&PageControl&=&import(&..ui.PageControl&)
--&继承自PageControl
local&LevelsList&=&class(&LevelsList&,&PageControl)
LevelsList.INDICATOR_MARGIN&=&46&--&指示灯的间隔
function&LevelsList:ctor(rect)
&&&&--先执行方法定义好的方法
&&&&LevelsList.super.ctor(self,&rect,&PageControl.DIRECTION_HORIZONTAL)
&&&&--&1、add&cells
&&&&--&默认是4行4列,横的是行,竖的是列
&&&&local&rows,&cols&=&4,&4
&&&&--&如果分辨率的高超过1000,而变成5行
&&&&if&display.height&&&1000&then&rows&=&rows&+&1&end
&&&&--&总页数&:7页,也就是7个cell
&&&&local&numPages&=&math.ceil(Levels.numLevels()&/&(rows&*&cols))
&&&&local&levelIndex&=&1
&&&&--&使用for循环添加7个cell
&&&&for&pageIndex&=&1,&numPages&do
&&&&&&&&--&每个cell最后一个关卡的等级
&&&&&&&&local&endLevelIndex&=&levelIndex&+&(rows&*&cols)&-&1
&&&&&&&&--&如果cell的最后一个关卡等级大于Levels.lua里设定好的100个等级话的,那么endLevelIndex就为100,也就是第7个cell
&&&&&&&&if&endLevelIndex&&&Levels.numLevels()&then
&&&&&&&&&&&&endLevelIndex&=&Levels.numLevels()
&&&&&&&&end
&&&&&&&&--&创建cell
&&&&&&&&local&cell&=&LevelsListCell.new(cc.size(display.width,&rect.height),&levelIndex,&endLevelIndex,&rows,&cols)
&&&&&&&&cell:addEventListener(&onTapLevelIcon&,&function(event)&return&self:onTapLevelIcon(event)&end)
&&&&&&&&self:addCell(cell)
&&&&&&&&--重置数据,为下个循环添加cell做准备
&&&&&&&&levelIndex&=&endLevelIndex&+&1
&&&&--&2、add&indicators&添加指示灯
&&&&local&x&=&(self:getClippingRect().width&-&LevelsList.INDICATOR_MARGIN&*&(numPages&-&1))&/&2
&&&&local&y&=&self:getClippingRect().y&+&20
&&&&self.indicator_&=&display.newSprite(&#LevelListsCellSelected.png&)
&&&&self.indicator_:setPosition(x,&y)
&&&&self.indicator_.firstX_&=&x
&&&&for&pageIndex&=&1,&numPages&do
&&&&&&&&local&icon&=&display.newSprite(&#LevelListsCellIndicator.png&)
&&&&&&&&icon:setPosition(x,&y)
&&&&&&&&self:addChild(icon)
&&&&&&&&x&=&x&+&LevelsList.INDICATOR_MARGIN
&&&&self:addChild(self.indicator_)
--&重写scrollToCell方法,添加指示灯的动作效果
function&LevelsList:scrollToCell(index,&animated,&time)
&&&&--1、先执行方法定义好的方法
&&&&LevelsList.super.scrollToCell(self,&index,&animated,&time)
&&&&--2、指示灯动作效果代码
&&&&transition.stopTarget(self.indicator_)
&&&&local&x&=&self.indicator_.firstX_&+&(self:getCurrentIndex()&-&1)&*&LevelsList.INDICATOR_MARGIN
&&&&if&animated&then
&&&&&&&&time&=&time&or&self.defaultAnimateTime
&&&&&&&&transition.moveTo(self.indicator_,&{x&=&x,&time&=&time&/&2})
&&&&&&&&self.indicator_:setPositionX(x)
--&点中图标是委派一个事件
function&LevelsList:onTapLevelIcon(event)
&&&&self:dispatchEvent({name&=&&onTapLevelIcon&,&levelIndex&=&event.levelIndex})
return&LevelsList六、使用回到最初的代码:local&rect&=&cc.rect(display.left,&display.bottom&+&180,&display.width,&display.height&-&280)
&&&&self.levelsList&=&LevelsList.new(rect)
&&&&self.levelsList:addEventListener(&onTapLevelIcon&,&handler(self,&self.onTapLevelIcon))
self:addChild(self.levelsList)使用很简单了,只要传入一个矩形参数就足够了,其他的东西在LevelsListCell和LevelsList里都已经扩展好了。让我们看一下这句代码self.levelsList:addEventListener(&onTapLevelIcon&, handler(self, self.onTapLevelIcon))找到self.onTapLevelIcon:function&ChooseLevelScene:onTapLevelIcon(event)
&&&&&&&&&&audio.playSound(GAME_SFX.tapButton)
&&&&&&&&&&app:playLevel(event.levelIndex)
end这个方法就把我们之前所讲的一切联系上了,进入游戏进行场景了!七、再讲讲dispatchEvent先说清楚,这个地方完全了看着这个游戏代码自我理解,不太能讲得明白,大家可以参考这篇文章:《》还是继续看这句代码:self.levelsList:addEventListener(&onTapLevelIcon&,&handler(self,&self.onTapLevelIcon))问题来了,事件&onTapLevelIcon&哪里来的呢?回到levelsList.lua发现:--&点中图标是委派一个事件
function&LevelsList:onTapLevelIcon(event)
&&&&self:dispatchEvent({name&=&&onTapLevelIcon&,&levelIndex&=&event.levelIndex})
end并且在ctor中发现了使用它的代码:cell:addEventListener(&onTapLevelIcon&,&function(event)&return&self:onTapLevelIcon(event)&end)意思就是LevelsList里的onTapLevelIcon(event)函数一定执行,就会触发名为&onTapLevelIcon&的Event,同时返回一个参数event={ name = &onTapLevelIcon&,levelIndex = event.levelIndex}}。但在这里,我们又发现了Cell里也有一个&onTapLevelIcon&事件,好吧,乖乖回去LevelsListCell--&触摸敲中button的响应函数
function&LevelsListCell:onTap(x,&y)
&&&&local&button&=&self:checkButton(x,&y)
&&&&if&button&then
&&&&&&&&self:dispatchEvent({name&=&&onTapLevelIcon&,&levelIndex&=&button.levelIndex})
end而这个onTap(x, y)是在何时被调用的呢?答案就在ScrollView:--&触摸结束时,结束点敲中按钮
function&ScrollView:onTouchEndedWithTap(x,&y)
&&&&local&cell&=&self:getCurrentCell()
&&&&cell:onTouch(event,&x,&y)
&&&&cell:onTap(x,&y)&&&&&&--&该函数的启动将会触发许多函数!!&&&&&&&&&&&&&&&&&&
end总结起来就当触摸结束时,结束点敲中按钮,将会触发事件,层层递进,最终进入游戏场景!最后附上带注释的源码:
来源网址:
看到4,5篇就困了
LIONLIN 14:50:24
请问这里每个关卡的按钮不使用Button,而是用点击区域来判断呢
liqian 16:33:49
讲得很清晰,很适合初学者,多谢美文
yuexiaoxing001 18:42:43
写的不错,quick当中这个是必须重写的,虽然可以使用ccsrollview但是bug多多的,我踩了n多坑了,相信我,研究好这个没错的哦呵呵。好东西,赞
还有 quick 不自带ScrollView 么 这个文件都是要自己重写的?
回复 我也想这么说,可是这个示例就是自己重写了,真奇怪!
我竟然看完了五篇
回复 好厉害
评论内容不能为空。

我要回帖

更多关于 强去找过你对不对 的文章

 

随机推荐