From 0c9da1dc335bd8f005d1b0cd806ea405b9620260 Mon Sep 17 00:00:00 2001 From: Rex Date: Wed, 19 Nov 2014 15:08:39 -0500 Subject: [PATCH] added first two examples --- README.md | 236 ++++++++++++++++++++++++++++- examples/03_spriteFromImage.html | 59 ++++++++ examples/images/cat.png | Bin 0 -> 6193 bytes examples/images/screenshots/02.png | Bin 0 -> 6988 bytes examples/images/screenshots/03.png | Bin 0 -> 6957 bytes examples/images/screenshots/04.png | Bin 0 -> 14637 bytes 6 files changed, 290 insertions(+), 5 deletions(-) create mode 100644 examples/03_spriteFromImage.html create mode 100644 examples/images/cat.png create mode 100644 examples/images/screenshots/02.png create mode 100644 examples/images/screenshots/03.png create mode 100644 examples/images/screenshots/04.png diff --git a/README.md b/README.md index fc8da27..a018c8d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,8 @@ Introduction Pixi’s is an extrmely fast 2D sprite rendering engine. What does that mean? It means that it helps you to display, animate and manage -interactive graphics so that it's easy for you to make games using +interactive graphics so that it's easy for you to make games and +applications using JavaScript and other HTML5 technologies. It has a sensible, uncluttered API and includes many useful features, like supporting texture atlases and providing a streamlined system for animating @@ -62,9 +63,7 @@ Unix [in this video](https://www.youtube.com/watch?feature=player_embedded&v=cX9ASUE3YAQ) and, when you're finished, follow it with [this video](https://www.youtube.com/watch?v=INk0ATBbclc). You should learn -how to use Unix -- it only takes a couple of hours and is way fun and easy than working - with a windows-based operating system. +how to use Unix it only takes a couple of hours and is way fun and easy than working with a windows-based operating system. But if you don't want to mess with the command line, try the Mongoose webserver: @@ -195,7 +194,7 @@ renderer = PIXI.autoDetectRenderer( {antialiasing: false, transparent: false, resolution: 1} ); ``` -That third argument is optional - if you're happy with Pixi's default +That third argument (the options object) is optional - if you're happy with Pixi's default settings you can leave it out, and there's usually no need to change them. (But, if you need to, see Pixi's documentation on the [canvas render](http://www.goodboydigital.com/pixijs/docs/classes/CanvasRenderer.html) @@ -230,6 +229,233 @@ You can force WebGL rendering like this: renderer = new PIXI.WebGLRenderer(256, 256); ``` +###Pixi sprites + +In the previous section you learned how to create a `Stage` object. +You can think of the stage as the main container for all the visible +things in your game. Whatever you put inside the stage will be +rendered on the canvas. + +So what do you put on the stage? Special image objects called +**sprites**. Sprites are basically just images that you can control +with code. You can control their position, size, and a host of other +properties that are useful for making interactive graphics. Learning to make and control sprites is really the most +important thing about learning to use Pixi. If you know how to make +sprites and add them to the stage, you're just a small step away from +starting to makes games. + +Pixi has a `Sprite` class that is a versatile way to make game +sprites. There are three main ways to create sprite images: + +• From a single image file. +• From a sub-image on a **tileset**. A tileset is a single, big image that +includes all images you'll need in your game. +• From a **texture atlas** (A JSON file that defines the size and position of an image on a tileset.) + +You’re going to learn all three ways, But, before you do, let’s find +out what you need to know about images before you can display them +with Pixi. + +#### Loading images into the texture cache + +Because Pixi renders the image on the GPU with WebGL, the image needs +to be in a format that the GPU can process. A WebGL-ready image is +called a **texture**. Before you can make a sprite display an image, +you need to convert an ordinary image file into a WebGL texture. To +keep everything working fast and efficiently under the hood, Pixi uses +a **texture cache** to store and reference all the textures your +sprites will need. The names of the textures are strings that match +the file locations of the images they refer to. That means if you have +a texture that was loaded from `“images/cat.png”`, you could find it in the texture cache like this: +``` +PIXI.TextureCache["images/cat.png"]; +``` +The textures are stored in a WebGL compatible format that’s efficient +for Pixi’s renderer to work with. You can then use Pixi’s `Sprite` class to make a new sprite using the texture. +``` +var texture = PIXI.TextureCache["images/anySpriteImage.png"]; +var sprite = new PIXI.Sprite(texture); +``` +But how do you load the image file and convert it into a texture? You +can use Pixi’s built-in `AssetLoader`. Here’s how to use it to load an +image and call the `setup` method when it’s ready to create the sprite: +``` +var loader = new PIXI.AssetLoader(["images/cat.png"]); +loader.onComplete = setup; +loader.load(); + +function setup() { + + //Create the `cat` sprite from the texture + var texture = PIXI.TextureCache["images/cat.png"], + cat = new PIXI.Sprite(texture); +} +``` +You can load multiple images at single time by listing them in the `AssetLoader`'s argument array, +like this: +``` +var loader = new PIXI.AssetLoader( + ["images/imageOne.png"], + ["images/imageTwo.png"], + ["images/imageThree.png"] +); +``` +(The `AssetLoader` also lets you load JSON files, which you'll learn +about ahead.) + +Alternatively, you can use Pixi’s `Texture.fromImage` method to load +and create the texture in a single step. +`fromImage` will load the image for you automatically from its file location if it’s not already in the cache. +``` +var texture = PIXI.Texture.fromImage(“images/cat.png”); +``` +That means if you want to be lazy, you don’t need to pre-load the +image. However, +loading and creating a texture using `fromImage` like this doesn't allow you to make sure all you images have +loaded before the game or applications starts. If you try and access +or use a sprite in your game code before the image has fully loaded, things won't work and you're going to get errors. So +my advice is: don't use `fromImage`, just pre-load all the images +you'll need with the `AssetLoader`. + +####Displaying sprites + +After you've loaded an image, and converted it into a sprite, there +are two more things you have to do before you can actually see it on +the canvas: + +1. You need to add the sprite to Pixi's stage with the `stage.addChild` method, like this: +``` +stage.addChild(cat); +``` +The stage is the main container that holds all of your sprites. + +2. You need to tell Pixi's `renderer` to render the stage. +``` +renderer.render(stage); +``` +None of your sprites will be visible before you add them to the stage, +and then tell the `renderer` to render the stage. + +Before we continue, let's look at a practical example of how to use what +you've just learnt to display a single image. In the `examples/images` +folder you'll find a 64 by 64 pixel PNG image of a cat. + +![Basic display](/examples/images/cat.png); + +Here's the All the JavaScript code you to load the image, create a +sprite, and display it on Pixi's stage: +``` +//Create the Pixi `Stage` and `renderer` +var stage = new PIXI.Stage(0x000000) +var renderer = PIXI.autoDetectRenderer( + 256, 256, + {antialiasing: false, transparent: false, resolution: 1} +); +document.body.appendChild(renderer.view); + +//Use Pixi's built-in `AssetLoader` to load an image and call +//the `setup` function when its ready +var loader = new PIXI.AssetLoader(["images/cat.png"]); +loader.onComplete = setup; +loader.load(); + +function setup() { + + //Create the `cat` sprite from the texture + var texture = PIXI.TextureCache["images/cat.png"], + cat = new PIXI.Sprite(texture); + + //Add the cat to the stage + stage.addChild(cat); + + //Render the stage + renderer.render(stage); +} +``` +When this code runs, here's what you'll see: + +![Cat on the stage](/examples/images/screenshots/02.png); + +Now we're getting somewhere! + +####Positioning sprites + +You can in the previous example that has been cat is added to stage at +the top left corner. That's at a `x` position of +0 and a `y` position of 0. You can change the position of the cat by +change the values of is `x` and `y` properties. Here's how you can center the cat in the stage by +setting its `x` and `y` property values to 96. +``` +cat.x = 96; +cat.y = 96; +``` +You can add these two lines of code anywhere inside the `setup` +function, after you've created the sprite. +``` +function setup() { + + //Create the `cat` sprite from the texture + var texture = PIXI.TextureCache["images/cat.png"], + cat = new PIXI.Sprite(texture); + + //Change the sprite's position + cat.x = 96; + cat.y = 96; + + //Add the cat to the stage so you can see it + stage.addChild(cat); + + //Render the stage + renderer.render(stage); +} +``` +These two new lines of code will move the cat 96 pixels to the left, +and 96 pixels down. Here's the result: + +![Cat centered on the stage](/examples/images/screenshots/03.png); + +The cat's top left corner (its left ear) represents is `x` and `y` +registration point. To make the cat move to the left, increase the +value of its `x` property. To make the cat move down, increase the +value of its `y` property. If the cat has an `x` of 0, it will be at +the very left side of the stage. If it has a y property of 0, it will +be at the very top of the stage. + +Sprites also have `width` and `height` properties that you can set. +Here's how to give the cat a `width` of 80 pixels and a `height` of +100 pixels. +``` +cat.width = 80; +cat.height = 120; +``` +Add these two lines of code to the `setup` function, like this: +``` +function setup() { + + //Create the `cat` sprite from the texture + var texture = PIXI.TextureCache["images/cat.png"], + cat = new PIXI.Sprite(texture); + + //Change the sprite's position + cat.x = 96; + cat.y = 96; + + //Change the sprite's size + cat.width = 80; + cat.height = 120; + + //Add the cat to the stage so you can see it + stage.addChild(cat); +} +``` +Here's the result: + +![Cat's height and width changed](/examples/images/screenshots/03.png); + +You can see that the cat's position (its top left corner) didn't +change, only its height and width. + + diff --git a/examples/03_spriteFromImage.html b/examples/03_spriteFromImage.html new file mode 100644 index 0000000..d50e59e --- /dev/null +++ b/examples/03_spriteFromImage.html @@ -0,0 +1,59 @@ + + +Make a sprite from and image + + + + + diff --git a/examples/images/cat.png b/examples/images/cat.png new file mode 100644 index 0000000000000000000000000000000000000000..708d8a3fd80f22748860cbd0694213425b603858 GIT binary patch literal 6193 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 P00000NkvXXu0mjfGh@tC literal 0 HcmV?d00001 diff --git a/examples/images/screenshots/02.png b/examples/images/screenshots/02.png new file mode 100644 index 0000000000000000000000000000000000000000..b065571d1616cfcdd033de410f18ed72ad68b3f1 GIT binary patch literal 6988 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 NK+;N5i=X zNGXwK=w@g4%f7pNc0c{ket6Dvp1kMW=ehU(?)^pRYO9iyfJguU0J*xF5(EIaLyB)C z_wV9oBAwR1;yVT}Wg{40%9H>h92L(aPG#dnrI7|_)$&;-JsUpnu4)ti(Ylq6-a7Tws!U0( zBF+=m==^6|cB5%AE8g6=Pue!hG0e5e&i$X@y&{;9L?zsFAwZM+C$_%;q(`;BzgDPn zxjs=~G%v4v?uD@J*M*?6uCD{#7F&|?Av_F#Up8^=lmN^70AT_E{oU^Z;!1)kD;jrh z-C!VLnllKXj^aNS0AzOn;Q)Xl;4M4g`+x5L@56uW!r%5UJ%qpdpMw7(2|xY6N&43x z!fOhzh%%7D83|Mgbqy?mrl+SDjcpi!lOPxaj6pCPL5O^qg1j6z)q||X(zt#Z^S!yb zxsHyG&#tj!OTuXb6pdzR=&XllLNBLFY^U|3(c!KSvCFrePukntnVF}`sI7WHRQCxG z2t*G7jQ0@Cn>6b1oRE;P&#$nsaGKg9{Gw=fhg*l}eK-*jQBRsq3%OuQQE}Dyl2@|x z^!J7qniG;);gg;$-)4^K5Mj6r1B-V`Qc{{`o%To(mI{b(|xLhzJDvuvp3}+rq0d~p#;$|I-y@2 zuUa|z{X2Pb(&BoP9<{l0165SKMx8F$4^(rGfpdZH`5ZqCZyg^wh^7}1eE#wU=PNxb zCm|+AC=+K}!Wt410xe2~)Q>g0RA z_G)HkCgmoHn5FJ^P->5IUM+84Eht=Go`WTJjGFhImt=`{K8Nyy5~zmA=D3@VJ(qEF zGiutY=w429QQHbGo~Xhg@0Rdh+m~H)KhP$ID5MQ83L-;pmL7#WJO}Fqud1sn0QRs&G^9zJ z###z1Dc?T&hPNCC=wA} zl($;;AXmKoO(z5w=r+n^WJR=HD!#c|Lo<-?Q(~PE1wV^{HOt$i1&mjUL>d9L;{D?RYNeI??l#?>&GF zb}PJGgLQ6Vy}S-Qrz-G4s%MUbx%NEAzM-D0uw9*T!B+L1;>A6fi8eSt1B>p7fa}`Q_(u{fF&pzPI zmf~<05XjZd&E5ul#37eZM=7;>c$=JSGzy3xQKV8UU=9q7WAVR4sw?mwVe0aM6@!@f z?Mqu3&Ub|21KCZB@aH&Lmtn@9NS{R+br_{j2x3d~NEd#CQ__%JQ+Z}$=S{fSt!^4z}%*kC<#TCTgkmll%CjfW>ah6xCngqHnjv$yA>d9VQTQ?NrevG{*6E1eo5PM|q? zL{>i`!Z}aZnLW2bITjML%o`3#N=VSx)%}`EXX6DAZK!+RZyh@o!9EK3F;|9l&b5$S z0bih6cou1#-g9OzYHMqK9{A0q7(=hf{YcTWM?ht}W9-?O0d@cAN{!~j#`zZiQ`eM! z+j64{Sz$4;iP^ES*;!SL-X!*P%N~|wm}F~fySBCl+xw`JlbM;hK9se$v0=qPhXtRM zsoj-jPrbg0m@czYG&2*BB9(7@cO(poK3(wNJK33ai~BM#@W#uls=8W;??LH!8Y34M zqqn$3x@O*1Ep}?kXM4K*-Mc&DEzY8!8yXrfE{V(1pYu#^`$T7=BUQ9$OUF(emz2}UR;XskcQ7a z?upFHV@}i`Ny(c)oNi+;dpLqxMpX)0WN|06?~cyTim#QBbEqMi`uci4m&3Vw∓6 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