• FEATURED

View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

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

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

5 replies to this topic

### #1lucky6969b  Members

Posted 13 June 2013 - 05:38 AM

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, 13 June 2013 - 11:31 PM.

Posted 13 June 2013 - 05:46 AM

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

"Most people think, great God will come from the sky, take away everything, and make everybody feel high" - Bob Marley

### #3warnexus  Prime Members

Posted 13 June 2013 - 08:19 AM

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, 13 June 2013 - 08:23 AM.

### #4Ars7c3  Members

Posted 13 June 2013 - 10:39 AM

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.

### #5alnite  Members

Posted 13 June 2013 - 11:33 AM

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.

### #6Waterlimon  Members

Posted 13 June 2013 - 11:42 AM

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)

o3o

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.