这一章是作好一镜到底
最关键的一课,打开vscode,确保文件夹和文件的结构跟我本地是否一致,而后开始live-server启动vscode本地服务器。json
这一步就至关于flash按键盘的ctrl+n,设置了舞台宽度为1344,高度为750
let app = new PIXI.Application({width: 1344, height: 750});
复制代码
这一步至关于flash,导入了素材
const loader = new PIXI.loaders.Loader();
loader.add('bg1', 'imgs/bg1.jpg')
......
复制代码
target.progress会根据上面图片的多少真实的实现loading效果,返回0~100的小数,而后须要用parseInt()格式化整数。
loader.on("progress", function(target, resource) { //加载进度
console.log(target.progress+"%")
});
复制代码
loader.once('complete', function(target, resource) { //加载完成
document.body.appendChild(app.view)
//初始化场景
initScenes();
//初始化精灵
initSprites();
//初始化动画
initAnimation();
}
loader.load(); // 开始加载资源
================================================================
这句话document.body.appendChild(app.view)写完,才能够显示舞台
这句话loader.load()写完,才能够监听到加载进度;
complete事件中,完成咱们一镜到底要完成的事情
复制代码
const scenesOptions = [ // 场景数据:定义每一个场景的宽高,x/y距离
{
name:"scene1",
x:1000,y:0,
width:3554,height:750
},
{
name:"scene2",
x:1000,y:0,
width:3554,height:750
}
.....
];
================================================================
name:就是场景的名字
x,y就是它初始化的位置
width,height就是设计稿场景1的宽度和高度
复制代码
const scenes = {}; // 场景集合 - pixi对象
function initScenes(){ // 初始化场景
for (let i = scenesOptions.length-1; i >= 0 ; i--) {
scenes[scenesOptions[i].name] = new PIXI.Container({
width:scenesOptions[i].width,
height:scenesOptions[i].height
});
scenes[scenesOptions[i].name].x = scenesOptions[i].x;
app.stage.addChild(scenes[scenesOptions[i].name]);
}
}
=========================================================
这句话若是不封装,其实很好理解就是这么几句话
const scenes = {};
scenes.scene1 = new PIXI.Container({
width:1344,
height:750
});
scenes.scene1.x = 0;
app.stage.addChild(scenes.scene1);把场景添加到舞台
复制代码
const spritesOptions = [
{// 第一个场景的精灵
bg1:{
position:{x:0,y:0}
},
{
...
}
},
{// 第二个场景的精灵
bg1:{
position:{x:0,y:0}
},
{
...
}
}
]
复制代码
function initSprites(){ // new出全部精灵对象,并交给函数initSprite分别赋值
for (let i = 0; i < spritesOptions.length; i++) {
let obj = spritesOptions[i];
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
sprites[key] = PIXI.Sprite.fromImage(key);
initSprite(sprites[key],obj[key],i+1);
}
}
}
initSpecialProp();
}
function initSprite(sprite,prop,i){ // 初始化单个精灵的属性并加入对应的场景中
for (let key in prop) {
if (prop.hasOwnProperty(key)) {
sprite[key] = prop[key];
}
}
scenes['scene'+i].addChild(sprite);
}
=========================================================
这句话若是不封装,其实很好理解就是这么几句话
sprites.bg1 = PIXI.Sprite.fromImage('bg1');
bg1.position.x = 0;
bg1.position.y = 0;
scenes.scenes1.addChild('bg1');把精灵给到场景
复制代码
const animationsOptions = { // 精灵动画集合
jzLeft:[{
delay:0,
duration:0.11,
to:{x:600,y:200,ease:Power0.easeNone}
}],
jzRight:[{
delay:0,
duration:0.11,
to:{x:1746,y:200,ease:Power0.easeNone}
}]
}
复制代码
function initAnimation(){
// delay=0.1 表示滚动到10%开始播放动画
// duration=0.1 表示运动时间占滚动的百分比
for (let key in animationsOptions) {
if (animationsOptions.hasOwnProperty(key)) {
let obj = animationsOptions[key];
for (let i = 0; i < obj.length; i++) {
let act;
let target;
if (obj[i].prop) {
target = sprites[key][obj[i].prop];
} else {
target = sprites[key];
}
if(obj[i].from & obj[i].to){
act = TweenMax.fromTo(target,obj[i].duration,obj[i].from,obj[i].to);
} else if (obj[i].from) {
act = TweenMax.from(target,obj[i].duration,obj[i].from);
}else if (obj[i].to) {
act = TweenMax.to(target,obj[i].duration,obj[i].to);
}
let tm = new TimelineMax({delay:obj[i].delay});
tm.add(act,0);
tm.play();
timeline.add(tm,0);
}
}
}
}
===================================================================
let act;
let tm;
act = TweenMax.to(scenes.scene1,0.11,{x:2400})
tm = new TimelineMax({delay:0});
tm.add(act,0);
tm.play();
timeline.add(tm,0);
复制代码
到这里就结束啦,下一章解决横竖适配问题,在下一章分享如何经过滑动结合时间控制动画。bash