python concept

http://s5.postimg.org/yxr3ophfn/test.jpg

when i run this i get it printed twice but my intension was to print it only once. so what is the concept behind it

hello should be printed only once
but it is not!

Hello! Sensors have 4 triggered/input states:

http://www.blender.org/api/blender_python_api_2_74_5/bge.logic.html?highlight=input_none#bge.logic.KX_INPUT_NONE

If you don’t tell when you want to print hello, hello will be print once when the sensor is just activated, once per frame while the sensor is active, and once when the sensor is just released.

Your controller triggers twice. Any time a sensor triggers a controller, it will run the code. Sensors trigger for different reasons, but with keyboard / mouse sensors, when a key is pressed it sends a trigger and when it is released it sends a trigger. You can tell the first trigger from the second by the sensor state. The sensor is positive when the key is pressed, and negative when released:


def some_method(cont):
    sens = cont.sensors['Always']
    if not sens.positive:
        return

    print("Hello")

You should use the controller in module mode. To do this, copy this code into a text file called “xxx.py”, where xxx is a name of your choosing, with no spaces or mathematical symbols etc… (a valid module name). In the Python controller, you would enter “xxx.some_method” into the module field (with mode set to module, not script), where xxx is as before, and some_method is the name of the function above.

This checks if a sensor called ‘Always’ is positive.

how to get the time or frame interval bw positive and negative pulse.

iin case of keyboard sensor

Either using a timer property and reading the successive times if the sensor is positive and if the sensor is negative (all of which can be done in logic bricks), or using the time module:


from time import monotonic




def some_method(cont):
    own = cont.owner
    sens = cont.sensors['Mouse']
    
    if sens.positive:
        own['pressed_time'] = monotonic()
    
    else:
        delta_time = monotonic() - own['pressed_time']


        print(delta_time)

See:Double execution of a python controller

and Sensors - a word on pulses