Sign in to follow this  
BdR

Create group with multiple sprites at random positions

Recommended Posts

In Phaser 3 is it possible to create a group and add multiple sprites at random positions?

I've tried looking at the documentation here and the example here but couldn't figure out how to do it.

This is my code so far, it does add one coin at a random position each time I run it, butit only seems to add one single coin.

        // add random coins
        var coins = this.add.group();
        coins.createMultiple(
        {
            key: 'sprites',
            frame: 'coin1',
            setXY:
            {
                x: Phaser.Math.RND.between(0, 800),
                y: Phaser.Math.RND.between(0, 600)
            },
            frameQuantity: 2,
            repeat: 5
        });

Coming from Phaser v2, I've just started working with Phaser 3 and it takes some time to get to understand the differences.

Share this post


Link to post
Share on other sites

If you console.log the group - console.log(coins.children.entries) What is the length/size of the group? It's possible that you're creating all the coins you need but they're all being put on the same spot. If that's the case then it's because your call to random only happens once when the create multiple function is called. I guess it's because the function isn't a loop and so only acts on the parameters you provide. 

I'm not massively in the know about phaser, but you could try to circumvent this by simply creating coins in a loop and then adding them to the group. This way the random number will be new each iteration of the loop. 

Hope that helps.

Share this post


Link to post
Share on other sites

Thanks @NoxBrutalis I was focusing to much on the .createMultiple() method. Simply creating the coins in a loop and then adding them to the group worked for me :)

	this.gameitems = this.physics.add.group();

	for (var i = 0; i < 20; i++) {
		var x = Phaser.Math.RND.between(0, 800);
		var y = Phaser.Math.RND.between(0, 600);

		var newobj = this.gameitems.create(x, y, 'sprites', 'coin1');
	}

Btw is there a way to get the width and height values (800 and 600) from the current scene or game instead of using hardcoded numbers for the RND function?

Share this post


Link to post
Share on other sites

I believe that the the dimensions you give to the game config are the size of the camera's viewport rather than the world's dimensions, but if your camera is the extent of your world - you wont be implementing scrolling and you want everything in your scene to be visible etc, then you can access the camera. In my own project I just use this :

 

this.cameras.main. 

and the next thing can be either width, height, x or y. So depending on the complexity of your scene/camera, you could just use that.

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.

Guest
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.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.