phaser的相关方法
TP、sprite
TP每张图片都拥有一个target目标的锚点,在phaser中,可以通过add.sprite(x, y, ’场景‘, ‘图片位置’)来设置。
预加载sprite图:
1 | this.load.multiatlas('cityscene', 'assets/cityscene.json', "assets") |
使用sprite:
1 | this.add.sprite(0, 0, 'cityscene', 'background.png') |
sprite动画渲染:
1 | let frameNames = this.anims.generateFrameNames('cityscene', { start: 1, end: 8, zeroPad: 4, prefix:'capguy/walk/', suffix:'.png' }); |
关于调整canvas的
1 | function resize(){ |
tweens.timeline
config api: https://photonstorm.github.io/phaser3-docs/Phaser.Tweens.html#.TweenConfigDefaults__anchor
1 | this.tweens.timeline({ |
offset参数
本次动画的活动时间。
这里有一个坑,字符串的’’和数值的,运行是不同的,数值的是本次动画的活动时间。
而字符串的是不正规写法,-=500指的是上一个动画进行的时间减500就是本次动画的开始时间。+=500指的是上一个动画进行的时间加500就是本次动画的开始时间
例子:
①duration: 3000
②offset: ‘-=500’
那么②动画将会在2500的时候和①动画一起进行。
例子2(如果需要对应例子1但是写法是数值):
①duration: 3000
②offset: 2500
1 | offset: '-=500' // starts 500ms before previous tween ends |
通过add方法来添加动画
1 | let timeLine = this.tweens.timeline({}) |
ease参数
https://easings.net/zh-cn
http://lets-gamedev.de/phasereasings/
这里需要注意的是Phaser 3的Easing不是放在Phaser上的,而是1
Phaser.Math.Easing.Back.InOut
http://labs.phaser.io/edit.html?src=src\tweens\ease%20equations.js
target等其他参数都是可以写进tweens里面
1 | this.tweens.timeline({ |
生命周期
onStart 动画开始。
onComplete 动画结束。
onYoyo 动画往返。
onRepeat 动画重复。
Phaser.Actions.GridAlign()做成组的动画
methods doc: https://photonstorm.github.io/phaser3-docs/Phaser.Tweens.Tween.html
tween.restart()
http://labs.phaser.io/edit.html?src=src\tweens\checkerboard%202.js
1 | function preload() { |
1 | let blocks = this.add.group({key: ''block', repeat: 107, setScale: {x: 0.3, y:0.3}) // 添加成组的图片 重复103次 block图片 |
一个角度旋转的正方形动画 angle: { getEnd(target, key, value){}, getStart(target, key, value){}}
http://labs.phaser.io/edit.html?src=src\tweens\checkerboard%20rotate.js1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28let a = [0, 90, 180, 270]
blocks.children.iterate((child) => {
child.angle = Phaser.Math.RND.pick(a) // 随机选择数组的方法
this.tweens.add({
targets: child,
ease: 'Power1',
duration: 250,
delay: (Math.random() * 6000),
repeatDelay: 3000 + (Math.random() * 6000),
repeat: -1,
angle: {
getEnd (target, key, value) {
let a = 90
if (Math.random() > .5) {
a = 180
return target.angle + a
} else {
return target.angle - a
}
},
getStart (target, key, value) { // 假如不设置getStart 则会告诉Phaser: 嘿帮我把这个方框旋转多少度
return target.angle // 假如设置了getStart return target.angle 则告诉Phaser: 嘿你从方框的原始角度开始,旋转到那个角度
}
}
})
})
一个蛋蛋球的动画
1 | props:{ x:{value() => {}, ease: ''}, y:{value() => {}, ease: ''} } |
http://labs.phaser.io/edit.html?src=src\tweens\dynamic%20end%20property.js
props 里面的xy,在一整个动画完成后(yoyo为true的时候,也是按照到末端执行一次的),是会执行一次value方法的,从而更改一次动画的xy位置。
这里可能有一些复杂
http://labs.phaser.io/edit.html?src=src\tweens\dynamic%20properties%20multiple.js
在getStart上面打一个alert(value),控制下过程你就可以知道了,yoyo为true的时候,返回的位置就是已经改变了的getStart(){return value + 30}
1 | let maker = this.add.image(400, 300, './bollShadow.png') |
深入蛋蛋球动画
1 | props:{x:{value:{getEnd() => {}, getStart() => {}}, ease:'', tweensConfig}} |
http://labs.phaser.io/edit.html?src=src\tweens\dynamic%20properties%20multiple.js
props x 或者 y 里面的value 是初始的value值, value 仅仅会在getStart() => { return 你想改变的Value值 }
1 | let destX = 600 |
easeParams ease的额外参数
1 | { |
例子:
http://labs.phaser.io/edit.html?src=src\tweens\elasticity.js
http://labs.phaser.io/edit.html?src=src\tweens\ease%20params.js
Back api 文档:
https://photonstorm.github.io/phaser3-docs/Phaser.Math.Easing.Back.html
目前还不太清楚这个参数的调控
ease为 [‘Back’, ‘Elastic’] 的时候可用 (例子中看到的)
ease为back的时候,动画将会达到目标地点后继续悬着那个方向进行动画,然后返回
easeParams 中,默认值是1.70158(ease: ‘Back’的时候)
你可以增加一些旋转的参数进去,看看返回的动效是怎么样的
参数方面如果为0就不进行回滚
flipX配合props: {x: {}}来使用
1 | { |
假如你想让图像只在x动画结束,flipX起效,那么你应该做的是1
x: { value: 700, duration: 4000, flipX: true }
loop loopDelay 和 repeat repeatDelay 的区别
http://labs.phaser.io/edit.html?src=src\tweens\loop%20delay.js
loop和repeat直接用是没有任何区别的。
当loop和loopDelay组合的时候,动画是播放完毕,然后画面保持完成状态,等待loopDelay所设置的时间,然后再重复这个动画,马上执行。
当repeat和repeatDelay组合的时候,动画播放完毕,画面立刻回到开始状态,等待repeatDelay所设置的时间,然后重复这个动画。
onComplete onCompleteParams
1 | { |
动画的暂停与运行 this.tweens.pauseAll() this.tweens.resumeAll()
1 | let downButton = this.add.image(70, 530, 'down').setInteractive() |
input事件监听类型
https://photonstorm.github.io/phaser3-docs/Phaser.Events.EventEmitter.html#once__anchor
event: https://photonstorm.github.io/phaser3-docs/Phaser.Input.Events.html