pixijs使用教程--基础篇

Pixi.js使用WebGL,是一个超快的HTML5 2D渲染引擎。作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的、轻量级而且是兼任所有设备的2D库。提供无缝 Canvas 回退,支持主流浏览器,包括桌面和移动。 Pixi渲染器可以开发者享受到硬件加速,但并不需要了解WebGL。

在线Demo

Pixi.js的GitHub主页上,列举了很多在线Demo。

GitHub:https://github.com/GoodBoyDigital/pixi.js/

官网: http://www.pixijs.com/

API :http://www.goodboydigital.com/pixijs/docs/

官方教程:http://www.goodboydigital.com/pixi-js-tutorial-getting-started/

https://github.com/GoodBoyDigital/pixi.js 打包下载后,解压,在example里边有23个应用示例。

需要说明的是,有些示例需要使用http才能浏览,也就是说file://的方式有些资源是无法显示的。

=========================================================================

// 创建一个PIXI的实例,并展示出来,通常需要六步
// 1:创建一个舞台
// 2:创建一个画布
// 3:把画布插入DOM中
// 4:创建一个精灵
// 5:把精灵加入画布
// 6:把画布加入舞台

// 名词解释
// 舞台(stage):
// A Stage represents the root of the display tree.
// Everything connected to the stage is rendered
// 所有要渲染的对象都必须连接到舞台中才能被显示出来
// 舞台处于整个树形展示结构的最底层,可以理解为背景
// demo :
// var stage = new PIXI.Stage(0xFFFFFF);
//
// 画布(renderer):
// 选用canvas或webGL进行渲染的一个区域
// demo:
// var renderer = PIXI.autoDetectRenderer(400, 300);
//
// 纹理(texture):
// 可以理解成一种包装图片的结构,它本身不能直接用于显示
// 可以通过精灵用于显示
// demo:
// var texture = PIXI.Texture.fromImage("bunny.png");
//
//精灵(sprite):
// 可以直接用于舞台显示的对象,可以理解为DOM中的element.
// 精灵可以直接用图片创建
// 也可以先通过创建纹理,再于纹理创建精灵
// demo :
// 1:var sprite = new PIXI.Sprite.fromImage(‘assets/image.png‘);
// 2:var texture = PIXI.Texture.fromImage("bunny.png");
// var sprite = new PIXI.Sprite(texture);

//  sprite.position.x = 30; //没有单位

//  sprite.position.y = 20; // 这就和给element设置样式是一样的道理。

// 关于对精灵的操作,参考官方示例
//
// 事件(event):
// PIXI库在精灵和舞台上提供了事件,用于交互.
// demo:
// stage.click = function(data){
// var event = data.originalEvent
//
// }
// sprite.click = function(data){
// var event = data.originalEvent
// var target = event.target
// //阻止默认行为,sprite.buttonMode = false;
// event.preventDefault();
//
// }
//
// 此外,还有.mousedown,.mouseover,.mouseout,
// .mousemove,.mouseup ,.mouseupoutside ,
// .touchstart,.touchend,.tap
//
// 需要注意的是对于有事件的精灵,通常需要设置sprite.interactive = true
// 对于作按钮用的精灵,需要设置sprite.buttonMode = true;
// 与DOM的事件不同的是,精灵中的事件,是进行了二次封装的,
// 通常需要用var event = data.originalEvent来与普通dom中的event对象保持一至
// 不过又不完全相同,如data.originalEvent.stopPropagation()就不起作用.

// 关于stopPropagation的问题,我问过pixijs的开发者,他答复说stopPropagation是dom中的概念,在webGL中是没有的,所以不能说是pixi的问题。
// 下面使用PIXI库显示一张图片的简单例示:
//
/**
var stage = new PIXI.Stage();
var renderer = PIXI.autoDetectRenderer(400, 300);

document.body.appendChild(renderer.view);
var sprite = new PIXI.Sprite.fromImage(‘bunny.png‘);
stage.addChild(sprite);

*/
//
// 直接贴出上面的代码,在网页上只能看到漆黑的背景而看不到图片
// 这是因为精灵的创建是异步的,必须等加载完图片之后才能把精灵加入舞台中
//
// 这有两种解决方式:
// 第1种就是不断的去刷新舞台。
// 如:
// requestAnimFrame(animate);
// function animate(){
// renderer.render(stage);
// requestAnimFrame(animate);
// }
// 第2种是在图片加载完成的回调中执行。这仅限于不需要重复刷新的精灵、
// 如:
// sprite.texture.baseTexture.on(‘loaded‘,function(){
// renderer.render(stage);
// })
//

