Popular Content

Showing content with the highest reputation since 12/27/20 in Posts

  1. 1 point
    Hello! When I load a texture using app.loader.add() or PIXI.Texture.from(), it's saved in the Texture Cache so the next time the client won't make a request to get the image. This is all I know. > So instead of saving a texture into a variable, is it a good idea to call PIXI.Texture.from() every time as it will take it from the cache further times anyway? Or check PIXI.utils.TextureCache? Or what else way is good? > If I change the texture properties (width, defaultAnchor etc.), what will this affect other than exactly this instance of the texture obtained with PIXI.Texture.from()? (For example, I loaded a texture, increased its width and what will be its width the next time I load it using PIXI.Texture.from()?) > If I change the texture.baseTexture properties, what will this affect other than ex > How baseTextures work in the Cache at all? > What if I want to reload the image from the server when it's already saved in the cache?
  2. 1 point
    Hello! I've developed an open source application called Mantis Viewer that is being used by a few scientific institutions to visualize and analyze microscopy data. We started this project a couple of years ago, and it's built using TypeScript, Electron, React, MobX, and PixiJS. Currently, it's being used by the institute I work for to analyze data from our clinical trials, and is also being used by labs at Stanford and UCLA to develop new microscope technologies. Recently, a few users have been running into an issue where the WebGL context gets lost, and the renderer then fails to load (almost) everything after that. I've started to debug this and have built out some code to simulate a WebGL context loss on the canvas and recover. The code I've written works for a simulated context loss using webgl2Context.getExtension('WEBGL_lose_context')?.loseContext(), but fails to recover in real world examples that are, unfortunately, difficult to replicate. I'm the sole developer on this, and this project is my first Electron, React, and PixiJS project. I've posted this as an issue on the PixiJS GitHub as I think it might be bug, but it's entirely possible that I'm using something (or lots of things) incorrectly that's causing this issue. I'm open to any feedback for things I could change in the linked code that could improve this issue, or anything else that I haven't run into yet for that matter. This is what an image rendered in the application with annotations looks like initially: Immediately after this type of WebGL context loss and recovery, everything fails to render except for the text of the legend in the top left. If the user switches to a different set of images, the image sprites will load again, but the legend background (graphics object), zoom inset (graphics object), cell annotations (graphics object), and regions of interest (sprite created from graphics object pixel extract) still won't load. If they switch back to the first set of images where the context was originally lost, those image sprites will still fail to load. Unfortunately this bug is pretty difficult to reproduce and might be dependent on the graphics capabilities of the system. I've only been able to reproduce this bug once on my system, but I have some users who are able to reproduce it within a couple of minutes. If anyone is interested in trying to reproduce it, I'd be happy to share a few images that you can play with and one of the test builds. The project is open source, and I'm happy to share the code that's failing. Most of our image rendering and interaction code is in this ImageViewer React component, which links to a branch where I'm actively working on debugging this issue. Currently the function that deals with handling a WebGL context loss is called handleWebGlContextLost and is on line 600 of ImageViewer. The other bulk of PIXI related code can be found in the GraphicsHelper module.
  3. 1 point

    Syncing audio to animation

    quick update- I made a little timing tester and found that after following some of the advice in this thread there still seems to be about 80ms of lag, with that number still being pretty inconsistent (sometimes after refreshing the lag would go up with I think the largest being around 300ms). Some of the things I was able to figure out after experimenting with it: - I am definitely using the pixi sound library, and it does appear that webaudio is available in the browser I've been testing in - the context.audioContext.currentTime is globally available from the PIXI.sound.Sound object, though it doesn't look like it starts at 0 when the song starts playing, so I'm not totally sure what this signifies and I haven't been able to find documentation on it unfortunately Unfortunately I didn't keep track of every variation that I tried, but this is my current approach: const songInstance = resources.song.sound; songInstance.play(); let millisecond = 0; app.ticker.add(() => { if (songInstance.isPlaying) { millisecond += app.ticker.elapsedMS; handleHits(millisecond, pressedKeys, chart); track.y -= app.ticker.elapsedMS; } }); I'm not happy with this solution yet, but it's still hard for me to tell where exactly the desync is being introduced, and it's honestly likely there are other factors influencing it. I'm going to take some time really diving into this for a while, but I'll definitely report back with what I learn. Thanks for getting me in the right direction everyone!
  4. 1 point
    MODs can close this thread, I solved it loading all at beginning and reducing numbers of objects needed.
  5. 1 point
    Hi, maybe you can try with tilingsprite, you can simulate very well the spinning reel. Kind regards.
  6. 1 point
    I did this with what I learned. Hope it helps
  7. 1 point

    Changing texture size

    Wait, what? PIXI Matrix is not immutable? Ah, my bad. g.lineTextureStyle({width:40 , texture:texture , alignment:0, matrix: PIXI.Matrix.IDENTITY.clone().scale(the scale you need)});
  8. 1 point

    Changing texture size

    I think he meant this: g.lineTextureStyle({width:40 , texture:texture , alignment:0, matrix: PIXI.Matrix.IDENTITY.scale(the scale you need)}); And you can calculate the scale like this: scaleX = rectWidth / TEXTURE_SIZE scaleY = rectHeight / TEXTURE_SIZE
  9. 1 point

    Changing texture size

    pass the matrix in method , with a scale
  10. 1 point

    [WIP] Raycasting.js Engine

    Raycasting.js Hey everyone, So this is my first ever post in this forum, and I'm excited to share with you my year long endeavour of building a Wolf3d-esque engine from scratch. This is my first attempt at game development in my spare time aside from my full-time job. Links Live Demo Github Controls Movement: W, A, S, D Free-look: Arrow keys or the mouse* Change elevation: Q, E or the mouse* wheel Shoot: Primary mouse* button, the SPACE key Interaction with the doors: ENTER * Make sure to activate mouse controls first by clicking on the canvas. Hit me up with your thoughts/feedback and I will be more than happy to giving some insight into the engine internals and other technicalities in the replies if anyone's interested. PS: Please note that this is still mostly a WIP and regard it as a mere tech demo, as there is still no major gameplay loop implemented in.
  11. 1 point
    There "workarounds": 1. wait for v6 and convertion of all modules. 2. throw out webpack a, rollup or whatever you use, for typescript use <reference types= ...>
  12. 1 point
    Ok this works now!
  13. 1 point
    > Dunno about WebGL libraries, I come from Unity WebGL has less features than whatever unity has access on low-level, in webgl we have to make extra steps to get backbuffer. Also, PixiJS is the only lib that is exposing backbuffer in a plugin, there's also AwayJS but its only used internally there. > Wait, so it's not pure Pixi? Its here: https://github.com/pixijs/pixi-picture/tree/master/dist Its a hack over filterSystem, and it wasnt approved to be merged in main pixi repo because by default we used "RGB" format for main backbuffer and it's not easy to inform users that certain feature works only if there's a filter on top of everything. I think its likely to be merged in v6.
  14. 1 point
    > Seemingly simple task, yet so unclear and confusing in Pixi. OK, which webgl libraries/frameworks give you access to backdrop? https://pixijs.io/examples/?v=v5.3.7#/plugin-picture/displacement.js - works for 5.3.7 release, doesnt work for 6.0-rc (dev) because pixi-picture wasnt modified to take into account changes in systems. Do you need me to update it? btw, im going to update it anyway, because i found out that it should work even without extra filters if renderer is created with "transparent:true", and it has same format as rendertextures, RGBA
  15. 1 point


    Guys, how do you improve your immunity in the era of coronavirus? What vitamins do you take? Are you on a diet that helps you maintain your immune system?
  16. 1 point

    PIXI / WebGL Theory

    Great. I think I just needed confirmation that I am not botching anything. Thanks!
  17. 1 point

    Pixi.js vs Fabric.js

    Pixi.JS has better rendering performance. Since you are developing a simple game, you don't need that much power. So, for your use case, you can stick with Fabric.js and save time by not developing all the features by yourself.
  18. 1 point

    Pixi Still Being Developed?

    Thanks Ivan. Very good to know. Ray
  19. 1 point

    Pixi Still Being Developed?

    https://github.com/pixijs/pixi.js/commits/dev We are almost at new major release, v6 Things were slow last half of year because people were very busy, but now its good. Support didnt stop
  20. 1 point
    The boot.json file is just used by the Phaser 3 Examples site, you don't need it for your own projects. All you need is the entry point, the html you pasted above and your source files.
  21. 1 point

    Remove or Destroy Sprite

    Mhm, thanks, I thought there was a standard for these kind of procedures, but I guess it's left to the dev what's best for himself. Thanks for the advice.
  22. 1 point

    Where to release??

    Yes. You are right. So i was considering again and i think that one of the best audience floats in Kongregate/ArmorGames - they are gamers looking for new games and want to play instant games. Checked ArmorGames homepage and i see that in the last 40 days only 16 new games appeared and all they are on the front page. So, my game would stay there for 40 days. All these new games have 15-70k plays. So its possible to get like ~20k registrations in the first month. And that would be enough for a full server. Not too much, not too few. I have wrote a letter to ArmorGames, trying to reduce their cut of 50% to anything like 30-40 like in Kongregate. With ArmorGames i won't need to spend anything for marketing. They didn't answer yet, so i'm not yet guaranteed my game will be released there. So i'm still looking for other options. But i think i will start only with 1 option for the first year.
  23. 1 point

    Where to release??

    So. I am working on my HTML5 MMO-RTS for 5 years and its almost ready. I am wondering what next? The game is cross browser, cross device, fully responsive no matter or its 3000px x 300px or 300px x 3000px - all possible screen sizes and im very proud of it I have released my game before 2 years in Kongregate just to test, expecting like ~2000 registrations. But instead i got about 50.000 registrations. The game was poorly rated as it was like a buggy pre-alpha and people flew away. So, now i'm prepared to launch as a normal alpha or something like pre-beta. My next plan is to create a video, update tutorial and purchase like 20 unique play-testers who would give me some feedback and check how does it load to them and whats about the start. So, for the next ~2 months i still have what to do. And then - i want to release. To some serious publisher. Kongregate was OK, but i am unable to re-release the same game. Next option - ArmorGames. They want 50% cut. Thats ok for me. My game would be visible in their 1st MMO's page for like 2 years. But wondering that their site is flash-games based and probably not that popular as before. Next option - Facebook instant games. Dont know much about it. And as i expect, i would need to put like 2000$ for marketing in Facebook to get enough attraction - and thats ok. (i already spent for the game like 13000$) Next option - .io game publishers. As i seen somewhere, that they take no cut. Checked games there, many of them require flash or are hardware-heavy and unplayable. So my fresh smooth game would fit in there good probably. But i think not enough visitors.. Next option - android/ios APP. I can easily transform my web game into android app. But i dont know actually or it would be that easy as the game is quite complex and maybe would like to start with having it as iframe rather than an APP. Next option - my own website publishing. So i would have to market it in FB, gogle, youtube and make an attractive website, what will prolong the release. and i want it faster. Next option - other HTML5 publishers similar to Kongregate/ArmorGames. But i want probably start with 1, so the release would be faster. And one where i would have less cut and cheaper marketing. So, do you have any experience or opinion what should i do? Im quite confused as all these options have their cons and pros. and dont know what would be the best choice.
  24. 1 point

    Remove or Destroy Sprite

    It's by design, because I may have some children that I want to add to one parent one moment, then to another parent the next. If you went through each child, and called destroy, then that child will automatically remove itself from the parent, so maybe that's the better way to go?
  25. 1 point
    We are very excited to announce the release of support for Basis Texture Compression in the PlayCanvas Editor! ✅ Low VRAM utilization ✅ Tiny file sizes ✅ Fast download times ✅ Fast encode/decode times Read more at: https://blog.playcanvas.com/basis-texture-compression-arrives-in-playcanvas/ Don’t forget to give us a like on the tweet too! 👍
  26. 1 point
    Happy New Year everyone. To kick off 2021, I thought I would announce a little competition to submit the best PR in January to the open source PlayCanvas WebGL game engine! $1000 prize money. See the Twitter announcement here: For inspiration, check out some of the previously merged PRs in the repo: https://github.com/playcanvas/engine/pulls?q=is%3Apr+is%3Aclosed A particularly cool submission from the last month or two was area lights: https://github.com/playcanvas/engine/pull/2535 But the PR can be anything: Bug fix Documentation improvement/addition Refactor New feature Feel free to get creative. Submissions are due by midnight on Jan 31st and I'll announce the winner on 1st Feb. Good luck!
  27. 1 point

    Anyone using GameMonetize.com ?

    The eCPM and CTR is too low. Too hard to earn money on GameMonetize.com. The only good of them is that they pay on time.
  28. 1 point

    Anyone using GameMonetize.com ?

    Its okay. Customer support is terrible and the reports/analytics page is terrible too. However people have been sharing here that they pay on time which is a big plus.
  29. 1 point
    I'm not aware of problems that can be solved with drawElementsInstanced in vanilla pixijs. I only know one case: many animated objects consisting of several quads with your own shaders. Others , well, its just to make buffer smaller, like i did in my experiment with candles&plot: https://github.com/gameofbombs/pixi-candles/ and even then i had to make a fallback in case user doesnt have instanced draw (on some mobiles): https://github.com/gameofbombs/pixi-candles/blob/master/src/Bars.ts#L203 , maybe its not the case for you because you are targetting PC's
  30. 1 point
    An interesting idea, we look forward to continuing!
  31. 1 point

    Photorealistic Skydome for Babylon

    Using LINEAR_NEAREST on mainTexture makes the line artifacts go away: https://www.babylonjs-playground.com/#11GAIH#110
  32. 1 point
    This is big. The least estimation for all that is a year. Q1 We are working on new camera. Several people have custom implementations in their game , and if you look at issues made by https://github.com/pixijs/pixi.js/issues/created_by/dev7355608 - yeah, its required for DnD stuff. "renderer.render(... transform <-- this param)". Q2 and related to filters: its possible to cache pre-rendered, i use it in TheHouseHold, but I didnt move it to pixi plugin yet. Hope to have it in 6 months or so Q3. Sounds like shape-cache im doing in https://github.com/gameofbombs/pixi-blit . Beware, there are many bugs and only two examples. However its being used in https://www.facebook.com/playthehousehold/ which is biggest pixijs game at the moment, but i havent move some fixes from it back to pixi plugin. Q4. pixi-tilemap is just a generated mesh, it doesnt even have high-level algo - user has to write it Even then, your textures are different which makes pixi-tilemap obsolete. It should be high-level algo, you described it correctly. Q5: You can use pixijs with skia if you want better shapes. "Texture.from(skiaCanvas)" will help with it, just make sure you bind it so it gets uploaded to pixi context before you make another shape with skia. Lots of details about it.
  33. 1 point

    Star rain

    Since there are presumably a lot of stars and they'll all look the same, you might get some performance benefit using a ParticleContainer. Your code looks like you're re-generating all the stars every frame (if I'm parsing it right), but if you make each star a Sprite you don't need to! If it was me, what I would do is generate a bunch of star Sprites with random X, Y, and scale initially. I'd give them each a random .dy property to control how fast they move, and I'd add them all to the ParticleContainer. In the tick function, I'd loop through all the sprites in the ParticleContainer, adding each one's .dy to its Y position. If the new Y position is outside the visible area, I'd set its Y back to the top of the container and randomize its scale, X position, and .dy again. That way, you're reusing an existing bunch of Sprites instead of garbage collecting stuff. If you need to control the speed of the starfield as a whole, perhaps based on how fast your player is moving, you could factor that into the process by adding an overall speed adjustment something like this: "sprite.position.y = sprite.position.y + (sprite.dy * speedFactor)". That would also let you reverse the direction if you needed to. I coded this up in a playground to show you what it looks like: https://www.pixiplayground.com/#/edit/iWLHNxIENQwXhfOXtxN_S
  34. 1 point

    How to get velocity from a tween

    Challenge solved, but with a different approach. Instead of adding velocity to the player, I simply made the player a child of the platform. I'd still be curious about the above question, or maybe it would be useful to someone else.
  35. 1 point

    How do i move animated sprites

    Scoping alienAnim is created in one function, then in gameLoop you try to refer to it, but its not in scope. I'd expect a browser to show a reference error.
  36. 1 point
    Hello everyone, after some detours and feature-creep, here is the next version of the game: 0.4.6, complete with homing missiles, responsive menu layouts and the ability to create and play your own missions. Experimental touch controls are added, too, though there is no tutorial for them as of yet and there are some bugs. There are no visible buttons, the screen is simply divided to 4 quadrants: use bottom left of screen to turn (just press down and move the finger around) top left to set speed (swipe up / down to accelerate / decelerate, tap to stop, swap right to change flight mode) tap top right to switch target or tap with two fingers to change missile (if you have multiple types), long tap to target friendlies press bottom right to fire primaries (tap with two fingers to launch missile, or hold and move the finger to move sideways while firing primaries) tap top left with two fingers to engage the jump drive when the mission is complete, tap with three fingers for in-game menu. See full release notes: https://github.com/nkrisztian89/interstellar-armada/releases/tag/v0.4.6-alpha Wish you all happy holidays and joyful gaming, Krisztián
  37. 1 point
    Hello everyone, in late 2013 I started experimenting with what is possible using JavaScript/WebGL (coming from a computer engineering - C++/Java university background). Over time it grew into a game engine and then this game, as I worked on it in my free time next to full time jobs and more recently, contracting work. So it is entirely custom code (the only library used is RequireJS to load the JS files themselves), and I made all the assets as well (models, textures, music, sound effects (using some free CC licensed sound samples as a base) - you can find details in the "About" page in the game. As a result, the engine features and asset quality are rather modest. It is still heavily work in progress as the title suggests, but it has become quite playable recently, so I decided to share it here. About the game My goal is to create a fully fledged 3D space sim with procedurally generated missions that can be played on any computer with a modern browser. I am going for more of a softcore sim feel rather than an arcade one (there are many arcade options these days, but I prefer the more serious, elaborate controls of sims, without the time/hardware investment needed for something like Elite: Dangerous - which also doesn't run on my linux machine) Check out the facebook page, where I post updates and you can also find a recent gameplay teaser video. Game features (so far): full 3D, 6 degrees of freedom gameplay Newtonian physics (with flight assist) basic combat mechanics (primary weapons, shields, flight modes, targeting) 11 simple, authored missions (+3 training missions) against AI in-game database with info about the ships detailed, persistent graphics and control settings graphics settings automatically lowered if default settings are not supported by the hardware (high FPS is not ensured, only that it runs) joystick support an editor to mod the game (even more WIP/unstable than the game) Planned (missing :)) features: procedural missions, with ship upgrades in-between advanced combat mechanics (missiles, jamming, boosting, communication with wingmen) more content (ships, weapons, more detailed environments....) multiplayer Also a lot of polish, HUD changes, performance optimizations etc are planned. You can get a general idea by checking out the issues page of the game's github. Please note! The download size for the game can be significant (tens of MBs - depends on graphics settings and the mission being loaded), so I do not recommend trying it with a plan where you pay based on the amount of data! Play it here Let me know what you think! Technical info You can check out the code at https://github.com/nkrisztian89/interstellar-armada. Feel free to fork it - since it is 100% client side code, you can just throw it into the public HTML folder of your server (e.g. Apache) and it should work locally right away. Then you can use the built-in editor in the tools folder (localhost/the_folder_you_put_the_game/tools) to see how the game data files are organized, play with them (to apply the changes just hit export and then overwrite the original with the exported file in the data folder). Note that you cannot create or export missions or edit config/settings from the editor (as of now) Since this is a long project and I regularly revisit and update parts of the codebase that I might have not touched for a year or so, I try to keep it organized and nicely commented even if just for myself. However, this is not the number one priority, so there are parts of the codebase (which at this point grew above 60,000 lines) which are in terrible, terrible shape. I believe the best example of this currently is the code for the HUD.
  38. 1 point

    Falls back to CANVAS renderer

    there were a massive rewrite in the version 8 compared to version 7 yes, with better detection and fallback to canvas, and also WebGL2 support, so you should actually see performances improvement but this might be linked the the below changes on older computer with 2 GPU, as browser are all switching to a low-power mode by default, as opposed to the previous "high-performance" Renderer : allow specifying the default powerPreference value for the WebGL Renderer (on Safari and Chrome 80+ default is now low-power) see here for the WebGL specs : https://www.khronos.org/registry/webgl/specs/latest/1.0/ my pleasure and merry Christmas to you too ! I have done anything in a while, between moving house and holiday period, I;ll only be back in January
  39. 1 point

    Arcade Racing

    Yes, just forgot to add this, thanks) Yes, the I've already changed the indicator some time erlier bacause of the same feedback, thanks Yes, you right there's no more levels. Unfortunally, I have no time for that, maybe I'll add multiplayer some time later, but have no time for multiple levels and something else.
  40. 1 point
    Hey everyone! I used a variety of methods to load custom fonts in Phaser games. After some reading and experimenting, the FontFace object is literally the best thing to happen to me. I decided to write a blog about it because I don’t want to forgot how I did it haha, and hopefully it helps you too. https://msanatan.com/2020/11/08/loading-fonts-in-phaser-with-fontface/ My usual setup involved NPM + TypeScript. However, it shouldn’t be a hard jump if you’re one to load Phaser with the script tag.
  41. 1 point
    While playing the game (ok I admit I'm a little hooked now) I had another idea. It looks like the maps are seed generated chaos, with a half dozen having been hand selected, named, and set as presets? If so I assume an ~infinite number of potential maps already exist within the system. Amongst them is "Europe" - waiting to be discovered. So train the routine to recognise how close to Europe each random seed is, e.g. giving a score based on pixel matches to the reference image. Then let it run on loop for a week, and turn over a few quadrillion tries. Keep a record of the top 100 scoring maps. Manually review them at the end of the week and select a winner. Use that seed as "Europe". Total additional filesize: a few bytes. Why not look for other famous maps at the same time - e.g. The World, Westeros, etc ...
  42. 1 point

    SVG Path Data

    Hey Charlie, Did some work with SVGs a while back, I used a combination of svgson package (https://www.npmjs.com/package/svgson) to get data out of svg files (mine needed to have path attributes), and some native html methods on the Path object. static getSVGPaths(svgString) { return svgson.parseSync( svgString ).children.filter((child) => child.name === "path" && child.attributes.d) .map((child) => child.attributes.d); } static getPointsFromSVG(svgPath, spacing, scale) { const line = []; const svgEl = document.createElementNS("http://www.w3.org/2000/svg", "path"); svgEl.setAttributeNS(null, "d", svgPath); const totLength = svgEl.getTotalLength(); let trackLength = 0; while (trackLength <= totLength) { const svgPoint = svgEl.getPointAtLength(trackLength); line.push({ x: svgPoint.x * scale, y: svgPoint.y * scale }); trackLength += (spacing * scale); } return line; } static getSVGPathLength(svgPath) { const svgEl = document.createElementNS("http://www.w3.org/2000/svg", "path"); svgEl.setAttributeNS(null, "d", svgPath); return svgEl.getTotalLength(); }
  43. 1 point

    Toggle Pong

    Fun game, well done! I was thinking that it was going really slow and suddenly I wasn't able to switch quickly enough anymore haha. It's fun as is, but I would love to see some colours and effects, too.
  44. 1 point

    Pixi.js Showcase

    Hey!!! I'm Kayac Chang from Taiwan. I just create a template to quickly setup the pixi.js project by using [Create React App] (https://create-react-app.dev/) Now, if you already install npm or yarn. You can just typing npx create-react-app my-app --template pixijs # or yarn create react-app my-app --template pixijs Also have the typescript setup npx create-react-app my-app --template pixijs-typescript # or yarn create react-app my-app --template pixijs-typescript Happy hacking.
  45. 1 point

    PixiJS: SpriteSheet Tutorial

    I've just created a short tutorial for PixiJS that explains How to create & use sprite sheets with a few mouse clicks Use animations from sprite sheets (much easier than enumerating all sprites manually....) Optimize sprite sheets for smaller size and faster loading (up to 50%) Visually edit pivot points The full tutorial including source code is available from here: How to create sprite sheets and animations for PixiJS
  46. 1 point

    PixiJS: SpriteSheet Tutorial

    Its usual double-pixi-in-node_modules-problem remove node_modules remove package.lock npm install everything again
  47. 1 point
    Nope, haven't see one. Even more, good OOP i saw only in big closed projects. I'm working on good big example for pixi-v5 that has everything, including physics libs integrations, but its a real work, not hello-world - it takes time, and I have like 10 plugins for pixi to work on You can fund creation of tutorials and quality boilerplates here: https://opencollective.com/pixijs I'm sure we'll have bounties for that.
  48. 1 point
  49. 1 point

    How to tween scale in Phaser 3

    Just figured it out, using scaleX and scaleY... this.scene.tweens.add({ targets : [ this ], scaleX: 10, scaleY: 10, ease : 'Linear', duration : duration, yoyo : false, repeat : 0, callbackScope : this });
  50. 1 point

    Pixi.js Showcase

    Battelboats.io (BETA) - Play epic multiplayer sea battles https://battleboats.io/ Built with Pixi and Node