Popular Content

Showing content with the highest reputation since 09/26/20 in Posts

  1. 2 points
    Hi all, As discussed on our call today, I said I'd bring together a list of bugs I've filed relating to the quality of the web platform (i.e. the kinds of things causing developers headaches when they run in to them). To get the ball rolling, here are a few. Please feel free to add your own, but I think we should try hard not to throw in our full bug lists - I for one have quite a few filed over the years! Let's try to keep this focused on things which will affect web development in general, cross-platform gotchas, and the like. Chrome OffscreenCanvas works in Chrome, but is not supported in the WebView: crbug.com/923007 Audio playback sometimes has unexpectedly high latency on Android: crbug.com/1014614 WebView performance is sometimes unexpectedly worse than in Chrome. It's a difficult issue to track down and it's not clear what the cause is or if there are multiple causes, but two issues related issues are crbug.com/810928 and crbug.com/1127307 Sometimes we see GPU driver crashes, e.g. crbug.com/1086024, and it seems really hard to get the graphics vendor to respond or act on it Firefox Options for createImageBitmap aren't implemented (or fully implemented - hard to tell from the tracker) - related issue: issue 1367251. It's useful for preparing textures for WebGL upload, but because of this you have to deal with three paths: no ImageBitmap (current Safari), ImageBitmap but no options (Firefox), ImageBitmap with options (Chrome) You can't draw an SVG to a 2D canvas, even with the overload that specifies the width and height: issue 700533 Support for OffscreenCanvas: issue 1390089 Safari createImageBitmap (issue 182424) and options (issue 202458?) Safari is the last browser that does not support WebM Opus audio. This is the sole reason we have to use dual encoding or ship our own WebM Opus decoder with the game. If they supported this, we would at last have one audio format that plays in all browsers. Issue 183852 We find pretty much every iOS release breaks something. Here's the latest in our case - switching tabs breaks audio playback in iOS 14: issue 217606 Support for OffscreenCanvas: issue 183720 Support for WebGL 2: issue 126404 - seems to be on the way though, latest tech preview enabled it!
  2. 2 points
    As a primer and insight into the not-always-obvious I'd recommend a read of @Antriel multiplayer platformer devlog:
  3. 2 points
    Dr Popet

    Gostly Doors

    This is my new game, I made it to promote my new creative agency to make advergames in HTML5. Like my other games, this is a one button game, this one is ghosts theme and is very simple to play. http://c1ic.mx/GostlyDoors/ I hope you like it.
  4. 2 points

    Discoverability & Monetization

    Like @end3r we (the Defold Foundation) were also awarded a grant from Grant for the Web to explore the use of Web Monetization in games. The Defold Foundation will use the grant to integrate, promote and support the use of Web Monetization in web games created using Defold. The Defold Foundation will integrate Web Monetization through its plugin system, promote it through examples and tutorials and host a game jam focused on Web Monetization. We have a first version the engine and editor integration ready for testing (more info). Next up is to create the sample game and start planning for the game jam.
  5. 1 point
    You can install Matter.js on server side using the command: npm i matter-js This article describes how to create authoritative server with client prediction: http://buildnewgames.com/real-time-multiplayer/ You should use physics on server and on client sides with the same update rate and synchronization with server on client side for correction of mistakes of client prediction.
  6. 1 point

    Discoverability & Monetization

    Noel, we wouldn't mind another expert opinion on the submitted games. I'll shoot you an email!
  7. 1 point
    Very simple optimization. Instead of graphics use sprites with single white rectangle as their basetexture. Then apply tint to them to color the sprite. That way the squares can be rendered as a batch. That should be good enough for 150*200 squares (30k sprites). But for 1000 x 1000 (1M squares) you need to go deep into webgl rendering or have some other optimization strategy. Or would those squares be all visible at the same time? If not, then that would be doable by separating logic from rendering and only rendering a subsection of the whole area. And here's a little rundown about different graphic objects: - Graphics: Dynamically drawn content. Use when you need to draw lines, shapes etc. Be aware that updating graphics every frame might be costly depending on the complexity. - Sprites: Sprites are basically just to tell what texture to draw and where, with this rotation, tint and scale. Sprites are among the cheapest objects in pixi. - Textures: Textures are a region of baseTexture. They tell you what part of a baseTexture should be drawn. When using spritesheets the difference between texture and baseTexture is very noticable. When using just regular images then usually textures point just to a baseTexture and say that I want to render that whole thing. - Basetexture: Basetextures represent a single image in memory. - Mesh: Meshes are renderables that have customizable vertices. You could think that sprite is also a mesh that has 4 vertex points (topleft, topright, bottomright and bottomleft). With Meshes you can control how your polygons get formed. There are some premade mesh classes that provide premade useful meshes: SimpleRope, SimpleMesh and SimplePlane. Those abstract some of the complexity away. And when to use them: Graphics: Dynamic drawn content. Sprites: Images with basic affine transformations (scale, rotation, position) and basic color transformation (tint, alpha). Textures & BaseTexture: Pretty much always if you have some images to use. Very often these get handled automatically. Mesh: When you need deformations. Also here's a short instruction on shaders: Modern computer graphics cards have a pipeline where you tell what program (vertex + fragment shader) you want to use, what vertices it gets as input and what uniforms (+ other stuff that I wont go into at this point). Then for each vertex it runs the vertex shader program. This basically calculates where on the screen should the point be. Then for the polygons formed by these vertices it runs the fragment shader for each pixel that is inside the polygon. The fragment shader returns the color value for that pixel. The uniforms mentioned beforehand are values that stay the same for both vertex and fragment shader on all vertex & pixel values. They are used to give values that are needed to calculate the output values. In sprite fragment shader "tint" is an uniform that is multiplied with the texture value. So basically your gpu renders wegbl like this (simplified): list of points to draw -> vertex shader -> find out what pixels are affected -> fragment shader -> pixel to screen.
  8. 1 point

    Discoverability & Monetization

    Also, if you're into the discoverability part of things, be sure to check out the Open Mini Games concept: https://github.com/tcmg/open-mini-games
  9. 1 point

    Discoverability & Monetization

    I heard the judges there are cool folks ;D https://defold.com/web-monetization-challenge-2020/#judges
  10. 1 point
    I'd recommend starting at Sponsors and Portals.
  11. 1 point

    Discoverability & Monetization

    We're hosting a Web Monetization game jam! The jam is open to all game engines and starts November 1st. Learn more and sign up here: https://itch.io/jam/the-web-monetization-challenge-2020
  12. 1 point

    HTML5 Multiplayer Games

    thank you very much for the recommendations
  13. 1 point
    Hi there! I'm new in Pixi, trying to make kinda concentration game. I implementing a game in Vue.js. I did first step of the game - the demonstration. It randomly shows some sprites on a grid. Sometimes demonstration complete successfully and sometimes - not. An error appear for some reason. Here an error Uncaught TypeError: Cannot set property 'texture' of undefined at VueComponent.playDemo (lamps.vue?d061:128) at TickerListener.eval (lamps.vue?d061:222) at TickerListener.emit (ticker.es.js?e3e9:132) at Ticker.update (ticker.es.js?e3e9:584) at Ticker._tick (ticker.es.js?e3e9:334) I also attach a video. Here the vue component with PIXI. It's messy I know, I just wanna know how things works for now <template> <canvas /> </template> <script> import * as PIXI from 'pixi.js' export default { name: 'LampsGame', data() { return { LEVEL: 3, ROWS: 4, COLS: 4, GAP: 5, SPRITE_WIDTH: 50, SPRITE_HEIGHT: 50, app: null, container: null, sprites: [], grayLampTexture: null, yellowLampTexture: null, demoElementShown: 0, demoCurrentElement: null, canShowDemo: true, currentDemoStep: 0, shownLamps: [], correctLamps: [], errorLamps: [], delta: 0, seconds: 0 } }, computed: { SEQUENCE() { return this.LEVEL + 1 }, ELEMENTS() { return this.ROWS * this.COLS }, demoSequence() { const list = [] while (list.length < this.SEQUENCE) { const random = this.getRandom(0, this.ELEMENTS) if (list.indexOf(random) === -1) { list.push(random) } } return list } }, mounted() { // Для работы PIXI dev tools в хроме PIXI.useDeprecated() window.__PIXI_INSPECTOR_GLOBAL_HOOK__ && window.__PIXI_INSPECTOR_GLOBAL_HOOK__.register({ PIXI: PIXI }) // ---- const canvas = document.querySelector('canvas') this.app = new PIXI.Application({ view: canvas, width: 400, height: 400, backgroundColor: 0x1099bb }) const gameContainer = document.querySelector('#gameContainer') gameContainer.appendChild(this.app.view) this.container = new PIXI.Container() this.container.sortableChildren = true // Move container to the center this.container.x = this.app.screen.width / 2 this.container.y = this.app.screen.height / 2 this.app.stage.addChild(this.container) // Loader const loader = PIXI.Loader.shared // Добавляем изображение в loader. Первый параметр - alias для ресурса loader.add('grayLampTexture', require('@/assets/games/lamps/state-1.png')) loader.add('yellowLampTexture', require('@/assets/games/lamps/state-2.png')) loader.add('greenLamp', require('@/assets/games/lamps/state-3.png')) loader.add('redLamp', require('@/assets/games/lamps/state-4.png')) loader.onProgress.add(this.handleLoadProgress) loader.onLoad.add(this.handleLoadAsset) loader.onError.add(this.handleLoadError) loader.onComplete.add(this.handleLoadComplete) loader.load() }, methods: { playDemo(delta) { this.seconds += (1 / 60) * delta const currentTime = Math.floor(this.seconds) // Last step if ( this.demoElementShown === this.demoSequence.length && currentTime >= this.currentDemoStep ) { this.demoCurrentElement.texture = this.grayLampTexture return } if ( this.canShowDemo && this.demoElementShown < this.demoSequence.length && this.currentDemoStep === 0 ) { //debugger this.canShowDemo = false this.currentDemoStep += 1 const spriteIndexToShowZ = this.demoSequence[this.currentDemoStep - 1] this.demoCurrentElement = this.sprites[spriteIndexToShowZ] this.demoCurrentElement.texture = this.yellowLampTexture this.demoElementShown += 1 } else if ( this.canShowDemo && this.demoElementShown < this.demoSequence.length && this.currentDemoStep === currentTime ) { //debugger this.demoCurrentElement.texture = this.grayLampTexture this.currentDemoStep += 1 this.demoElementShown += 1 const spriteIndexToShowX = this.demoSequence[this.currentDemoStep - 1] this.demoCurrentElement = this.sprites[spriteIndexToShowX] this.demoCurrentElement.texture = this.yellowLampTexture this.canShowDemo = true } else if ( currentTime > 0 && currentTime === this.currentDemoStep && this.demoElementShown < this.demoSequence.length ) { //debugger this.demoCurrentElement.texture = this.grayLampTexture this.currentDemoStep += 1 this.demoElementShown += 1 const spriteIndexToShowX = this.demoSequence[this.currentDemoStep - 1] this.demoCurrentElement = this.sprites[spriteIndexToShowX] this.demoCurrentElement.texture = this.yellowLampTexture this.canShowDemo = true } }, /** * Колбэк загрузки ресурсов * @param {object} loader - загрузчик * @returns {void} */ handleLoadProgress(loader) { console.log(loader.progress + '% loaded') }, /** * Колбэк загрузки ресурсов * @param {object} loader - загрузчик * @param {object} resource - загруженный ресурс * @returns {void} */ handleLoadAsset(loader, resource) { console.log('asset loaded ' + resource.name) }, /** * Колбэк загрузки ресурсов * @returns {void} */ handleLoadError() { console.error('load error') }, /** * Колбэк загрузки ресурсов * @param {object} loader - загрузчик * @returns {void} */ handleLoadComplete(loader) { console.log(loader + '----load complete') this.grayLampTexture = loader.resources.grayLampTexture.texture this.yellowLampTexture = loader.resources.yellowLampTexture.texture //const greenLamp = loader.resources.greenLamp.texture //const redLamp = loader.resources.redLamp.texture // Create a 5x5 grid of sprites for (let i = 0; i < this.ELEMENTS; i++) { const lampSprite = new PIXI.Sprite(this.grayLampTexture) lampSprite.width = this.SPRITE_WIDTH lampSprite.height = this.SPRITE_HEIGHT lampSprite.anchor.set(0.5) lampSprite.x = (i % this.ROWS) * (this.SPRITE_WIDTH + this.GAP) lampSprite.y = Math.floor(i / this.ROWS) * (this.SPRITE_HEIGHT + this.GAP) lampSprite.interactive = true lampSprite.buttonMode = true this.sprites.push(lampSprite) lampSprite.on('mousedown', () => this.onLampClick(lampSprite)) this.container.addChild(lampSprite) // Center lampSprite sprite in local container coordinates this.container.pivot.x = (this.container.width - this.SPRITE_WIDTH) / 2 this.container.pivot.y = (this.container.height - this.SPRITE_HEIGHT) / 2 } // Listen for animate update // Delta is the deltaTime. Could be usefull for smoth animation this.app.ticker.add(delta => { this.playDemo(delta) }) }, /** * Обработчик нажатия на элемент * @param {object} sprite - элемент * @returns {void} */ onLampClick(sprite) { //console.log('sdfg') //this.isdown = true //this.texture = textureButtonDown //sprite.zIndex = 100 sprite.texture = this.yellowLampTexture }, /** * Returns a random integer between min (inclusive) and max (inclusive). * The value is no lower than min (or the next integer greater than min * if min isn't an integer) and no greater than max (or the next integer * lower than max if max isn't an integer). * Using Math.round() will give you a non-uniform distribution! * @param {number} min - min value * @param {number} max - max value * @returns {number} */ getRandom(min, max) { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min + 1)) + min } } } </script> Will be very appreciated for help. pixi-error.mov
  14. 1 point
    If it works for you, i'll add it to pixi-projection myself, something as "POINT_X"
  15. 1 point
    For example, I took https://pixijs.io/examples/#/plugin-projection/quad-homo.js and added this. Now flowerTop guy scales with quad but doesnt actually rotate or move. You have to do the same with Matrix3d, just copy source from it and add extra "if". Dont use the source for my Matirx2d because it has different indices of matrix! const AFFINE = PIXI.projection.AFFINE; bunny.proj.affine = 123; PIXI.projection.Matrix2d.prototype.copyTo = function(matrix, affine, preserveOrientation) { const mat3 = this.mat3; const d = 1.0 / mat3[8]; const tx = mat3[6] * d, ty = mat3[7] * d; matrix.a = (mat3[0] - mat3[2] * tx) * d; matrix.b = (mat3[1] - mat3[2] * ty) * d; matrix.c = (mat3[3] - mat3[5] * tx) * d; matrix.d = (mat3[4] - mat3[5] * ty) * d; matrix.tx = tx; matrix.ty = ty; if (affine >= 2) { let D = matrix.a * matrix.d - matrix.b * matrix.c; if (!preserveOrientation) { D = Math.abs(D); } if (affine === AFFINE.POINT) { if (D > 0) { D = 1; } else D = -1; matrix.a = D; matrix.b = 0; matrix.c = 0; matrix.d = D; } else if (affine === AFFINE.AXIS_X) { D /= Math.sqrt(matrix.b * matrix.b + matrix.d * matrix.d); matrix.c = 0; matrix.d = D; } else if (affine === AFFINE.AXIS_Y) { D /= Math.sqrt(matrix.a * matrix.a + matrix.c * matrix.c); matrix.a = D; matrix.c = 0; } else if (affine === AFFINE.AXIS_XR) { matrix.a = matrix.d * D; matrix.c = -matrix.b * D; } else if (affine === 123) { let dist = Math.sqrt(matrix.a * matrix.a + matrix.c * matrix.c); matrix.a = dist; matrix.b = 0; matrix.c = 0; matrix.d = dist; } } return matrix; }
  16. 1 point
    Its not always, its just right now i have many problems and making from scratch takes extra brain power that i need
  17. 1 point
    EUREKA !!! here solution if (D > 0) { // HERE THE HACK D /= Math.sqrt(matrix.b * matrix.b + matrix.d * matrix.d); } https://www.pixiplayground.com/#/edit/N6zctqo-SZzlTatUNz1b_ Try slide perspective, _angle and zoom, everything is correctly fixed to camera, no more scale. now we maybe need a kind of flag or add new AFFINE formula ? !
  18. 1 point
    Dr Popet

    Pinball toy

    I was playing with the physics inside TUMULT HYPE and I make a little PINBALL, by now is so simple, but is very entertained, I'll be adding more things. Like my other projects is a simple one button game, well toy because I didn't add more details by now (I'm working on them) But you can still play PLAY HERE
  19. 1 point
    I enjoyed reading your post. I'm waiting for the continuation of this series.
  20. 1 point
    PIXI.Projection problem Hello, I am battling with PIXI.Projection I want to get the Transform of one object and use its world transform to add it to another container with the same dimesions. Basically I want to copy the exact object and pasting it on the other container should then match. So all is fine if I get the worldTransform of one object, and prepend the world transformation of the container, then creating an object by decomposing into a Transform. Stack 1 is the object i am copying from let cont = new PIXI.projection.Container3d(); let cont1 = new PIXI.projection.Container3d(); cont.addChild(cont1); let stack1Obj = new TableGame.Widget.ChipStack({amount:10}); let stack1 =stack1Obj.view; stack1.y -= 200; cont1.addChild(stack1); cont1.scale.set(3); cont1.x = 0; tableCont.addChild(cont); cont.x = 500; cont.y = 800; cont.alpha = 0.5; let m = new PIXI.projection.Matrix3d(); stack1.worldTransform.copyTo(m); let wt = new PIXI.projection.Matrix3d(); tableCont.worldTransform.copyTo(wt); wt = wt.invert(); m.prepend(wt); let m2 = new PIXI.Matrix(); m.copyTo(m2); let t = new PIXI.Transform(); m2.decompose(t); let stack3Obj = new TableGame.Widget.ChipStack({amount: 10}); let stack3 = stack3Obj.view; stack3.setTransform(t.position.x, t.position.y, t.scale.x, t.scale.y, t.rotation, t.skew.x, t.skew.y, t.pivot.x, t.pivot.y); tableCont.addChild(stack3); This code all works above to create a replica of an object and copy it to the table container. The moment I add in a camera with a euler on the x, the above doesn't work anymore. let camera = new PIXI.projection.Camera3d(); camera.setPlanes(800, 10, 10000, false); // true if you want orthographics projection camera.position.set(gameWidth / 2, gameHeight / 2 - 200); camera.euler.x = Sys.MathUtils.degToRad(deg); // Works with this commented out //camera.position3d.z = 0; //camera.y = 220; camera.addChild(tableCont); I know it has do with the current camera not being taking into account with all the previous matrix calculations. Lines up, There are no real docs on PIXI.projection so I'm a bit stuck. With a camera and euler angle I get this: Can anyone help, or knows what else I need to do here.
  21. 1 point

    The Sadlands

    Hey guys, made a multiplayer game for my band's album release where you can explore The Sadlands world and hear tunes with a group. This is the first game I have ever made so would love to hear your thoughts! ❤️ https://thesadlands.com
  22. 1 point
    Hi all, I want to show you a retro looking game made with JavaScript and only "type-in" sprites (all sprites are encoded inside the program source code) https://codeguppy.com/run.html?mars_attack/program If you are interested to see how this game was built, you can check this mini-tutorial that shows the game building process in 10 steps: https://codeguppy.com/code.html?t=mars_attack&list=games
  23. 1 point
    It looks like general application debug problem. Add if's for NULL's where you access "texture" field, place breakpoints inside those ifs, find why are you trying to call "null.texture". Also, beware of vue stuff that observes fields, or you'll have a problem like this: https://github.com/pixijs/pixi-spine/issues/358 Also, usually you can get faster help at russian-speaking html5 gamedev channels: https://t.me/gamedevforweb and https://t.me/webgl_ru
  24. 1 point

    Draw on top of rendered bitmap

    Thanks, I'm able to do it now.
  25. 1 point
    Thanks Ivan for you answer again! I understand that you are very busy and that you don't have time. I would be very grateful if you could take a look at this post again on the weekend and help me understand better the excellent PIXI.js.
  26. 1 point
    Hello, I'm a web programmer with 3 years of experience (currently a senior developer). I've always been a fan of videogames and now I'm starting learning game development just for fun. Like in any type of development , you always face problems and learn of those. Sharing is the strongest tool to learn, you help other people to prevent/fix mistakes and they help you. What am I looking for?: People like me that is learning to develop games and want to meet other people to make games with them, share experiences, ask&answer questions. How will we organize? I have experience managing large Telegram groups and also creating bots for groups. It is a good starting point since most of the people always carry the phone everywhere and also has a web/desktop application, also Telegram offers us a direct communication without compromising your privacy (you don't need to give real info or phone number to the rest of the group). If we start growing, we can just move to another platform you want (Discord, Slack, whatever is of your preference). Do you have any project scheduled? Yes, I want to build a fun roguelike, here is my current roadmap of the game: I am an artist, can I join? Sure! I'm sure you can learn from us and we can learn from you, Keep in mind that sound artists, level designers, programmers.. work together and they need to understand all the other positions to work properly. Of course this is a flexible diagram, I don't do this as my job and I don't have any deadlines, creating a roadmap just helps me with organization so I don't start wrongly (which with end even worse :P). Have in mind that my only goal is just learning, I'm not in a rush to make money or finding a job Just feel free to contact me if you want to join or if you doesn't like something of my post.
  27. 1 point

    HTML5 Multiplayer Games

    You can use a free hosting like Heroku or OpenShift
  28. 1 point

    Where to store positional data

    Hi there, I thought I would try Pixi.js for a project, and noted early on that it primarily calls itself a "rendering engine". So my first step was to write the game logic using standard JS. Now the designer has supplied some assets and I'm implementing Pixi. So previously I had classes like this: item = { x: 10, y: 10, update(){ this.x += 1; }, render(){ ctx.fillRect(this.x, this.y, 10, 10); } } My question is, should I keep my logic in the class, something like: item = { x: 10, y: 10, sprite: new Sprite("asset.png"), update(){ this.x += 1; }, render(){ this.sprite.position.set(this.x, this.y); } } That way I still have access to item.x and item.y for hit tests and things like that. Or would it be a good plan to just ditch almost everything I have now, and just use the Pixi Sprite? item = { sprite: new Sprite("asset.png"), setup(){ this.sprite.position.set(10,10); }, update(){ this.sprite.x += 1; } } I'm a relatively seasoned dev, but have zero experience with Pixi. Simple collision detection is probably the only logic I need other than updating positions. What would you do?
  29. 1 point

    [OverKnight] Roguelike card game

    Hi everyone, we are a small team of indie developers currently developing a HTML5 game for mobile which is basically a roguelike card game. The game is currently in alpha, and we would like you guys to try it out and give us some feedback. You can play the game by simply clicking this link: https://s3-ap-southeast-1.amazonaws.com/gkgames/overknight/alpha2/index.html (Play the game in fullscreen on mobile by adding the the url bookmark to your home screen) It is still in development, so please bear with the lack of features, BGM SE etc. Please help fill up this form, or simply leave your comments below. https://goo.gl/forms/O3MkCluv7j3wfus92 We have just created a facebook page for this project, so do like us to get updates on the game if you like it! https://www.facebook.com/OverKnightGame/ Thank you in advance! :)
  30. 1 point

    Endless Siege

    Endless Siege is one of our latest games. You can play it on clashdome.io https://clashdome.io/endless-siege/
  31. 1 point

    Internet Money the game

    @bbyford if you just use the teleport block every time it ends then attack at all other times you can’t be hurt
  32. 1 point

    Leftovers after cleanup

    I don't use it at all
  33. 1 point
    for v4, this works: Also: https://stackoverflow.com/questions/50221078/how-to-change-style-of-lines-using-pixi-js-graphics But for PIXI v5, there is no PIXI.Graphics().graphicsData (it is undefined). Does someone know how to update line style using PIXI v5? Best and cheers, R.
  34. 1 point
    Yes, that's correct. However, when image is not used for some time, browser removes RGBA from regular memory and only original jpg/png remains. That's purely browser feature, pixi has no control over it. I also recommend to use compressed textures when its possible , its x4 times less in videomem, but quality is subpar
  35. 1 point
    Here's a simple timelapse that shows how easily you can crate a fully functional webgl application using only Blender, Inkscape and Verge3D. Realtime of this video only 25 minutes.
  36. 1 point

    TexturePacker Multipacked Textures

    Hi, sorry but PIXI cant load multiPack from tp , but i asked Andreas Loew to add some meta to make this easier. So now you have 2 new meta named related_multi_packs and normal_map inside json to manage easier in PIXI. Check your version of Texture Packer pro, I can't remember what update where this added. here for you a example from my game loader core, it show you one way to manage and process multi-pack , normals, and animations. https://github.com/djmisterjon/ANFT/blob/e4002fab0428331fa5c5e844f1e9426a2795c5ec/js/game/global/loaders.js#L398 Sorry my example is very customised for my game engine and maybe not a good approche for you, i dont think you will can found a better free public demo code. Note this example is old and maybe have some weird code but it work. tips:look also for loader.pre https://pixijs.download/dev/docs/PIXI.Loader.html otherwise you would have to see with @xerver, (Autor) or @AndreasLoew , if they intends to implement a native multipack support in the PixiLoader with new metas from tp, but multi-pack remains a paid premium feature from tp. Sure , create a simple node programme to leech all your ressources files from a directory and build a register! no need to handwrite all your game resources ! Your will just need to have a good structures folders hierarchy. or use npm recursive-readdir https://www.npmjs.com/package/recursive-readdir
  37. 1 point
    Hi friends, I started working with these two companies at the same time, same games, same sdk. Both are very different and here I will tell you about my experience, I hope it will be useful to you as yours has served me. I uploaded to both platforms 2 games with more than 50 million players for a week, in Gamemonetize I am going to work a long time, in Gamedistribution today I closed the account and deleted my games. Contact: * In Gamemonetize is Katie, sweet, kind, decisive, quick to respond, my experience is unbeatable. * In Gamedistribution is Marco, it takes a long time to respond and the first few times I had to speak to his boss to make him do it, he is kind but tries to defend how indefensible his company's lousy service is. Distribution: * Gamemonetize spread my games through many small portals that cannot buy licenses nor have the platform for income distribution, it is exactly the public that needed to reach. * Gamedistribution did not spread my games anywhere, only their own games stand out. Profits: I cannot give the exact numbers for legal reasons but I will try to be very clear. * Gamemonetize: The two games in one week live generated around $ 10 a day, I want to clarify that the first day live gave a great boost exceeding $ 20, around $ 80 in total / week. * Gamedistribution: In approximately the same time the games generated $ 0.03 in total, between 0.00 and 0.01 a day between the two games. Games approval: * Gamemonetize: Almost immediately, a couple of hours. * Gamedistribution: Several days and I had to put a lot of pressure on the bosses, it is not enough just to send the game to the team that is in charge of it. I hope this works for you, any private question that you have is welcome
  38. 1 point
    I just tested your game and it works much better now! I finished level 5 and had no trouble at all.
  39. 1 point
    I have been payed by game monetize several times now.So i can confirm that they pay,and every time its been between the 25th and the 26th,that's much better than Gamedistributions "6 month delays"
  40. 1 point
    Dr Popet

    Arch Archer - Archery game

    Like all my games for c1ic.mx, this is a one button little archery game, trying too keep the look of the original TINY ARCADE games made in flash PLAY HERE ARCH ARCHER
  41. 1 point
    Dr Popet

    The future of online browser games

    What about Ruffle? the plug in for your site so you can still running flash, no need for the player to download a plug in because the site has the plug in installed for the players to watch the content, also seems to fix some flash plug in issues. Newgrounds is using it.
  42. 1 point
    Hello everyone, I think it would be great to share information about honest companies, which pay on time and such things, it would be good for us to understand that sharing that information will not take away sales, on the contrary, we have to be united to save ourselves work and problems, this is my experience, I hope you share yours: Income distribution: POKI: It is one of the best companies to work for, they are honest, there is direct contact with them all the time, they always pay and on time, they are friendly and responsible. I am happy to work with them CRAZYGAMES: It is an excellent company, they always pay on time, they are responsible and friendly, there is direct contact with them all the time, it was the first company I worked with in HTML5 and they taught me a lot, I will always be grateful and I recommend working with them. GOGY: My experience with them so far is very bad, terrible, they do not pay, they do not comply, I have been there for 6 months with my games and I have not received a dollar, I do not recommend working with them. Non-exclusive licenses: RHM (Twoplayergames): It is an incredible, honest and responsible company, I did a lot of business with them and they always comply, they are friendly, my experience with them is great, I love working with them, I recommend doing business with this company. LAGGED: Excellent company, they always comply, they are honest, kind and responsible, there is direct contact with them and I love working with them, I recommend doing business with this company. SILVERGAMES: I have a good experience with them, they are honest and kind, sometimes they take a while to respond to the messages but I like to work with them, sometimes you have to lower the price of the license but you have to take into account that they are a company small, I recommend this company. I hope this is the beginning of a collaboration between all, we have to be in solidarity with each other and help each other, I hope that everyone contributes their grain of sand, being selfish does not work in this business. Greetings to all Notice that English is not my native language and I apologize if there is any error in my writing, surely you will be able to understand me anyway.
  43. 1 point
    Hey There! I just programmed a new .io game. Basically have to buy properties and build buildings on it. Depending on what and where you build your stuff you can boost you income or harm other players. It's in early stage, so feel free to contact me about bugs and improvements. The game can be found on: little-investor.io I'm looking forward for your feedback.
  44. 1 point

    Has Anyone Put their Games on Kaios?

    It looked interesting, we investigated late 2019, including conversations with KaiOS HQ, but chose not to proceed. At the time the only monetisation was in-game-ads, there was no indication of the eCPM (the territories are likely low value?), the KaiStore features were under-evolved (so discoverability would be a crap-shoot?), the hardware was bespoke requiring proprietary APIs and implementations for best effect, and HQ were unwilling to offset any risk - not even supply a $100 device. Unlike the underlying OS and telco proposition, the games business model was entirely unoriginal in its approach and failed to impress. In summary adding a game to KaiStore represented as much work as publishing to iOS, Android, or Facebook but without the apparent market benefits, and arguably at a higher cost (because we didn't already own a proprietary device). Our conclusion was it's best to rely on publishing partners to pursue emerging markets like KaiOS (rather than pursue them directly) - being FirefoxOS / HTML5 this is easy for them to achieve. Or just publish to web where anyone on any device or OS can play already! Things may have changed since, and your mileage may vary so I'd recommend keeping an open mind nontheless. Ultimately it depends on how you value your time and what alternatives you have available. Good luck!
  45. 1 point
    Very nice site. I love it! Thanks for you sharing!
  46. 1 point

    How do you pass data to another scene?

    you need to pass data into the init function. So if you have this.scene.start('game', { level: 1 }) then in your game scene you need init(data){ this.level = data.level; }
  47. 1 point

    Runandrisk.io: My first io game

    I've been working in this game for a few months. The concept is something more or less new. Is like the Risk tabletop game but in real time. At this moment is in beta and I want to change some things of the rules. But is playable. Is for 3-4 players. Made with three.js and react-create-app basically. https://runandrisk.io/ Screenshot (Getting error uploading here)
  48. 1 point

    Phaser 3 nine slice plugin!

    Hey All! I needed to display some dialog boxes in a recent game and the old 9-slice plugin wasn't ported to v3 yet so I wrote one (github repo). I have a live demo here and a gif of it in use follows. Would love to see this get some use outside of my projects so give it a spin. I'm pretty active on the discord and try to check in here weekly so feel free to ping if you have any questions! Happy hacking!
  49. 1 point
    //1. use bind requestAnimationFrame(this.renderLoop.bind(this)); //2. use new function var self = this; requestAnimationFrame(function() { self.renderLoop(); } ); //3. use ES6 requestAnimationFrame(() => { this.renderLoop() } ); //4. bind function in constructor function FFT() { //... this.renderLoop = this.renderLoop.bind(this); } One cannot just walk into mordor^W^W^W use "this" in the function that is passed somewhere. Crash course on javascript.
  50. 1 point
    You can also use: camera.lowerRadiusLimitcamera.upperRadiusLimit