// 在项目中实践的时候发现用基于baseTexture的loaded事件有两个问题
// 1:如果图片加载失败怎么办?
// 2:同时加载多张图片的时候,有些没有触发loaded回调
//
// 经过实践,找到一个更加稳妥的办法
// var img = new Image();
// img.src = ‘bunny.png‘;
// img.onload = function(){
// var baseTexture = new PIXI.BaseTexture(this);
// var texture = new PIXI.Texture(baseTexture);
// var sprite = new PIXI.Sprite(texture);
// stage.addChild(sprite);
// renderer.render(stage);
// }

//批量加载图片的时候实践证明也是适用的。

//最后,请用localhost://xxxxxx的方式进浏览

细心的比较也许你会发现,我和官方的示例不相同,官方使用了requestAnimFrame( animate ),而然我这里没有用,为什么?因为我只是要显示一张图片而已,没有必要不断的去刷新舞台。requestAnimFrame( animate );这个是在精灵有动画的时候才需要用到。当然,如果不考虑性能,对一张静态的图不断的刷新也没有什么问题。

完整的示例:

var stage = new PIXI.Stage(0xFFFFFF);
        var renderer = PIXI.autoDetectRenderer(400, 300);

        document.body.appendChild(renderer.view);

        var sprite = new PIXI.Sprite.fromImage(‘bunny.png‘);
        stage.addChild(sprite);

        sprite.texture.baseTexture.on(‘loaded‘,function(){
            renderer.render(stage);
        })

        sprite.interactive = true

        stage.click = stage.tap = function(data){
            console.log(data.originalEvent.target);
            //alert(‘you hit the stage‘)
        }

        sprite.mousedown = sprite.touchstart =function(data){
            // stop the default event...
            data.originalEvent.preventDefault();
            this.data = data;
            this.alpha = 0.9;
            this.dragging = true;
            console.log(‘mousedown‘);
        }

        sprite.mouseup = sprite.mouseupoutside = sprite.touchend = function(data){
            this.alpha = 1
            this.dragging = false;
            // set the interaction data to null
            this.data = null;
            console.log(‘mouseup‘);
        };

        sprite.mousemove = sprite.touchmove = function(data){
            if(this.dragging){
                var newPosition = this.data.getLocalPosition(this.parent);
                this.position.x = newPosition.x;
                this.position.y = newPosition.y;
                console.log(‘mousemove‘)
                renderer.render(stage);
            }
        }

        //requestAnimFrame(animate);
        function animate(){
               renderer.render(stage);
               requestAnimFrame(animate);
           }

以上创建的是通过pixi创建静止的精灵,及事件邦定。这个在官方没有找到示例,特补充一下。(或许pixi就是为动画而生的,所以没有考虑这种简单的需求了)

如果需要动画效果的精灵,官方提供了多种方法。这里就不再细述了。我目前正在研究这一块,有兴趣的可以和我一起交流!

时间: 2024-11-13 08:08:54

pixijs使用教程--基础篇的相关文章

3.高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建

高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建 如果大家看了我的上一篇<2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离>文章,如果能很好的利用,那么其实已经可以轻松日抗千万级别的访问量了,但是如果业务涉及查询比较多,查询条件比较丰富,又或者我就想要查询的响应更快点,那么在mysql上面去做优化,其实比较辛苦,有没有更好的解决方案呢?答案是肯定的!它就是我们今天的主角,分布式全文搜索引擎elasticsearch. 技巧提示:mysql集群层主要

小程序Kbone开发教程基础篇02-使用kbone-ui实现一个按钮

