CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 28 Sep 2020 20:54

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 11 mensajes ] 
Autor Mensaje
NotaPublicado: 08 Jun 2009 18:04 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Quiero acceder al parámetro tiempo de la propiedad de un objeto.
Pero no acierto con la sintaxis.

¿Cómo sería para comprobar el valor temporal de ("escena_pelea", true, -1) ?
En este caso sería al -1, claro.

Muchas gracias


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 08 Jun 2009 18:06 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Sería:

Código:
elObjeto.getPropertyTimeLeft("escena_pelea")

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 08 Jun 2009 18:36 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Sería:

Código:
elObjeto.getPropertyTimeLeft("escena_pelea")


Código:
bsh.InterpreterError: bad long unaryOperation

Sourced file: inline evaluation of: ``parseCommand( arg0, arg1, arg2);'' internal Error: bad long unaryOperation : at Line: 1 : in file: inline evaluation of: ``parseCommand( arg0, arg1, arg2);'' : parseCommand ( arg0 , arg1 , arg2 )



¿Qué puede ser? nunca me había salido ese error.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 08 Jun 2009 20:24 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
Al-Khwarizmi escribió:
Sería:

Código:
elObjeto.getPropertyTimeLeft("escena_pelea")


Código:
bsh.InterpreterError: bad long unaryOperation

Sourced file: inline evaluation of: ``parseCommand( arg0, arg1, arg2);'' internal Error: bad long unaryOperation : at Line: 1 : in file: inline evaluation of: ``parseCommand( arg0, arg1, arg2);'' : parseCommand ( arg0 , arg1 , arg2 )



¿Qué puede ser? nunca me había salido ese error.


Pues viendo eso sólo no lo sé, pero pégame (o mándame por mail, si lo prefieres) el código beanshell completo del método donde has llamado a getPropertyTimeLeft(), seguramente así vea el fallo.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 08 Jun 2009 20:29 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Pues viendo eso sólo no lo sé, pero pégame (o mándame por mail, si lo prefieres) el código beanshell completo del método donde has llamado a getPropertyTimeLeft(), seguramente así vea el fallo.


Ya he encontrado lo que lo provocaba pero sigo sin entender porqué.

Era una sentencia negativa así que al principio había puesto:

!objeto.getPropertyTimeLeft("propiedad") == -1

He quitado la interjección y ya no da el error.

Un saludo y gracias


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 08 Jun 2009 22:25 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
Ya he encontrado lo que lo provocaba pero sigo sin entender porqué.

Era una sentencia negativa así que al principio había puesto:

!objeto.getPropertyTimeLeft("propiedad") == -1

He quitado la interjección y ya no da el error.

Un saludo y gracias


Es por el tema de los paréntesis. En Java y Beanshell, el ! (negación) tiene más prioridad que el == (comparación). Esto quiere decir que lo que tú has puesto es como decir:

Código:
(!objeto.getPropertyTimeLeft("propiedad") ) == -1


que casca porque no puedes negar un número.

Por lo tanto, para que funcione con la negación, sólo tienes que ponerle el paréntesis, poniendo

Código:
!(objeto.getPropertyTimeLeft("propiedad") == -1)

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 11 Jun 2009 14:49 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Quería yo jugar con el leftime de los updates para crear 3 estados de una misma variable.
Si está a false y a 0, el update no ha tenido lugar.
Si está a true y a -1, el update ha tenido lugar.
Si está a true/false y a -2, el update no se va a activar más

Mi sorpresa ha sido descubrir que el valor de leftime es un tanto caprichoso.
Habiendo puesto el update a un valor de 1, para que se actualizara en cada turno, una vez resuelto el puzzle, lo pongo a -1 y luego compruebo su valor para que en caso de que sea -1 no se ejecute un else que tengo en ese objeto.
Como no funcionaba he añadido un write que me indicaba el valor del leftime de ese update.

Código:
COMANDO>>  m
el leftime de escena calles es -6


¿-6? :shock:

