Autor
|
Tema: Verificar si paso x tiempo para realizar una accion (Leído 3,220 veces)
|
SlayerBur
Desconectado
Mensajes: 92
|
Buen día.
Estoy intentando hacer un código, y necesito que la persona no pueda realizar la misma acción, hasta que haya pasado 2 segundos (por ejemplo), pero a la vez, el programa debe continuar funcionando, por ende el sleep no me funcionaría :'(
Intente obteniendo los segundos actuales, y en una variable dentro del def, pero siempre me sumaría los 2 y nunca llegaría al tiempo
Código: time = datetime.datetime.now() tiempo = time.second + 2 if time.second > tiempo: print('Texto')
eso es lo que tendría dentro de mi clase / def. Intente colocar la variable en otro lado, pero siempre sería lo mismo, al intentar realizar la accion, volvería a sumar +2 al time. no se si se comprende mi duda
Pd. Estoy utilizando pygame
|
|
« Última modificación: 29 Mayo 2021, 23:22 pm por SlayerBur »
|
En línea
|
|
|
|
engel lex
|
Hola! asumo que esto es python3, no se que estás armando pero usualmente sería algo como from time import time #....... codigo fin_bloqueo = time() + 2 #....... if time() > fin_bloqueo: hacer_algo()
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
SlayerBur
Desconectado
Mensajes: 92
|
Hola! asumo que esto es python3, no se que estás armando pero usualmente sería algo como from time import time #....... codigo fin_bloqueo = time() + 2 #....... if time() > fin_bloqueo: hacer_algo()
Estoy intentando hacer un pequeño juego, y necesito que no se pueda pulsar / realizar una acción si se realizo previamente en un lapso de 2 segundos.
|
|
|
En línea
|
|
|
|
engel lex
|
en ese caso puedes crear una bandera tipo bloquear_inputs = False #variable externa al ciclo #ciclo principal del juego if bloquear_inputs: if time() > bloquear_inputs: bloquear_inputs = False else: if input_usuario(): hacer_accion() # acción que causa bloqueo de inputs bloquear_inputs = time() + 2
así si los inputs estan bloqueado se ve si es tiempo de desbloquear, en cualquier caso igual el ciclo sigue, pero no llega a "hacer_accion()", pero si no está bloqueado, entonces hace la acción. espero esto te ayude y puedas ajustarlo a tu código... sinceramente yo recomendaría para estas cosas hacer uso de multi hilos (threading) pero dependerá de que tan simple sea tu proyecto si eso vale la pena o no
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
DtxdF
Desconectado
Mensajes: 53
|
Hola @SlayerBur Para ello debe ajustar una variable que indique el tiempo límite que desea esperar después de realizar una acción. Esto es para tener un mejor orden, pero también puede optar por crear un archivo de configuración (ya sea con ConfigParser, TOML, JSON, etc.), aunque esto se sale del tema, es más una recomendación para su proyecto. Después de ajustar los segundos límites, también debe crear una variable donde hará referencia a el tiempo actual, el cual será usado para calcular los segundos transcurridos. Mucho después tiene que restar el tiempo actual con el tiempo que hace referencia esa variable, el cual le debería dar los segundos que han pasado. El siguiente código es un pequeño script a modo de ilustración, y si mira la línea 20 puede ver que si es None, ejecutará la acción, hará la acción y ajustará el tiempo actual. Es necesario para cuando la operación que se desea todavía no se ha realizado. #!/usr/local/bin/python3.7 import time # El tiempo a esperar TIME_LIMIT = 5 CURRENT_TIME = None print("Escriba la tecla P y presione ENTER.") while (True): try: cmd = input("> ") except (EOFError, KeyboardInterrupt): break if not (cmd): continue if (cmd[:1].lower() == "p"): if (CURRENT_TIME is None or time.time()-CURRENT_TIME >= TIME_LIMIT): print("Prueba") # Se reajusta el tiempo para poder realizar las mismas acciones CURRENT_TIME = time.time() else: print("Debes esperar %d segundos..." % (TIME_LIMIT)) elif (cmd[:1].lower() == "q"): break else: print("Error, comando inexistente")
Ejemplo: python3.7 main.py
Resultado: Escriba la tecla P y presione ENTER. > p Prueba > p Debes esperar 5 segundos... > Luego de esperar los 5 segundos, sucede la misma acción una y otra vez: ~ DtxdF
|
|
« Última modificación: 23 Mayo 2021, 03:52 am por DtxdF »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Al detectar un texto, realizar acción
Programación Visual Basic
|
jmordenata
|
2
|
1,635
|
13 Marzo 2007, 17:54 pm
por jmordenata
|
|
|
Realizar accion al cambiar de color un pixel
Programación Visual Basic
|
Demereth
|
2
|
3,145
|
3 Septiembre 2012, 20:36 pm
por Yoghurt
|
|
|
Realizar accion al medir salida de sonido
.NET (C#, VB.NET, ASP)
|
DarkProgrammer
|
3
|
2,847
|
21 Diciembre 2013, 21:56 pm
por Eleкtro
|
|
|
[BATCH] Realizar accion si se esta ejecutando un programa
Scripting
|
Tomii_Leiva1234
|
0
|
2,666
|
16 Octubre 2016, 19:48 pm
por Tomii_Leiva1234
|
|
|
Detectar un proceso y realizar una acción
.NET (C#, VB.NET, ASP)
|
Sentex
|
3
|
2,953
|
1 Junio 2017, 21:30 pm
por Eleкtro
|
|