# Letting a probability of an object to appear in the scene...

This topic is 1685 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

If on each frame update, I pick a randomized number, if this number is greater than 100000, then I let the object appear, is it an efficient or good way?

Thanks

Jack

Edited by lucky6969b

##### Share on other sites

Probably not... how high can the maximum number go!?

You are better off picking a random number between 0 and 1 (usually not including 1 with many API's) and using a percentage chance instead.

e.g. 20% to appear = rand(0 to 1) < 0.2

If your random number generator only gives you (positive) ints find out what the maximum is and divide the result by max-1 (make sure you don't use integer division though) - that will generate a number between 0 and 1 (not including 1).

##### Share on other sites

that for sure will not work because the probability from the random object is less than 1% which is a super low drop rate assuming

if your number was used in my approach stated below.

What you can do is achieve a 50% drop rate. This is written in Java:

Random random = new Random();

if(random.nextInt(2) == 1)

{

}

nextInt method returns an integer number between 0(inclusive) and 2(exclusive)

So it basically returns either 0 or a 1 which is 50% or (1/(total possibilties))

Edited by warnexus

##### Share on other sites

Not the most efficient way, but it would work. In SFML, you could do something like this: Create a timer, get a random number using rand() between and n, and set the timer to go off after the random number of seconds is up. After the timer goes off, you would execute whatever you wanted to happen.

If you're not using SFML, I'm sure you could easily apply it to another API.

##### Share on other sites

Typically you would use float [0..1) for probability.

However, let me point something else out to you:

If on each frame update, I pick a randomized number...

I'm stressing on that particular sentence.  This is a poor way to do any probability.  Regardless of how low the probability is, counting it on each frame update means it will happen very often!  If you say 1% chance of event X happening, and your game runs at 100fps, guess what happens?  In one second, event X will occur.

That's not what you want, right? Rather than counting it every frame, pick a more deterministic occurence of when you are going to count the probability.  Something like on a button press or on every second.

##### Share on other sites

He could apply the frame delta time to the random.

for a random between 0 and 1

if (rand(0-1) < 0.5*dt)

{

something...

}

would give you 50% chance regardless of FPS (i hope) of the object to appear during 1 second. Unless the FPS is less than 1. And the behaviour might still depend a bit on FPS.

But the timer method is probably the best way to go, as you can throw in some limits (like, always add 10 seconds to the spawn time in addition to the random delay, so no object will appear at a rate faster than once in 10 secs)