No me preocupa porque he decidido que a veces ahorrar variables solo sirve para tirar de la cuerda hacia un lado y dejarla corta del otro, así que voy a añadir variables que controlen la ejecución de los puzzles que son los que verdaderamente marcan la diferencia en la dimensión temporal de una localidad, pero me ha picado la curiosidad ¿de dónde ha salido ese -6?

Un saludo
Jenesis


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 11 Jun 2009 15:18 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
No me preocupa porque he decidido que a veces ahorrar variables solo sirve para tirar de la cuerda hacia un lado y dejarla corta del otro, así que voy a añadir variables que controlen la ejecución de los puzzles que son los que verdaderamente marcan la diferencia en la dimensión temporal de una localidad, pero me ha picado la curiosidad ¿de dónde ha salido ese -6?

Un saludo
Jenesis


Ese -6 aparece porque el AGE siempre decrementa el 1 el contador. Cuando te digo que "si lo pones a -1, es como si fuese infinito", efectivamente es así porque quiere decir que el update no se va a ejecutar nunca más, porque el contador nunca va a valer 0 (que es cuando se ejecuta). Pero por dentro, lo que hace el AGE es decrementar el contador y ver que no sea cero. Así que el contador puede acabar valiendo "menos lo que sea". Realmente todos los valores menores o iguales que -1 actúan como "infinito"; aunque yo te digo que uses siempre -1 por si acaso decido cambiar eso algún día y que los valores menores que -1 se usen para alguna otra cosa.

Es un simple detalle de implementación, que lo he implementado así como podía haberlo hecho de cualquier otra manera. Si crees que hay algún motivo por el que sería mejor que se quedara en -1, lo podría cambiar sin problemas. Pero de todas formas, yo creo que en el caso particular que pones es más elegante tener otra variable. Simplemente porque el "time left" significa eso, el tiempo que queda... creo que si quieres representar otra cosa distinta (en este caso, si el update se ejecutó o no) es mejor diseño crear otra variable ("update_ejecutado" o lo que sea) que usar valores del temporizador.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 11 Jun 2009 16:39 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Si crees que hay algún motivo por el que sería mejor que se quedara en -1, lo podría cambiar sin problemas.


Hombre serviría para que nadie más cayera en el error de usarlo como comprobante, pero sólo para eso ya que como bien dices es mucho mejor usar variables que no estén relacionadas con el update.

Un saludo y gracias


Arriba
 Perfil  
 
 Asunto: Desbordamiento
NotaPublicado: 11 Jun 2009 20:36 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2986
Ubicación: España (Galicia)
Hola !

Al-Khwarizmi escribió:
Ese -6 aparece porque el AGE siempre decrementa el 1 el contador. Cuando te digo que "si lo pones a -1, es como si fuese infinito", efectivamente es así porque quiere decir que el update no se va a ejecutar nunca más, porque el contador nunca va a valer 0 (que es cuando se ejecuta).


Sé que en la práctica es difícil (habría que estar jugando miles y miles de turnos), pero aún así existe la posibilidad de llegar a -2mil millones, que se desborde, y empezar a decrementar en 2mil millones, y ahí sí que podría llegar a ser cero.

Vamos, que ya digo que sería raro, pero para mi es como un "error potencial".

Salud !

Baltasar

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
NotaPublicado: 13 Jun 2009 11:15 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
baltasarq escribió:
Sé que en la práctica es difícil (habría que estar jugando miles y miles de turnos), pero aún así existe la posibilidad de llegar a -2mil millones, que se desborde, y empezar a decrementar en 2mil millones, y ahí sí que podría llegar a ser cero.

Vamos, que ya digo que sería raro, pero para mi es como un "error potencial".


Bueno, los temporizadores ya los hice para que fuesen longs (64 bits), así que el valor mínimo sería algo parecido a -9.223.372.036.854.775.800. Ese valor no se puede alcanzar en la práctica porque a un procesador le llevaría años aunque sólo fuese contar hasta ahí :)

Es cierto que si los temporizadores fuesen de 32 bits, sí que podría ser un problema (improbable, pero problema).

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 11 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM