Popular Content

Showing content with the highest reputation since 03/07/20 in all areas

  1. 3 points

    Video plugin

    Play MP4 videos in your games. Download: https://www.panda2.io/plugins/video
  2. 3 points
    Concept Artist for Hire Specialising in Environments and Keyframes I am an experienced concept artist in the Game and Film/TV industry. I specialise in environments, keyframes, architecture, creature design and characters. I am currently looking for long-term freelance projects but happy to do short ones too. Alternatively, I am happy to just do some black and white sketches or some colour grading/storyboarding/etc - just get in touch!I have included my work below and my website, please feel free to email me, message me on ArtStation or on Discord to discuss the project and rates.Website: http://www.elliejcooper.co.uk/ArtStation: https://www.artstation.com/elliejcooperEmail: enquiries@elliejcooper.co.ukDiscord: Ellie#8157Portfolio: (Please look at either my website or ArtStation for more, or for better quality).
  3. 2 points

    [Panda 2] Woriar

    Hello all, I started this project while ago and, like some many others, never got it finished. Since i think it's pretty playable and shows the capabilities of Panda 2, i would share it with you. Hope you like it! Play here! Tested with latest Chrome on desktop. Made with Panda 2 game development platform.
  4. 2 points

    Pixi.js Showcase

    Ivan, I want to share with you how much I appreciate your work, Pixi is an incredible library, I never wrote anything on the forum but I used it extensively these last months and your suggestions / answers have been a huge help. Thank you for the kind words, I really appreciate, if you ever actually refer it do it with a bit of salt, I'm pretty sure my usage of Pixi can be improved, when I started writing the library I had no prior experience with it and I learned on the road. Nevertheless I'm quite honoured have a lovely day
  5. 2 points

    Pixi.js Showcase

    Two of my games were made with Pixi.JS. Zapper.io This is a snake style MMO that I released about 2 days ago. It features procedurally generated creatures and uses various filters to visually enhance the creatures. You can find it at http://zapper.io Ninja.io This is a multiplayer shooter with 3 game modes(currently), lots of weapons and many different worlds. This project has been online for a while but I still consider it to be an alpha version. Play at https://ninja.io Ninja.io world editor The world editor for Ninja.io is also made with Pixi.JS. It has lots of features and I've used it to create all the ninja.io worlds. I plan to release a more user friendly version to the ninja.io community at some point. The most challenging thing was to get acceptable performance for Ninja.io. I eventually found a way to efficiently combine mesh triangles in the world editor. Due to limitations of the editor, earlier versions of Ninja.io rendered every mesh triangle as a separate mesh, but this incurred an unacceptable performance hit. There is probably still plenty of room for optimization here but I just haven't really delved into the depths of the Pixi renderer code yet. Thanks a lot for making it publicly available, and I hope to be able to contribute at some point!
  6. 2 points
    Check this example:
  7. 2 points
    Use this when you obtain temp webgl context. Unfortunately pixi webgl test context is hidden in js scope, so you have to create your own. gl.getParameter(gl.MAX_TEXTURE_SIZE)
  8. 2 points
    Hello everyone, a few important comments here: 1. Bestgames is gamemonetize, I will not address their accusations as they add nothing to this thread and is just trying to defamate our image. 2. The report dashboard shown is probably a bug, you should contact us directly and we will fix whatever is needed. 3. Revenue drop: It is natural to see less revenues than nov-dec. I will explain why: this industry monetizes games with advertising. Advertising depends on demand (advertisers) and seasonality (periods people spend money). The beginning of the year you will always see less: impressions, ecpms, hence revenue. This is not our fault, but how the advertising industry works for decades now. If you are working with other partners, you will also see the same behavior. 4. Again on the transparence of our company: We recently aquired Spil games, top 1 player on web games for decades now, you can see the news here and in dozens of other sources: https://www.gamesindustry.biz/articles/2020-02-12-azerion-acquires-remainder-of-spil-games Working with Game Distribution has become even better now that we have the power of Spil games portals to provide your games more visibility. Please bear in mind that not all games will make money and work out, this is the same on every platform, not just the web. Quality over quantity is very important. We respect your decisions to discuss, expose and decide whether to work with us or not as long as we are having a healthy conversation around the gaming industry. We work with literally hundreds of game developers who are quite happy with us and I am proud to say our service has improved a lot since last year, and will still keep improving. Any questions or topics, you know where to find me. Iuri
  9. 1 point

    set interval

    Hello and Welcome to the forums! You have to put "app.render()" in setInterval too, and specify "{autoStart:false} " on start. Please read this article about gameloop: https://github.com/pixijs/pixi.js/wiki/v5-Custom-Application-GameLoop Dont forget to remove old tree from stage. Also after you add 1000 trees - it will draw 1000 trees every time you call render(). You can try to work with pixi like with drawer that doesnt clear() between frames, but.. its not guaranteed in webgl that your stuff wont be erased between frames If you want to store previous state of canvas - use RenderTexture.
  10. 1 point

    Electron vs Chrome

  11. 1 point
    Hi, I am trying to project a rotating 3d cube to a 2d space. I understand that pixi-projection should help me achieve this. Despite my efforts to try and find documentation, YouTube videos, go through the source code, search this forum, search the Pixi wiki on GitHub.com and reverse-engineer this demo https://gameofbombs.github.io/pixi-bin/index.html?s=flip&f=cube.js&title=Cube, I didn't get very far. Perhaps my struggle stems from the fact that I don't understand the terminology at play. Terms such as "affine", "euler", "focus distance" and "near plane" are foreign to me. I expect the pixi-projection API to allow me to define the position and orientation of my camera and the position and orientation of my subjects. I don't comprehend how the current implementation comes together to allow me to do this. For example what does the "setPlanes" method on the camera dictate and what are the expected parameters? Are there any resources which can ease me into the terms and the concepts at play so I can make better sense of the source code in the examples provided? @ivan.popelyshev Your guidance would be tremendously appreciated.
  12. 1 point
    Hello all, i'm making something like an image editor, and i would like to have a bi-cubic interpolation when scaling stage down, and nearest when stage scale is > 2, So instead of using PIXI.settings.SCALE_MODE, which doesn't support bi-cubic and i think it can't be changed after initialization, i decided to create my own glsl interpolation filters for the sprites i use to display the images. I disabled mipmaps, and created and applied a fragment shader like this: PIXI.settings.MIPMAP_TEXTURES = PIXI.MIPMAP_MODES.OFF const shader = new PIXI.Filter("", fragmentGLSL, uniforms); sprite.filters = [shader]; and i made a glsl nearest neighbor implementation (which i'm not sure if its correct) precision mediump float; varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform vec2 textureSize; //todo uniform float scale; vec4 nearest(sampler2D tex, vec2 texcoord) { float x = floor(texcoord.x) / textureSize.x; float y = floor(texcoord.y) / textureSize.y; return texture2D(tex, vec2(x, y)); } void main(){ gl_FragColor = nearest(uSampler, vTextureCoord * textureSize); } When i run this, i see some differences compared to default interpolation, but especially when zoomed in (stage scale), the interpolation is not nearest but almost exactly as the default (linear), but with a slow misplacement of pixels. It seems to me that whatever i do in glsl, the interpolation is still affected by PIXI.settings.SCALE_MODE. I can't understand it. Am i missing something here? thank you
  13. 1 point
    You can post non-working demo here if you make one, I'll help
  14. 1 point

    Compute right uvs ?

    HI! You are lucky, usually people wait for week or two before such case is resolved. Thank my good mood. Usuaally when people post abstract filter cases, I ask them if they actually need filters and not some other things In your case, for pixi-v4 there's special plugin : https://github.com/pixijs/pixi-picture Basically it copies part of current framebuffer and gives it as a second input for a filter. Its better if that "blendMode" is inside another filter, otherwise it will use readPixels and be very slow CTRL+C its code to your project or just connect it and make new blendmode that you want. What can I say about your try: I see you tried many things You almost did it: you actually made desync in clipping and texture. 1. vec2 cTexture_scCoord = vTexture_scCoord + vec2(-0.1); < -- here, fixed version is just fine 2. pixi uses premultiplied alpha. All channels are premultiplied, color should be complete 0.0 if its transparent. in all channels. 3. blendMode was normal for non-premultiplied alpha, i fixed it for premultiplied. 4. mapCoord is fine, its used only for TEXTURE REIGONS, in case you place texture from an atlas. See SpriteMaskFilter sources to understand it. In fact, all your example should be based on SpriteMaskFilter Here, I removed unnecessary things and added a few comments: https://codepen.io/ivanpopelyshev/pen/RwPzaMM?editors=0010 Also, remove that "uv-0.1" part , you should do it with sprite translation. All rotations/ translation and stuff should be done with sprite! The whole idea is that you manipulate object in stage tree, and then filter calculates its relative matrix, so you dont have to do it in shader. Updating uniforms based on transforms is cheap. In case you move it to v5 ( I see you tried to use outputFrame, well, its v5 uniform ) 1. all uniforms should be specified in constructor or before filter is uesd, not in "apply". 2. "texture.transform" has to be swapped to "texture.uvMatrix" In case you actually use texture from atlas: 1. Adjust clipping, it should use "clamp(texCoord, uClampMargin.xy, uClampMargin.zw)" , where uClampMargin taken from texture matrix. SpriteMaskFilter also does that.
  15. 1 point
    thank you Ivan, i'll try to understand and research the process you describe. If i make it work i'll be glad to submit it as an example if you think it's something useful for others.
  16. 1 point

    Dodge This - One Shot, Two Kills

    It's a very good game. I liked it. I got to about level 12 in one session.
  17. 1 point

    Pixi.js Showcase

    Thank you! Added it here for now: https://github.com/pixijs/pixi.js/wiki/v5-Resources#integration-with-platforms-and-frameworks . I told a few people already, in case someone will improve that pipe thingy and makes a boilerplate.
  18. 1 point

    Pixi.js Showcase

    YEAH, now I can refere to that repo all people who asked about python+pixi combo. Maybe I'll move one python console game to pixi thanks to you
  19. 1 point
    Here's the plugin for it: https://github.com/pixijs/pixi-layers You can see "z-index" word in examples and use it with CTRL+C but I advice you to go through the README. Layers are better than z-index. 1. You might even not need to set numbers for z-index 2. Its clear how masks and filters work in those elements.
  20. 1 point
    Mesic Selim

    Bullet go on mouse position

    I just want to THANK YOU, Exca. This post will help me a lot ! 😊
  21. 1 point

    Shader and Filter

    My slides for talk on russian, but look at see pictures: https://docs.google.com/presentation/d/1wX-sXRh8qkmadwMPb1noFpsVAU5jQyg9DBrwcSOYlXA/edit#slide=id.g70b2e5f95b_1_12 Game is not mine
  22. 1 point

    Shader and Filter

  23. 1 point
  24. 1 point
    Hi, So i've got this code working which captures animations that is going on in the canvas and returns DataURL of each frame.It works fine, but sometime it misses frames and give less FPS when my browser have lots of tabs open or on mobile devices. Basically my goal is to capture this animations JPEG, merge those and create mp4 video of it using FFMPEG.js Just wondering if anyone have a better approach of doing it. async function collectFrames(app, time) { let blobs = []; let ticker; let stopBlobPushing = false; let promise = new Promise((resolve, reject) => { setTimeout(() => { stopBlobPushing = true; app.ticker.remove(ticker) resolve(blobs); }, time); ticker = (delta) => { if (!stopBlobPushing) { app.renderer.extract.canvas(app.stage).toBlob((b) => { var reader = new FileReader(); reader.readAsDataURL(b); reader.onloadend = () => { var base64data = reader.result; blobs.push(base64data); } }); } } app.ticker.add(ticker); }); let result = await promise; // console.log(result); return result; }
  25. 1 point
    Suppose you have a invisible canvas with that game somewhere on page. create a texture out of it : "Texture.from(outerCanvas)" , use it in a sprite (same as "Sprite.from" actually). every frame you should 1. call render of that game 2. call "texture.update()" of that texture you made from canvas 3. call pixi render. If you are lucky, simple "app.ticker.add(() => { texture.update(); } )" should work , if not - study how to make your own application or add a handler before pixi renders: https://github.com/pixijs/pixi.js/wiki/v5-Custom-Application-GameLoop, . Maybe "app.ticker.add(() => { outerGame.render(); texture.update();} )" works, maybe you'll have to put it all in "render" method of your application, i dont know, you should debug it. This "convert other canvas to texture for our renderer" trick should work and have good performance everywhere except Edge (old edge, not chromium edge). You cant pass iframe there, but if you somehow get access to canvas - yes, it should work because PixiJS has Canvas->Texture convertor in "CanvasResource" thingy, I mentioned resources in first post.
  26. 1 point
    I have explained my technique in some detail at https://www.gamedev.net/blogs/entry/2268999-a-simple-way-to-generate-limitless-terrain-in-real-time-in-plain-html5javascript/
  27. 1 point
    Thanks for your prompt and helpful response Ivan, I've been following you for a long time and still look forward to your assistance. I actually used a canvas element to create my game but due to the fact that I had to download another game on the section from iframe to display on my game, it interacted back and forth. between the 2 canvas elements of the game and the iframe closely. But the iframe is just a DOM element so I don't want to use it. I just want to put this iframe element in the same canvas as my current game so I can manage it best. I used from () to display a video element and it was successful but it was really difficult to load it as an iframe.
  28. 1 point
    Most of the stuff we have written here are just facts, no lies. 1) Traffic redirection and banning sites without a notice is stealing of traffic 2) Injecting additional ads and not paying for them is stealing of $ People these days are just so used to so many different kinds of stealing techniques that even governments and central banks are doing it as we speak and nobody cares about it, and yes, they have lots of friends too.
  29. 1 point
    I can not using the same way make what I want to do. I see my project when I using PIXI.Loader add json and using add() to add my json then load. It will give me the spineData in loader.resources.spineData when load finish . But when I using your way I can not take this property. They is a similary names data. But when I using it they will say "Cannot read property 'children' of undefined" This is my code example. Please check pixiatlastest.html line 47 and 58. mytest.rar
  30. 1 point
    Thanks Ivan, I'll try out the boiler plate off of the wiki
  31. 1 point
    There's no built-in extension support in v4, neither it was in plugin, so you have to do your own webgl calls. Also, this extension isnt available on some devices. However, the thing you want to achieve can be done with basic layering. When you render element, you can render it in multiple layers - just make a container with two sprites. one goes to ambient, one to your "depth texture". That takes care of webgl problems. But its not enough to do what you shown on screen! You need exactly now how you combine layers, house roof and character have to be in different layers! Layer = container that is rendered in renderTexture separately from everything else. Use pixi-layers if you want to omit all boring part of code. For further discussion, please provide minimal technical demo , either in v5 either in v4, doesnt matter if it doesnt actually do your thing. I just cant write 2-hour lection on layers here. I can help with concrete case. I saw how that depth was made for one of RMMV games, with volumetric fog! Btw, is there any particular reason you stick to v4? Welcome to the forums!
  32. 1 point
    Yeah, it's just hard for me to know what is possible with my stage in development. I'm always worried about spending hours on something which is an obvious dead end to someone with more experience. I am reading through the source code more and it is helpful and I have gotten used to reading the API docs which is awesome, but there is still a lot of experience I need in order for the source code to be as helpful as I know it can be. That will come in time. I'm learning a ton through this project and this community!
  33. 1 point
    pixi-layers entrypoint is https://github.com/pixijs/pixi-layers/blob/master/src/Stage.ts#L134 , its automatically injected in "renderer.render" by plugin. You can call it manually in your ticker handler instead, in that case you have to pass Container and not inner layers stage in renderer.render: https://github.com/pixijs/pixi-layers/blob/master/src/renderers.ts#L34 Also if you start work with tickers and gameloop seriously you just have to know https://github.com/pixijs/pixi.js/wiki/v5-Custom-Application-GameLoop and make your own Application class. Here's hard example with layers, and architecture: https://codesandbox.io/s/tender-franklin-iycmu
  34. 1 point
    Since I always loved playing bomberman as a kid, I decided to make an online multiplayer clone of the game using Phaser. I've called it "Bomb Boy Online" but it pretty much plays like the classic bomberman games. You walk around, place bombs, and try to blow up the other players. You can get various powerups that can increase the blast radius of your bombs, the number of bombs you can hold, and your speed. The game contains a lobby where you can host/join games. Up to 8 games can be in session at the same time. Here's a link to the game: https://limitless-brook-9339.herokuapp.com/ Source code: https://github.com/ahung89 Here are some screenshots of the game:
  35. 1 point
    Digital Ronin

    Help with SHADER

    I will give my best I can always ask girlfriend to help with.... 😄 More and more people get involved in this project. Hope I can share with you guys how that will look at the end. It is not game, just website, but I wanted to approach it differently and challenge myself, since it is portfolio. Thanks again 😊
  36. 1 point
    @callidus using velocityFromRotation looks right but what is the line below it for? // this looks right game.physics.arcade.velocityFromRotation(player.rotation, 400, bullet.body.velocity); // what is this for? bullet.body.velocity.y = -400; I don't think you need that second line. I have an isolated demonstration of the concept here if that might help: https://blog.ourcade.co/posts/2020/fire-bullets-from-facing-direction-phaser-3/
  37. 1 point
    Digital Ronin

    Help with SHADER

    Hey Ivan. I think you succeeded with that. To do this you just need a tiny bit knowledge about Shaders and one example (which one you guys did) and you are ready to go. I as a beginner succeeded to implement shader from ShaderToy to PIXI, so that's prove something. I have one more question and it is related to the specific example of shader i linked up above. Now when I managed to use Shader in PIXI, I'm stuck up with idea how to make mask from it. I used before PIXI.Graphics to create mask. I have two containers with content's and my idea was to use that cool Shader mouse movement animation to reveal content of background container. So I would appreciate any advice with logic behind that. I don't want to bore you to death guys, but I don't have other place to go and ask for questions. Big thanks for everything!
  38. 1 point
    I am testing out my game on iOS, and I have a 8-directional virtual joystick overlayed on screen (a circle divided into 8 slices), and am using pixi's interaction manager for pointerdown/pointerup/pointermove events to handle touch events for detecting which direction is currently being touched... So as I am playing in full screen (iphone rotated in landscape mode), I am sliding my thumb around this "wheel", and Safari thinks "oh! GESTURE!!!".. and then all of a sudden, a scroll bar appears and the url bar comes into view-- totally ruining the experience of my game.. And then as I continue to try to play, iOS is like "OH GESTURE!!!" and then a notifications panel comes down and covers half of the screen.. and then I throw my hands up in the air and ask myself, did I make a terrible mistake trying to make a browser based game, because this behavior is literally ruining everything... Is there any way to "prevent default" on these events to stop this horrible and obnoxious behavior?
  39. 1 point
    well if you have not many objects, you can just render everything in one PIXI.Graphics: iterate through all objects, look in fixtures, apply transforms to points - same way its done on canvas, just fill up Graphics. You can use nativeLine setting in line style to make them 1px thin - that'll be fastest mode. Of course, every frame pixi will upload new vertex buffer to gpu. It can be optimized - separate tu multiple graphics, each one changes only transforms, so no buffer uploads, but at the same time it will cause 1000 drawcalls To batch or not to batch - that is the question. Deal with that if your debug will be too slow with the naive approach.
  40. 1 point

    How to set full screen?

    Hello and welcome to the forums! Its not a pixi problem, its a CSS-canvas . just set padding and margin of body to 0
  41. 1 point
    There cant be anchor in graphics because graphics is not rectangular and bounds can be weird. Two ways: 1. use Pivot 2. draw planet circle that way its center is in (0,0)
  42. 1 point
    let mySprite = new PIXI.TilingSprite(resources["testpic"].texture); mySprite.tileTransform.pivot.set(200,200); //200 is center position mySprite.tileTransform.rotation += 0.1 mySprite.tileScale.x += 0.1
  43. 1 point
    You can use preUpdate() function in the player class. It is being called each cycle without having to active it manually.
  44. 1 point
    Regarding your case - you are doing something wrong. just include "pixi.js-legacy" somewhere , and it should register all renderers in autodetect. Unless you somehow stumbled across a bug with two pixies alive (pixi.js 5.2.0, pixi-legacy 5.2.1 or something like that). In that case, erase node_modules and package.lock and reinstall it.
  45. 1 point

    Google GameSnacks

    We have two games on the platform. It's pretty nice and cool, the api isn't very hard to add. Process of dealing with Google is quite long though (as you could imagine).
  46. 1 point

    Why did phaser stop using pixijs?

  47. 1 point
    Here it is, a small System Text plugin with 3 features: 1) typewriter effect 2) strokeColor (border) 3) example how to use gradient colors with systemText in Panda. Please note that I included a custom font in the project to achieve the second and third example. See the demo project for files ans details at: https://github.com/stephanvermeire/systemtextplugin Quick example (typewrite effect not working here because it is a static image): systemtextplugin.js game.module( 'plugin.systemtextplugin' ) .require( 'engine.renderer.text' ) .body(function() { game.SystemText.inject({ /** Enable typewriter-effect @default false **/ typing_effect: false, i: 1, /** StrokeColor of the text. @property {String} color @default #000 **/ strokeColor: '#000', /** Width of the text stroke. @property {Number} color @default 0 **/ lineWidth: 0, _renderCanvas: function(context) { var wt = this._worldTransform; context.globalAlpha = this._worldAlpha; context.setTransform(wt.a, wt.b, wt.c, wt.d, wt.tx * game.scale, (wt.ty + this.size) * game.scale); context.fillStyle = this.color; context.font = this.size * game.scale + 'px ' + this.font; context.textAlign = this.align; context.strokeStyle = this.strokeColor; context.lineWidth = this.lineWidth; if(this.text === undefined) return; var lines; if(this.typing_effect){ lines = String(this.text.substr(0, this.i)).split('\n'); if(this.i <= this.text.length){ this.i++; } }else{ lines = this.text.split('\n'); } for (var i = 0; i<lines.length; i++){ context.fillText(lines[i], 0, (i*this.size) ); if(this.lineWidth){ context.strokeText(lines[i], 0, (i*this.size)); } } } }); }); main.js game.module( 'game.main' ) .require( 'plugin.systemtextplugin' ) .body(function () { game.createScene('Main', { init: function () { //typewriter demo new game.SystemText('Lorem ipsum dolor sit amet,\nconsectetuer adipiscing elit.\nSed posuere interdum sem.', { size: 50, x: 0, y: 0, typing_effect: true, }).addTo(this.stage); //custom font with strokeColor new game.SystemText('Lorem ipsum dolor sit amet,', { font: 'SoSweetHoney', // align: 'left', color: '#2d963b', strokeColor: '#a2e65e', lineWidth: 2, size: 50, x: 0, y: 300, }).addTo(this.stage); //gradient font color const color = game.renderer.context.createLinearGradient(0, 0, game.width, 0); color.addColorStop(0, "#f47c35"); color.addColorStop(1, "#e6e650"); const strokeColor = game.renderer.context.createLinearGradient(0, 0, game.width, 0); strokeColor.addColorStop(0, "#a2e65e"); strokeColor.addColorStop(1, "#3577ca"); let test = new game.SystemText('Lorem ipsum dolor sit amet!', { font: 'SoSweetHoney', lineWidth: 2, size: 50, x: 0, y: 500, }).addTo(this.stage); test.color = color; test.strokeColor = strokeColor; } }); }); index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Panda 2 - SystemText</title> <link rel="stylesheet" href="style.css" media="all" /> <script type="text/javascript" src="src/engine/core.js"></script> <script type="text/javascript" src="src/game/config.js"></script> <script type="text/javascript" src="src/game/main.js"></script> </head> <body> </body> </html> Note that you have to include the fonts directory as well as the style.css file in your project to make the custom font work!
  48. 1 point
    Anyone coming here like me that just wants a straightforward answer on how to enable intellisense for a vanilla JS project in VS Code: Grab the TypeScript definitions for Phaser here: https://github.com/photonstorm/phaser3-docs/blob/master/typescript/phaser.d.ts Create a folder in the root of your project called defs Put the phaser.d.ts file from step 1 in the defs folder you created in step 2 Create a file at the root of your project called jsconfig.json In jsconfig.json put the follow snippet: { "exclude": [ "node_modules/**/*" ] }
  49. 1 point

    Tweens timeline problem

    So I figured it on my own, here's what I did to detect current tween: if (this.movement && this.movement.isPlaying()) { const progress = this.movement.elapsed; const currentTweenIndex = this.movement.data.findIndex(tween => { return (tween.calculatedOffset + tween.duration) > progress; }); const currentTween = this.movement.data[currentTweenIndex]; if (currentTween) { currentTween.setCallback('onComplete', () => { this.movement.destroy(); this.findPath(toX, toY); }, []); } } where this.movement is current timeline. Have a good day!
  50. 1 point
    I'd hella agree that most physics engines out there are tad bit bloated & overkill. The route I went was to actually analyse implementations done by existing libraries and write my own implementations in a fitting manner towards my code. Ie: In a platformer game I only need to check collision on floors and floating tiles whenever the unit's downward velocity is greater that its upward velocity. Another example is checking only between a predefined set of objects, instead of checking against **ALL** objects - big performance boost right there so to speak. Check these couple repo's anyways, these got great insights on collision handlings: https://github.com/TuurDutoit/crash https://github.com/jriecken/sat-js edit: This event emitter is handy too in any 'handling' part. https://github.com/TuurDutoit/EventEmitter