在pixi中,添加一个精灵元素,你可能需要,先将贴图load进来,然后才能添加到场景中去,所以一般会这么操作

                   Loader.add("tree","static/images/tree.png").load(function(){
for (var i = ; i < ; i++) {
let sprite = new PIXI.Sprite(
Resources.tree.texture
);
sprite.x = (i%)*;
sprite.y = ~~(i/ + )*;
sprite.type = 'tree';
sprite.scale.x = 0.1;
sprite.scale.y = 0.1;
sprite._zIndex = -;
sprite.buttonMode = true;
sprite.interactive = true;
sprite.on('pointerdown', function(){
console.log(this)
});
app.stage.addChild(sprite);
}
});

不难看出,上述代码,往场景中加了6棵树。

当要添加很多不同元素的时候,需要的贴图可能会很多,而且load贴图是不能同时load两张以上的贴图,会报如下错误

所以,雪碧图就产生了,将多张资源贴图整合在一起,生成一张图(用texturepacker工具可以附带生成一个json,不用手动计算每一帧所需的图片在雪碧图中的位置,很方便)

但是,我觉得这样的话,所有的元素都会由于雪碧图的原因,不得不将不同元素的业务逻辑集中写在同一个雪碧图load后的回调里面,个人感觉很鸡肋,耦合度过高!

于是,我想到了用事件队列。

一、用事件队列管理不同元素的业务逻辑

具体代码,长这样:

效果是这样的:

人物由上下左右键控制运动;

松鼠自由运动,每3秒随机换个方向;

寸草不生的土地由136个精灵拼接而成;

一片水和6棵树。

二、代码解析

//任务队列对象
var tasklist = {
task:[],
run:function(){
var task = this.task.shift();
if(task){
task();
}
},
push:function(task){
this.task.push(task)
}
}; //单个任务
function tasktree(){
Loader.add("tree","static/images/tree.png").load(function(){
tasklist.run();
for (var i = ; i < ; i++) {
let sprite = new PIXI.Sprite(
Resources.tree.texture
);
sprite.x = (i%)*;
sprite.y = ~~(i/ + )*;
sprite.type = 'tree';
sprite.scale.x = 0.1;
sprite.scale.y = 0.1;
sprite.buttonMode = true;
sprite.interactive = true;
sprite.on('pointerdown', function(){
console.log(this)
});
app.stage.addChild(sprite);
}
});
} //任务队列初始化和开始运行
tasklist.task=[taskground,taskwater,taskperson,tasktree,taskanimal];
tasklist.run();

该事件队列机制的核心就在于利用数组的shift()方法模拟了队列的FIFO规则,并且规避了不能同时load两个以上贴图的问题。

因为上述红色粗体字可以看出,上一个任务的贴图load结束之后,立马load下一个任务的贴图,并且此时同步执行上个任务的逻辑部分,如此循环直到任务队列里面的任务全部清空。

有了这个事件队列机制,大大地降低了各个场景元素之间的雪碧图加载的带来的这种高耦合度问题。并且场景元素的加载与拆卸也会变得很便捷,只要不把这个任务放到事件队列里面那么他就不会被被执行,并且不会影响其他代码块的执行。

是不是很方便呢?如果你有更好的方法,不妨在下方评论

用事件队列来处理pixi中的场景元素入场的更多相关文章

  1. 在pixi中使用你的自定义着色器

    通过几天的学习,对openGL.shader有了一个大致的了解. 回到学习的初衷吧,在基于pixi.js重构D3项目的时候,因为精灵层级的问题,我得按照一定的先后顺序将不同类别的精灵添加到场景中去. ...

  2. Unity制作游戏中的场景

    Unity制作游戏中的场景 1.2.3  场景 在Unity中,场景(Scene)就是游戏开发者制作游戏时,所使用的游戏场景.它是一个三维空间,对应的三维坐标轴分别是X轴.Y轴和Z轴本文选自Unity ...

  3. cocos2dx中的场景和使用方法

    1.一个游戏中有且只有一个导演,但是至少有一个场景 2.场景是游戏元素节点数的根节点,也可以理解为该场景下的渲染树的根节点 3.场景是一个容器,包含了该场景下的所有游戏元素,比如层,精灵 4.场景是导 ...

  4. LoadRunner中运行场景时提示"You do not have a license for this Vuser type."

    LoadRunner中运行场景时提示"You do not have a license for this Vuser type." 2012-06-15 17:09:07|  分 ...

  5. Spring Data JPA系列3:JPA项目中核心场景与进阶用法介绍

    大家好,又见面了. 到这里呢,已经是本SpringData JPA系列文档的第三篇了,先来回顾下前面两篇: 在第1篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring ...

  6. 萌新笔记——Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

    最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对"基数"以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了"HyperLo ...

  7. CSharpGL(6)在OpenGL中绘制UI元素

    CSharpGL(6)在OpenGL中绘制UI元素 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...

  8. CSharpGL(2)设计和使用场景元素及常用接口

    CSharpGL(2)设计和使用场景元素及常用接口 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...

  9. Cardinality Estimation算法学习(一)(了解基数计算的基本概念及回顾求字符串中不重复元素的个数的问题)

    最近在菜鸟教程上自学redis.看到Redis HyperLogLog的时候,对“基数”以及其它一些没接触过(或者是忘了)的东西产生了好奇. 于是就去搜了“HyperLogLog”,从而引出了Card ...

随机推荐

  1. BZOJ 1093 强连通缩点+DAG拓扑DP

    缩点后在一个DAG上求最长点权链 和方案数 注意转移条件和转移状态 if (nowmaxn[x] > nowmaxn[v]) { ans[v] = ans[x]; nowmaxn[v] = no ...

  2. 下一代容器技术podman简介

    PODMAN主要由红帽发起和推动,是下一代的容器技术,包括如下三个模块:Podman,Skopeo和Buildah这三个工具都是符合OCI计划下的工具(github/containers).主要是由R ...

  3. RabbitMQ与Spring集成配置

    1.引入相关jar包 //RabbitMQ compile group: 'org.springframework.amqp', name: 'spring-rabbit', version: '1. ...

  4. retrying failed action with response code: 403 错误解决

    [2019-06-10T06:52:51,610][INFO ][logstash.outputs.elasticsearch] retrying failed action with respons ...

  5. [Algorithm] Find The Vowels

    // --- Directions // Write a function that returns the number of vowels // used in a string. Vowels ...

  6. IF语句及代码练习

    接着上篇的内容  ㈠ if . . . else . . .语句 ⑴语法 if(条件表达式){              语句. . . } else {             语句. . . } ...

  7. React组件式编程Demo-用户的增删改查

    1.项目结构 项目是基于webpack4, 参考 创建基本的webpack4.x项目 2.页面效果 初始化效果

  8. composer查看全局配置

    composer config -l -g composer 更新慢 composer下载不下来问题解决 使用 Composer 镜像加速有两种选项: 选项一:全局配置,这样所有项目都能惠及(推荐): ...

  9. CKEditor从word粘贴问题

    最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...

  10. 小米oj 不要乱改代码(并查集)

     不要乱改代码 序号:#91难度:非常难时间限制:2000ms内存限制:50M 描述 最近小米公司内爆发了一种名叫"瞎改我代码就会死"的传染病. 传播方式是只要与染病者共同编辑过一 ...