Jump to content

  • Log In with Google      Sign In   
  • Create Account

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.

  • You cannot reply to this topic
5 replies to this topic

#1 lucky6969b   Members   -  Reputation: 636

Like
0Likes
Like

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.


Sponsor:

#2 Paradigm Shifter   Crossbones+   -  Reputation: 5436

Like
4Likes
Like

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

#3 warnexus   Prime Members   -  Reputation: 1504

Like
0Likes
Like

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)

{

// add your item to the screen

}

 

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.


#4 Ars7c3   Members   -  Reputation: 179

Like
0Likes
Like

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.

Here is a link to the SFML Timer page so you can learn more about it: http://www.sfml-dev.org/documentation/2.0/classsf_1_1Time.php.

 

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



#5 alnite   Crossbones+   -  Reputation: 2132

Like
0Likes
Like

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.



#6 Waterlimon   Crossbones+   -  Reputation: 2639

Like
0Likes
Like

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.



PARTNERS