changing image on which multiple sprites are based

Recommended Posts

Hi, I have image in cache on which multiple sprites are based like this:

a = game.add.sprite(0, 0, "image");
b = game.add.sprite(0, 0, "image");

Now: I want to change the underlying image's data like e.g. this (notice the "image" as argument to generateTexture):


This fails at runtime. According to what I've found out so far, I have to do it like this:

game.cache.getBitmapData("somedata").generateTexture("image", function(texture) {

The question is: is this achievable via more elegant way? The main problem I have with this is I have to keep track of every sprite that's based on "image",  because this:

game.cache.getBitmapData("somedata").generateTexture("image", function(texture) {
    // b.loadTexture("image");

also fails at runtime. Isn't this somehow covered by what Phaser already offers? Thx in advance.

Share this post

Link to post
Share on other sites

As far as i understand that u want to change all texture's on one place. If this is the case, you can create an array and push all elements that u want to track, when u want to change those simply use forEach function and load textures on them.

var trackImages = [];
a = game.add.sprite(0, 0, 'image');
b = game.add.sprite(0, 0, 'image');

//when u want to change them..
trackImages.forEach(function(val) {

One other choice is that you can check here :
I know its not about sprite's but you can simply extend Phaser.Sprite class to your custom class and update them all at once. I didn't try this out but it should work.

Share this post

Link to post
Share on other sites

Thanks, yeah, i know how to use basic JS to express what I want (and your example won't stand, generateTexture is asynchronous, which will complicate things if you want e.g. to extend Phaser.Sprite, imagine both a & b be both of that class and both call reRender() method that does what I've expressed). I'm interested merely in Phaser's internals. You linked a very good example. The one line in your example I'd like to find out either exists or not for my case is: 

bmd.dirty = true;

Notice this one line will automagically make all sprites having bmd as texture to update themselves. The reason I'm not using bitmapData as underlying data structure for my sprites is:


keys -> keys inside imageCache. If I could elevate multitexturing capability with bitmapData I wouldn't bother converting it and I'd be updating my sprites with that one dirty flag. So this is also good question: can I somehow elevate multitexturing capabilities with bitmapData? Thx.

Share this post

Link to post
Share on other sites

Thx again. Do you have anything specific in mind regarding the article you linked or it's just a result of generic "phaser multitexturing" google search? Because I'm (I mean - everybody is) fully capable of that (in fact I did some time ago and the result can be summarized as "setTexturePriority(keys) is a function that allows you to elevate multitexturing capability, keys are keys of Image objects in Phaser cache not bitmapData objects") and moreover the correct phrase to google was "phaser multitexturing bitmapdata".

Share this post

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.