前言 本节我们学习使用kbone-ui框架的使用,kbone-ui是微信推出的支持小程序和Vue框架的多端UI库,我们首先完成Button的使用. 一.基础知识 1.kbone-ui简介 kbone-ui 是一个能同时支持 小程序(kbone) 和 vue 框架开发的多端 UI 库.kbone 框架是用来对齐 Web 和 小程序多端的一个解决方案.在使用时,还是需要注意 小程序和 Web 之间的开发差异性,为了磨平这块内容,提供 kbone-ui 组件库.通过,kbone-ui 来磨平大部分的实

持续集成之jenkins实践教程 基础篇 4 集成redmine

作为持续集成的利器Jenkins已经得到了广泛地应用,仅仅作为一个工具,Jenkins已然了了自己的生态圈,支持其的plugin更是超过1300+.在实际中如何使用以及如何更好地使用jenkins,一直是大家在实践并讨论的.本系列文章将会从如何使用jenkins方面对一些细节进行总结和整理,这篇文章将会介绍如何在Jenkins中实现与redmine的集成 事前准备 只要有jenkins即可,没有的可以使用Jenkins官方的镜像或者安装包,或者使用Easypack中封装的基本一致的Jenkins

版本管理之gitlab实践教程 基础篇 3

comment是版本管理中非常重要的内容,尤其是在经年累月的大型项目中,铁打的项目,流水的SE,哪怕只言片语的留下,对后来者问题的对应很多时候都能起到重要作用,这篇文章用来讲解git中如何进行comment的管理. 为什么需要comment 为什么需要comment,理由有很多:规范,可读,可维护,bug分析等等.很多人可能在新入一个大型项目时候进行原因调查时候都有很多障碍,尤其是业务不清晰,然后再加上经年累月的bug修改,导致目前的代码已经面目全非的可能性很多,如果有点comment,那就是绝

mysql集群搭建教程-基础篇

       计算机一级考试系统要用集群,目标是把集群搭建起来,保证一个库dang了,不会影响程序的运行.于是在孟海滨师哥的带领下开始了我的第一次搭建mysql集群,首先看了一些关于集群的资料,然后根据步骤一步步的整,遇到了一些问题,在这里把我遇到的问题以及解决方法分享出来. [是什么]         集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术.         MySQ

给深度学习入门者的Python快速教程 - 基础篇

实在搞不定博客园的排版,排版更佳的版本在: https://zhuanlan.zhihu.com/p/24162430 Life is short, you need Python 人生苦短,我用Python -- Bruce Eckel 5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明确.Python作者是荷兰人Guido van Rossum,1

Cadence PSpice 教程 基础篇(转载)

一.PSpice 的工作流程 二.PSpice A/D基本分析内容 在选择分析方法前需要绘制电路原理图, OrCAD 统一由 Capture 窗口进行输入和调 用 PSpice 分析.在使用 PSpice 时绘制原理图应该注意的地方. 1. 新建 Project 时应选择 Analog or Mixed-signal Circuit 2. 调用的器件必须有 PSpice 模型 首 先 , 调 用 OrCAD 软 件 本 身 提 供 的 模 型 库 , 这 些 库 文 件 存 储 的 路 径 为

小程序Kbone开发教程基础篇1-开发环境搭建

前言 微信官方推出了统一Web前端和小程序的框架-- Kbone,使用Kbone可以将web代码几乎不用修改就可以运行在小程序上,完美解决小程序和web不同框架,需要维护两套代码的问题,本文我们开始一窥Kbone庐山真面目. 一. 基础知识 1.Kbone简介 微信小程序的底层模型和 Web 端不同,我们想直接把 Web 端的代码挪到小程序环境内执行是不可能的.kbone 的诞生就是为了解决这个问题,它实现了一个适配器,在适配层里模拟出了浏览器环境,让 Web 端的代码可以不做什么改动便可运行在

ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map

原文地址: ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/arcgis_mobile/article/details/8124005 通过上面章节,我们已经了解如何配置一个ArcGIS Runtime for Android开发环境,下面我们将介绍如何使用Eclipse创建一个ArcGIS移动项目Hello W