第二部分 显示对象(文字动画)
1 文字
①普通文字
var game = new Phaser.Game(300, 630, Phaser.AUTO, 'container', state); function state(){ this.create = function(){ var text = game.add.text(0, 0, '你好\n世界'); //var text = game.add.text(X, Y, '文字',样式,组);样式可以是对象形式{a:"b";},也可以是下面的这样的形式 text.fill = '#fff'; text.font = '微软雅黑'; text.fontSize = 60; text.fontWeight = 'normal';//粗细 默认加粗,这个是正常 //text.style.backgroundColor = '#0f0'//背景颜色 text.stroke = '#f00';//描边 text.strokeThickness = 10;//描边宽度,不设置这个,上面的效果为0 text.wordWrap = true;//自动换行 配合下面的那个宽度进行 但中文不支持 text.wordWrapWidth = 150; } }
②特殊文字BitmapText
手册: http://www.swjxzy.com/phaserZF/docs/Phaser.BitmapText.html
制作工具:https://71squared.com/en/glyphdesigner
http://kvazars.com/littera/ 在线制作工具
在线制作工具的使用方法:简略的。另外,字体中有很多字是不能生成的,所以不要用很生僻的字体
使用方法:
var game = new Phaser.Game(300, 630, Phaser.AUTO, 'container', state); function state(){ this.preload = function(){ game.load.bitmapFont('font', 'asset/font.png', 'asset/font.fnt'); //要先导入在制作软件中导出的字体文件 } this.create = function(){ var text = game.add.bitmapText(0, 0, 'font', '黄河远上白云间,\n一片孤城万仞山。\n羌笛何须怨杨柳,\n春风不度玉门关。', 30); //BitmapText(x, y, font, text, size, group) } }
2 组 group
手册:http://www.swjxzy.com/phaserZF/docs/Phaser.Group.html
Phaser.Group组是一个虚拟的、无形的显示对象容器,用来把多个显示对象组合在一起使之形成一个整体。同时,组又可以作为其他显示对象或组的子元素。Phaser.World世界对象是显示对象列表中最顶层的一个组。
组的作用
组合多个显示对象,便于整体操作
提供了多种便捷方法对组内的元素进行管理
为显示对象的回收利用机制提供支持
为组添加子元素的三种方法:
创建图片或精灵等显示对象时指定组
group.add() 方法直接添加
group.create()方法创建子元素并添加进组
组的使用:
var game = new Phaser.Game(300, 630, Phaser.AUTO, 'container', state); function state(){ this.preload = function(){ game.load.image('cat', 'asset/cat.png'); } this.create = function(){ var group = game.add.group(); //通过创建子元素的方法向组中加入 var cat1 = group.create(0, 0, 'cat'); var cat2 = group.create(100, 100, 'cat'); var cat3 = group.create(100, 300, 'cat'); var cat3 = group.create(100, 500, 'cat'); group.alpha = 0.5; group.x = 100; group.scale.set(0.5); //也可以像下面这样,先创建好显示对象,然后加入组中。也可以在创建显示对像时就指定所属的组 /*var cat =game.add.image(0,0,'cat'); var group = game.add.group(); group.add(cat) */ } }
3 动画
① 缓动动画 tween
var game = new Phaser.Game(300, 630, Phaser.AUTO, 'container', state); function state(){ this.preload = function(){ game.load.image('phaser', 'asset/phaser.png'); } this.create = function(){ var phaser = game.add.image(0, 0, 'phaser');//要添加动画的目标 var tween = game.add.tween(phaser);//新建一个缓动动画对像,目标为上面那个 /*tween.to({y:300}, 2000, Phaser.Easing.Bounce.Out, true, 0, 100, true);*/ tween.from({y:300}, 2000, Phaser.Easing.Bounce.Out, true, 0, 100, true); //共同的:属性,持续时间,什么动画,是否自动启动,延迟时间,重复次数,是否自动逆转动画 } this.update = function(){ } }
例子:
②Animation 动画
制作合成图片工具:①TexturePacker ② shoebox
AtlasXML手册:Phaser Class: Loader
var game = new Phaser.Game(300, 630, Phaser.AUTO, 'container', state); function state(){ this.init = function(){ game.stage.setBackgroundColor(0xffffff); } this.preload = function(){ game.load.atlasXML('man', 'asset/atlas/sprites.png', 'asset/atlas/sprites.xml'); //命的名,合成的图片,图片的XML数据 } this.create = function(){ var man = game.add.sprite(0, 0, 'man');//新建一个精灵对象 man.animations.add('tidy', ['1.png', '2.png', '3.png', '4.png', '5.png', '6.png', '7.png']); //为精灵添加一个动画 tidy,这里可以添加很多个动画 man.play('tidy', 10, true);//播放动画(哪个动画,速度(数值越大越快),是否循环播放) } }
结合前面的内容,自己做一个行走图
zgf.png
var game = new Phaser.Game(300, 630, Phaser.AUTO, 'container', state); function state(){ this.init = function(){ game.stage.setBackgroundColor(0xffffff); } this.preload = function(){ //game.load.atlasXML('man', 'asset/atlas/sprites.png', 'asset/atlas/sprites.xml'); game.load.spritesheet('man', 'asset/zgf.png', 32, 48); } this.create = function(){ var man = game.add.sprite(0, 0, 'man'); man.animations.add('tidy', [0, 1, 2, 3]); man.play('tidy', 5, true); } }
可以自行扩展。