zoukankan      html  css  js  c++  java
  • pixi.js 总结

    我的博客简单简洁 可能表达不清. 如有想法, 敬请留言.谢谢! 群:881784250

    https://github.com/ccaleb/endless-runner/tree/master/javascript-pixi/pixi.js-master

    1:pixi.js的优点

      代码简单,性能高效,扩展性强

      PixiJS的性能优势, pixi.js专注于渲染,在js2d游戏引擎中,其性能是相当彪悍的。(官网上说最强) 见测试 https://www.goodboydigital.com/pixijs/bunnymark/?base=pixijs&category=bunnymark

      PixiJS有着"简单"的代码, 友好的API,loader.add().add().load(),    label.centerXY()

      PixiJS易扩展,能发挥你无穷的想象力通过装一些插件,可以更方便的实现一些功能.龙骨功能,透视功能,都过插件都可以实现

      PIXIJS一直在维护,一直在更新, 其模块化的思想相当先进.

    2 核心是Sprite. PIXI.Sprite->PIXI.Container->PIXI.DisplayObject

      Sprite对象是渲染到屏幕的所有纹理对象的基础,能轻轻松松改变纹理,只要.sprite.texture = ...

      Sprite默认是不响应点击等事件的,必须 Interactive

      怎样创建srptie呢?

      new Sprite(texture?)         常用方式

      Sprite.from(source);         快捷方式. @param source, 可以是url地址,canvas,纹理

      Sprite.fromFrame(key);    快捷方式 @param key 为json中的key,或加载时定义的key

      Sprite.fromImage(url, crossorigin?:, scaleMode?:);  快捷方式  @param url,不解释

       常用属性pivot, anchor, position, scale,texture 是不是一看就知道是干嘛的.

    3 Pixi只做三件事  Pixi helped me with 3 main things: 

    • loading and displaying of assets
    • interactivity
    • game loop

    4 一些有用的东西

      可用命令行编译spritesheet  npm install sprietsheet -g

       app.ticker()             loop及time  

       处理九宫格    Pixi.mesh.NineSlicePlane(texture, x, y, width, height)

       pointer事件(鼠标和touch)   mouse事件(鼠标) tap事件(touch),  比较好的是, sprite.on('pointerdown', fun), fun中this会是sprite

       获取全局坐标         app.renderer.plugins.interaction.mouse.global

       PIXI inspector      An extension to the Chrome DevTools for inspecting Pixi.js games/applications.

       loader.add(..........).on('progress", loadProgress).load(complete)  加载完成后的资源是保存在PIXI.loader.resources中,键值就是url或设置的key

       PIXI.util里面包含了一些很有用东西. 比如isMobile,EventEmitter,TextureCache......

       PIXI.extras需面也包含了一些有用的东西 例如 AnimatedSprite, BitmapText, Tiling等等,例如Tiling处理一些滚动效果是很高效的

    5 pixi中常见的问题:

      spriteA可以添加spriteB,spriteA宽高为1,这时需要用Container, sprite的宽高取决于sprite中纹理的宽高.

      dis.stage为空, 需要注意.应用 app.stage

      graphics 是继承容器的, 添加graphic有效没?

     ui的问题,纯粹的用sprite,txt处理不复杂的界面搓搓有余.但是处理scroller和list是有点困难的.   用第三方ui框架 spown,ezgui都是有点问题的,通过egret编辑界面.然后导成pixi.js代码...

    6 其他资料

      多纹理渲染   http://phaser.io/tutorials/advanced-rendering-tutorial/part2

     下面是老外的演讲的一些how

     Things Audience Members Will Learn   观众会学到的东西

    • How to set up and get Pixi.js app running    怎样让pixi运行
    • How to use its basic features                        怎样用它的基本功能 
      • Sprites
      • Graphics 
      • Interaction
    • How to use the more advanced features     怎样用它的先进功能
      • Filters 
      • Custom Filters
      • Particles
      • Meshes
      • Ropes
      • RenderTextures
      • Exporting Data
    • How to optimise your scene for Pixi.js      怎样优化

    性能测试:   multi texture batching         https://phaser.io/tutorials/advanced-rendering-tutorial/part2

                   pixi.js > phaser3 > phaser2  https://github.com/themoonrat/webgl-benchmark

    线上例子   欢乐球球 是pixi.js和three.js开发的~

     var e = canvas.getContext("webgl", {
                    alpha: !1,
                    antialias: !1,
                    preserveDrawingBuffer: !1,
                    premultipliedAlpha: !1
                });
                e.colorMask(!0, !0, !0, !0), this.renderer3D = new THREE.WebGLRenderer({
                    context: e,
                    canvas: canvas,
                    premultipliedAlpha: !1,
                    alpha: !1
                }), this.renderer3D.setPixelRatio(window.devicePixelRatio), this.renderer3D.setSize(window.innerWidth, window.innerHeight), 
                this.renderer3D.shadowMap.enabled = a.default.enableShadow, this.renderer3D.autoClear = !1, 
                this.state3D = this.renderer3D.state, a.default.stageWidth = canvas.width, a.default.stageHeight = canvas.height, 
                SPE.valueOverLifetimeLength = 3, (0, s.setSharedCanvasSize)(canvas.width, canvas.height), 
                PIXI.settings.isLittleGame = !0, PIXI.settings.MAX_TEXTURES = 4, PIXI.settings.MAX_VERTEX_ATTRIBS = 16, 
                PIXI.settings.RESOLUTION = 1, PIXI.settings.SCALE_MODE = PIXI.SCALE_MODES.LINEAR, 
                PIXI.settings.CAN_UPLOAD_SAME_BUFFER = !0, PIXI.settings.SPRITE_BATCH_SIZE = 256, 
                PIXI.settings.GC_MODE = PIXI.GC_MODES.MANUAL, PIXI.settings.MIPMAP_TEXTURES = !1, 
                e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL, !1), this.pixiApp = new PIXI.Application({
                    view: canvas,
                    context: e,
                     window.innerWidth,
                    height: window.innerHeight,
                    resolution: window.devicePixelRatio,
                    forceCanvas: !1,
                    clearBeforeRender: !1,
                    roundPixels: !1,
                    transparent: !1,
                    legacy: !0,
                    sharedLoader: !0,
                    autoStart: !1,
                    sharedTicker: !0
                }), this.pixiApp.ticker.autoStart = !1, this.pixiApp.ticker.stop(), this.pixiApp.removeRenderTick(), 
    

      

  • 相关阅读:
    MySQL8.0.x免安装配置
    Java中锁的实现与内存语义
    并发中的volatile
    「LOJ #2163」「POI2011」Tree Rotations
    「CodeChef REBXOR」Nikitosh and xor
    「Codeforces 429D」Destiny
    「Luogu P2042」「NOI2005」维护数列
    「SPOJ SEQ」 Recursive Sequence
    「GCJ 2008 Round 1A C」numbers
    「LOJ #6016」崂山白花蛇草水
  • 原文地址:https://www.cnblogs.com/honghong87/p/9942768.html
Copyright © 2011-2022 走看看