Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Programacion
Manual Programacion
CONTENIDO
AUTOPLAY MEDIA STUDIO 7.X.X ---------------------------------------------------------------------- 4
GUA DE SCRIPTING (CDIGO) ------------------------------------------------------------------------ 4
INTRODUCCIN ------------------------------------------------------------------------------------------------- 4
UN RPIDO EJEMPLO DE SCRIPT EN AUTOPLAY MEDIA STUDIO. ------------------------------ 4
IMPORTANTE CONCEPTOS DE SCRIPTING ------------------------------------------------------- 6
SCRIPT ES GLOBAL ----------------------------------------------------------------------- 6
EL SCRIPT ES SENSIBLE A MAYSCULAS Y MINSCULAS (CASE-SENSITIVE) ------------------- 6
COMENTARIOS --------------------------------------------------------------------------- 7
LA DELIMITACIN DE LAS DECLARACIONES ------------------------------------------------- 7
VARIABLES --------------------------------------------------------------------------------------------------------- 8
CULES SON LAS VARIABLES?------------------------------------------------------------ 8
MBITO DE APLICACIN VARIABLE --------------------------------------------------------- 9
Variables locales -------------------------------------------------------------------- 9
NOMBRES DE VARIABLES ----------------------------------------------------------------10
PALABRAS CLAVE (RESERVADAS) ---------------------------------------------------------11
TIPOS Y VALORES -----------------------------------------------------------------------11
Nmero (Number) -----------------------------------------------------------------12
Ninguna (Nil) ----------------------------------------------------------------------15
Boolean (Si o No) ------------------------------------------------------------------15
Funcin (Function) ----------------------------------------------------------------15
Arreglos (Table) -------------------------------------------------------------------16
Ejemplo 1: -------------------------------------------------------------------------------- 16
Ejemplo 2: -------------------------------------------------------------------------------- 16
3
FUNCIONES ------------------------------------------------------------------------------------------------------ 31
ARGUMENTOS DE UNA FUNCIN ----------------------------------------------------------32
VALORES DE RETORNO ------------------------------------------------------------------33
MLTIPLES VALORES DE RETORNO--------------------------------------------------------33
REDEFINICIN DE FUNCIONES ------------------------------------------------------------34
PONER FUNCIONES EN LAS TABLAS -------------------------------------------------------34
MANIPULACIN DE CADENAS ------------------------------------------------------------------------- 35
CONCATENAR CADENAS ------------------------------------------------------------------35
COMPARACIN DE CADENAS -------------------------------------------------------------36
CONTAR CARACTERES -------------------------------------------------------------------37
BUSCAR CADENAS-----------------------------------------------------------------------37
EXTRACCIN EN CADENAS ---------------------------------------------------------------38
CONVERSIN DE CADENAS NUMRICAS EN NMEROS ---------------------------------------39
OTRAS FUNCIONES PRE-CONSTRUIDAS INCORPORADAS ---------------------------- 41
SCRIPT DE FUNCIONES -----------------------------------------------------------------41
DOFILE ---------------------------------------------------------------------------------41
REQUIRE -------------------------------------------------------------------------------42
TYPE -----------------------------------------------------------------------------------42
ACCIONES ------------------------------------------------------------------------------43
LA DEPURACIN DE SUS SCRIPTS ----------------------------------------------------------------- 43
MANIPULACIN DE ERRORES -------------------------------------------------------------44
ERRORES DE SINTAXIS ------------------------------------------------------------------44
ERRORES FUNCIONALES -----------------------------------------------------------------45
LAS ACCIONES DE DEPURACIN ----------------------------------------------------------46
Application.GetLastError ----------------------------------------------------------46
Debug.ShowWindow --------------------------------------------------------------48
Debug.Print ------------------------------------------------------------------------48
Debug.SetTraceMode --------------------------------------------------------------49
Debug.GetEventContext ----------------------------------------------------------50
Dialog.Message --------------------------------------------------------------------51
CONSIDERACIONES FINALES-------------------------------------------------------------------------- 51
OTROS RECURSOS ----------------------------------------------------------------------51
ARCHIVOS DE AYUDA --------------------------------------------------------------------51
GUA DEL USUARIO----------------------------------------------------------------------51
SITIO WEB DE AUTOPLAY MEDIA STUDIO-------------------------------------------------52
INDIGO AUMENT EL APOYO TCNICO -----------------------------------------------------52
EL SITIO WEB DE LUA -------------------------------------------------------------------52
Script es Global
El motor de scripting es global para el entorno en tiempo de ejecucin. Esto
significa que todos los eventos de su voluntad "saber" acerca de otras
variables y funciones declarados en el resto del producto. Por ejemplo, si
asigna "mivar = 10;" en el proyecto en el evento On Startup, mivar
ser igual a 10, cuando el prximo evento es activado. Hay formas en torno
a esta naturaleza mundial, pero es generalmente cierto en el caso del motor
de scripting.
Comentarios
Puede insertar comentarios no ejecutables en sus escrituras para explicar y
documentar el cdigo. En un script, cualquier texto despus de dos guiones
(--) en una lnea ser ignorado. Por ejemplo:
-- Asignar 10 a la variable abc
abc = 10;
... o:
abc = 10; -- Asignar 10 a abc
Los dos ejemplos anteriores hacen exactamente la misma cosa, los
comentarios no afectan a los script en modo alguno.
Tambin puede crear multi-lnea mediante el uso de comentarios -- [[ y ]] - a ambos lados del comentario:
-- [[Esto es
un comentario
multi-lnea]] -a = 10;
Usted debe usar los comentarios para explicar sus escrituras en la medida
de lo posible, a fin de que sean ms fciles de entender por usted mismo y
otros.
Script 3:
a = 10;
Mivar = a;
Sin embargo, le recomendamos que todas las declaraciones finalicen con un
punto y coma (como en los script 2 y 3).
Variables
Cules son las variables?
Las variables son muy importantes para los script en AutoPlay. Las variables
son, simplemente, "apodos" o "marcadores" de los valores que deben ser
modificados o reutilizados en el futuro. Por ejemplo, la siguiente secuencia
de comandos asigna el valor 10 a una variable llamada "cantidad".
cantidad = 10;
Nota: Nosotros decimos que los valores son "asignados a" o
"depositados en" variables. Si, una variable de la imagen de un
contenedor donde se puede almacenar un valor, asignando un valor
a una variable es como "depositamos" el valor en un contenedor.
Puede cambiar este valor en cualquier momento, al asignar un valor
diferente a la variable, el nuevo valor simplemente reemplaza al
antiguo. Esta capacidad de mantener la informacin cambiante es lo
que hace que las variables sean tan tiles.
Aqu hay un par de ejemplos que demuestran cmo se puede operar sobre
la variable "cantidad":
cantidad = 10;
cantidad = cantidad + 20;
Dialog.Message ("Valor", cantidad);
Esta expresin asigna 10 a la variable llamada cantidad, y luego aade 20
al valor que mantiene, y entonces finalmente muestra un mensaje donde el
valor actual de dicha variable ser 30.
Tambin puede asignar una variable a otro:
a = 10;
b = a;
Dialog.Message ("Valor", b);
Esto har que aparezca un cuadro de mensaje con el nmero 10 en el
mismo. La lnea "b = a;" asigna el valor de "a" (que es 10) a "b."
Variables locales
Por naturaleza global del motor de script, significa que una variable
conservar su valor en todo el proyecto. Sin embargo, puede hacer que las
variables no sean globales, utilizando las palabras clave "local." Poner la
palabra "local" en frente de una asignacin a variable crea una variable
que es local a la actual funcin o script.
Por ejemplo, digamos que usted tiene los siguientes tres script en el mismo
proyecto:
Script 1:
-- Asignamos el valor 10 a x
x = 10;
Script 2:
local x = 500;
Dialog.Message ("El valor local de x es:", x);
x = 250; -- esto cambia a local a x, no es Global
Dialog.Message ("El valor local de x es:", x);
Script 3:
10
-- Mostrar el valor global de x
Dialog.Message ("El valor global de x es:", x);
Supongamos que estos tres script se realizan una tras otro. El primer script
da el valor 10 a x. Dado que todas las variables son globales por defecto, x
tendr este valor dentro de todos los dems script tambin. El segundo
script hace una sesin local de x, dndole el valor de 500, pero slo dentro
de ese script. Si cualquier otra cosa dentro de ese script quiere tener acceso
al valor de x, se vera el valor local en lugar del valor global. Esto sucede
porque la variable "x" ha sido sustituida temporalmente por otra variable
que se ve igual, pero tiene un valor diferente.
(Esto me recuerda a las pelculas Caper, donde en el banco, los ladrones
poner una foto delante de la cmaras de seguridad por lo que el guardia no
ver que la bveda est vaca. Slo en este caso, es como el banco robado,
crear una nueva bveda de trabajo, al igual que el original, y a
continuacin, la desmantelan cuando se van.)
Cuando le pide mostrar el contenido de x, la primera accin Dialog.Message
dentro del script # 2 mostrar 500, ya que es el valor local de x cuando la
accin se lleva a cabo. La siguiente lnea asigna el valor local de 250 a x,
note que una vez que usted haga una variable local, esta reemplaza
completamente la variable global para el resto del script.
Por ltimo, el tercer script muestra el valor global de x, que sigue siendo
10.
Nombres de Variables
Los nombres de variables pueden estar compuestos de cualquier
combinacin de letras, dgitos y guin bajo (underscores), siempre que no
comiencen con un nmero y no entren en conflicto con palabras clave
(reservadas).
Ejemplos vlidos de nombres de variables:
un
strNombre
_Mi_Variable
dato1
dato_1_23
ndice
bReset
nContar
Ejemplos no vlidos de nombres de variables:
1
1dato
%% MiValor
$ strDato
11
para
local
_PrimNombre + Apellidos_
Nombre de usuario
break
false
local
return
while
do
for
nil
table
else
function
not
then
elseif
if
or
true
Tipos y Valores
El lenguaje de scripting de AutoPlay es dinmicamente tipado. No hay
ningn tipo de definiciones - en lugar de ello, cada valor tiene su propio
tipo.
Lo que esto significa es que usted no tiene que declarar una variable a ser
de un determinado tipo antes de usarlo. Por ejemplo, en C++, si desea
utilizar un nmero, usted tiene que declarar primero el tipo de la variable y,
a continuacin, asignar un valor a la misma:
int j;
j = 10;
El ejemplo de C++ declara a j como un entero, y a continuacin, asigna
10 a la misma.
Como hemos visto, en AutoPlay slo se puede asignar un valor a una
variable sin declarar su tipo. En realidad las variables no tienen tipos de
cambio, es dentro de los valores que se consideran los tipos, entre un tipo u
otro. Por ejemplo:
j = 10;
... esto crea automticamente la variable llamada "j" y asigna el valor 10 a
la misma. Aunque este valor tiene un tipo (es un nmero), la variable es
todava typeless. Esto significa que usted puede dar vuelta alrededor y
asignar un tipo diferente de valor a j, de este modo:
j = "Hola";
Esto sustituye al nmero 10 que se almacena en j con la cadena "Hola." El
hecho de que una cadena es un tipo diferente de dato no importa, la
variable j no le importa qu tipo de dato tiene, slo le importa lo que puso
en l.
Hay seis tipos de datos bsicos en AutoPlay: number, string, nil,
12
boolean, function y table. En las secciones siguientes se explicar cada
tipo de dato con ms detalle.
Nmero (Number)
Un nmero es exactamente eso: un valor numrico. El nmero representa
el tipo de nmeros reales, concretamente, valores de doble precisin de
punto flotante. No hay distincin entre enteros y nmeros de punto flotante
(tambin conocidos como "fracciones ")... todos ellos son slo" nmeros.
He aqu algunos ejemplos de nmeros vlidos:
4
4.
.4
0.4
4.57e-3
0.3e12
13
Normalmente, el motor de script ve comillas dobles como el marcador de
inicio o final de una cadena de caracteres. Con el fin de incluir comillas
dobles dentro de una cadena de caracteres encerrados en comillas dobles, y
que necesita para escapar de ellos con una barra invertida (\). Esto le dice
al motor de script que desee incluir una cita de carcter real en la cadena
de caracteres.
La barra invertida y la comilla doble (\") son conocidas como una secuencia
de escape. Una secuencia de escape es una secuencia especial de
caracteres que se convierten o "traducen" en otra cosa por el motor de
script. Las secuencias de escape le permiten incluir cosas que no pueden ser
escritas directamente en una cadena.
Las secuencias de escape que puede utilizarse en AutoPlay son:
\a
\b
\f
\n
\r
\t
\v
\\
\"
\'
\[
\]
campana
de retroceso
salto de pagina
nueva lnea
retorno de carro
tabulacin horizontal
tabulacin vertical
barra invertida
comillas
apstrofe
corchete izquierdo
corchete derecho
As, por ejemplo, si desea mostrar tres lneas de texto en una nica cadena,
haga lo siguiente:
Lineas = "Lnea uno. \nLinea dos. \nLinea tres";
Dialog.Message ("Aqu se muestra un String", Lineas);
Este asigna una cadena a una variable denominada Lneas, y utiliza la
nueva secuencia de escape para iniciar una nueva lnea despus de cada
frase. La funcin Dialog.Message muestra el contenido de la variable Lineas
en un cuadro de mensaje, como este:
14
Cada doble barra representa una nica barra cuando se utiliza dentro de
una cadena.
Si conoce la tabla ASCII, puede utilizar una barra invertida seguida de un
nmero de hasta tres dgitos para representar el valor de cualquier carcter
ASCII. Por ejemplo, el valor ASCII de un carcter de nueva lnea es de 10
(el valor de a minscula en la tabla ASCII), por lo que las dos lneas
siguientes hacer exactamente lo mismo:
Lineas = "Lnea uno. \nLinea dos. \nLinea tres";
Lineas = "Lnea uno. \10Linea dos. \10Linea tres";
Sin embargo, usted no tendr que utilizar este formato muy a menudo, o
nunca.
Tambin se puede definir cadenas en varias lneas con/entre doble
corchetes ([[y]]). Una cadena entre doble corchetes no necesita ningn
carcter de escape. El estar entre doble corchetes le permite a la cadena
usar todo tipo de caracteres especiales como barras, saltos de lnea y
comillas simples y dobles en la cadena de caracteres. Por ejemplo:
Lineas = [[Lnea uno.
Lnea dos.
Lnea tres.]];
es equivalente a:
Lineas = "Lnea uno. \nLinea dos. \nLinea tres";
Esto puede ser til si usted tiene pre-texto que desea utilizar como una
cadena, y no desea tener que convertir todos los caracteres especiales en
secuencias de escape.
La ltima cosa importante a saber acerca de las cadenas es que el motor de
scripting proporciona conversin automtica entre nmeros y cadenas de
caracteres en tiempo de ejecucin. Cuando una operacin numrica se
aplica a una cadena de caracteres, el motor intenta convertir la cadena a un
nmero para la operacin. Por supuesto, esto slo tendr xito si la cadena
contiene algo que puede interpretarse como un nmero.
Por ejemplo, las siguientes lneas son vlidas:
a = "10" + 1; -- es de 11 Resultados
b = "33" * 2; -- es de 66 Resultados
Sin embargo, las siguientes lneas no le dan el mismo resultado de la
conversin:
a = "10 +1"; -- El resultado es la cadena "10 +1"
b = "hola" + 1; -- Error, no se puede transformar "hola" a un
nmero
15
Ninguna (Nil)
Ninguna es un tipo dato de valor ausente. Bsicamente representa la
ausencia de cualquier otro tipo de valor.
Puede asignar cero a una variable, al igual que cualquier otro valor. Tenga
en cuenta que esto no es lo mismo que la asignacin de las letras "cero" a
una variable, como en una cadena. Al igual que otras palabras clave, Nil
debe ser escrita al lado derecho de la variable con el fin de ser reconocidos
como un tipo de valor. Tambin debe ser escrita en letras minsculas.
Nil siempre se evala como falsas cuando se utiliza en una condicin:
a = nil;
if a then
-- Ingrese ac todas las lneas
-- Esta expresin no se ejecutar
end
Tambin puede ser utilizado para "eliminar" el valor de una variable:
y = "Henry Diaz";
y = nil;
En el ejemplo anterior, "y" ya no contienen un valor despus de la segunda
lnea.
Funcin (Function)
16
El motor de scripts le permite definir sus propias funciones (o "subrutinas"), que son esencialmente pequeos pedazos de script que puede ser
ejecutado en la demanda. Cada funcin tiene un nombre que se utiliza para
identificar la funcin. Usted puede utilizar el nombre de la funcin como un
valor de tipo especial, con el fin de almacenar una "referencia" para esa
funcin en una variable, o pasar a otra funcin. Este tipo de referencia es el
valor del tipo function (funcin).
Arreglos (Table)
Las tablas o arreglos son una forma muy poderosa para almacenar listas de
valores indexados bajo un nombre. Las tablas son en realidad arrays
asociativos, es decir, que son arreglos que pueden ser indexados, no slo
con nmeros, sino con cualquier tipo de valor (incluyendo cadenas).
He aqu algunos ejemplos rpidos.
Ejemplo 1:
nombres = {"Henry", "Evert", "Paguada"};
Dialog.Message ("Segundo nombre en la lista", nombres[2]);
Esto mostrar un cuadro de mensaje con la palabra "Everth" en el.
Ejemplo 2:
t = {};
t.Nombre = "Henry";
t.Apellido = "Daz";
t.Ocupacion = "Programador";
Dialog.Message(t.Nombre, t.Ocupacion);
Esto mostrar el mensaje siguiente cuadro:
Se pueden asignar tablas con otras variables como as. Por ejemplo:
arreglo_uno = {};
arreglo_uno.Nombre = "Henry";
arreglo_uno.Apellido = "Daz";
arreglo_uno.Ocupacion = "Programador";
arreglo_dos = arreglo_uno;
ocupacion = arreglo_dos.Ocupacion;
Dialog.Message(b.Nombre, ocupacion);
Los arreglos se pueden indexar utilizando notacin matriz (mi_arreglo [1]),
17
o por la notacin
(mi_arreglo.Apellido).
punto
en
vez
de
indexados
por
nmeros
Asignacin a variable
Las variables pueden tener los nuevos valores asignados a ellos mediante el
operador de asignacin (=). Esto incluye copiar el valor de una variable en
otra. Por ejemplo:
a = 10;
b = "Soy feliz";
c = b;
Es interesante observar que el motor de scripts soporta mltiples tareas de
asignacin:
a, b = 1, 2;
Despus del script, la variable "a" contiene el nmero 1 y la variable "b"
contiene el nmero 2.
Los arreglos y las funciones son parte de un caso especial: cuando se utiliza
el operador de asignacin sobre una arreglo o funcin, se crea un alias que
apunta al mismo arreglo o funcin, es cuando la variable comienza a
"copiarse". Muchos programadores llaman a este modo Por Referencia
que es distinto al otro mtodo de copiado llamado Por Valor.
18
Expresiones y operadores
Una expresin es todo lo que se evala como un valor. Esto puede incluir un
nico valor, como "6" o un valor complejo construido con los operadores
tales como "1 + 3". Puede utilizar parntesis para "agrupar" las expresiones
y control del orden en el que se evalan las expresiones con sus
operadores. Por ejemplo, las siguientes lneas al ser evaluadas, todas
devuelven el mismo valor:
a
a
a
a
=
=
=
=
10;
(5 * 1) * 2;
100 / 10;
100 / (2 * 5);
Operadores aritmticos
Operadores aritmticos se utilizan para realizar operaciones matemticas
sobre los nmeros. Los siguientes son los operadores matemticos
soportados:
+
*
/
unario -
(Adicin)
(Resta)
(Multiplicacin)
(Divisin)
(negacin)
Operadores relacionales
Operadores relacionales le permiten comparar cmo se relaciona un valor a
otro. Los siguientes operadores relacionales son compatibles:
>
<
<=
>=
~=
==
(Mayor que)
(Menor que)
(Menor que o igual a)
(Mayor o igual a)
(Desigual)
(Igualdad)
19
a = 10;
a > 300; -- falso
(3 * 200) > 500; -- verdadero
"Brett" ~= "Lorne" - verdadero
Un punto importante a mencionar es que los operadores == y ~= al
completar la prueba de igualdad, son case-sensitive, lo que significa que en
cualquier cadena, al hacer comparaciones con los operadores, distinguen
entre maysculas y minsculas. Por ejemplo:
"Jojoba" == "Jojoba"; -- verdadero
"Salvajes" == "salvajes" -- falso
"Me gusta mucho" == "me gusta MUCHO" -- falso
"feliz" ~= "FeLIz"; -- verdadero
Operadores lgicos
Operadores lgicos se utilizan para realizar operaciones booleanas sobre los
valores booleanos. Los siguientes operadores lgicos son compatibles:
and
or
not
Por ejemplo:
a
b
c
d
e
=
=
=
=
=
true;
false;
A and B; - falso
cero and nil; - falso
not b; - verdadero
Tenga en cuenta que slo los valores nulos y falsos se consideran falsas, y
todos los dems valores son verdaderos.
Por ejemplo:
soyinvisible = nil;
if soyinvisible then
-- Las lneas de aqu no va a ocurrir
-- Porque soyinvisible se considera falsa
Dialog.Message ("Usted no puede verme!", "Yo soy invisible
!!!!");
end
if "Brett" then
-- Las lneas de aqu se ejecutaran, porque Brett no es
negativa, ni falsa
-- Se consideran falsas ... cualquier otra cosa,
incluyendo cadenas,
-- se consideran verdaderas.
Dialog.Message ("Qu pasa con las cadenas?", "Las cadenas
20
son verdaderas.");
end
Concatenacin
En los script de AutoPlay, el operador de concatenacin es de dos perodos
(..). Se utiliza para combinar (unir) dos o ms cadenas de caracteres. Usted
no tiene que poner espacios antes y despus de los perodos, pero se puede
si lo desea.
Por ejemplo:
name = "Henry".."Diaz"; --asigna "Henry Diaz" a la variable name
b = name .." es nmero" .. 1; --asigna "Henry Diaz es el nmero
1" a b
or
>
<=
>=
~=
==
-/
- (unario)
21
... es el mismo:
(a + 1) < ((b/2) + 1)
... y puede utilizar parntesis para cambiar el orden de los clculos,
tambin:
a + 1 < b/(2 + 1)
En este ltimo ejemplo, en lugar del 1 que se aade a la mitad de B, B se
divide por 3.
Estructuras de control
El motor de scripts soporta las siguientes estructuras de control: if, while,
repeat y for
If (Si)
Una declaracin if evala su condicin y a continuacin, slo ejecuta parte
del cdigo despus de then si la condicin es verdadera. Una declaracin
if es terminada por la palabra clave end. La sintaxis bsica es la
siguiente:
if condicin then
hacer algo aqu
end
Por ejemplo:
x = 50;
if x > 10 then
Dialog.Message ("resultado", "x es mayor que 10");
end
y = 3;
if ((35 * y) < 100) then
Dialog.Message ( "", "y es 35 veces inferior a 100");
end
En el script de arriba, slo el primer mensaje de dilogo que aparezca,
porque si la segunda condicin no es verdadero... 35 veces 3 es 105, y 105
no es inferior a 100.
Tambin puede utilizar else y elseif para aadir ms posibles retornos a la
declaracin if:
x = 5;
if x > 10 then
Dialog.Message ("", "x es mayor que 10");
else
Dialog.Message ("", "x es igual o inferior a 10");
end
22
En el ejemplo anterior, el segundo mensaje es el que se muestra, ya que 5
no es superior a 10.
x = 5;
if x == 10 then
Dialog.Message ( "", "x es exactamente igual a 10");
elseif x == 11 then
Dialog.Message ( "", "x es exactamente igual a 11");
elseif x == 12 then
Dialog.Message ( "", "x es exactamente igual a12");
else
Dialog.Message ( "", "x no es igual a 10, 11 o 12");
end
En este ejemplo, el ltimo mensaje de dilogo se muestra, ya que x no es
igual a 10, o 11, o 12.
While (Mientras)
La declaracin While se utiliza para ejecutar el mismo "bloque" del script
una y otra vez hasta que se cumple una condicin. Al igual que la
declaracin if, la declaracin while se finaliza con la palabra clave end.
La sintaxis bsica es la siguiente:
while condicin do
hacer algo aqu
end
El resultado de la declaracin while debe ser verdadero para que se
ejecuten las acciones que se encuentran en el interior (el "hacer algo aqu"
en la parte superior) para ser realizadas. La declaracin while seguir el
bucle siempre cuando esta condicin es verdadera. As es como funciona:
Si la condicin es verdadera, todas las acciones entre el "mientras" y el
correspondiente "fin" se llevarn a cabo. Cuando el "fin" se alcanza, la
condicin ser reevaluado y, si es cierto, las acciones entre el "mientras" y
el "fin" se llevarn a cabo de nuevo. Las acciones seguirn como este bucle
hasta que la condicin se evala como falsa.
Por ejemplo:
a = 1;
while a < 10 do
a = a + 1;
end
En el ejemplo anterior, el "a = a + 1;" la lnea se llevar a cabo a 9 veces.
Usted puede salir de un bucle while en cualquier momento utilizando la
palabra clave "break". Por ejemplo:
contador = 1;
while contador < 100 do
contador = contador + 1;
23
if contador == 50 then
break;
end
end
Aunque la declaracin while que est dispuesta a contar del 1 al 99, la
declaracin if causa que este bucle termine tan pronto como llegue a contar
con 50.
Repeat (Repita)
La declaracin Repeat es similar a la declaracin while, salvo que la
condicin se comprueba al final de la estructura en lugar de al principio. La
sintaxis bsica es la siguiente:
repeat
hacer algo aqu
until condicin
Por ejemplo:
i = 1;
repeat
i = i + 1;
until i > 10
Esto es similar a uno de los anteriores bucles while, pero esta vez, el bucle
se realiza 10 veces. La expresin "i = i + 1; es ejecutado antes de que la
condicin determina que 1 es ahora mayor que 10.
Usted puede salir de un bucle de repeticin en cualquier momento utilizando
la palabra clave "break". Por ejemplo:
contador = 1;
repeat
contador = contador + 1;
if contador == 50 then
break;
end
until contador > 100
Una vez ms, lo que provoca la salida del bucle es tan pronto como es
evaluado que contador es igual a 50.
For (Para)
La declaracin For es usado para repetir un bloque de script de un nmero
especfico de veces. La sintaxis bsica es la siguiente:
for variable = inicio, fin, steep do
hacer algo aqu
end
24
La variable usada en la declaracion For puede llevar cualquier nombre, o el
que desee. Se utiliza una variable, en este caso contador para "contar" el
nmero de vueltas que debe procesar el bucle for. Se inicia en el parmetro
que va despus del signo igual, con el valor que usted especifique y a
continuacin, los cambios en el importe en el paso despus de cada viaje a
travs del bucle. En otras palabras, el paso se aade al valor en la variable
despus de las lneas entre el final y se llevan a cabo. Si el resultado es
menor que o igual al valor final, el bucle sigue desde el principio.
Por ejemplo:
- Este bucle cuenta de 1 hasta 10:
for x = 1, 10 do
Dialog.Message ("Nmero", x);
end
El ejemplo anterior muestra 10 mensajes de dilogo en una fila, contando
del 1 al 10.
Tenga en cuenta que el paso es opcional, si no se declara un valor para el
paso, por defecto el valor sera1.
He aqu un ejemplo que utiliza el paso de un "-1" para hacer el bucle para
contar hacia atrs:
- Este bucle cuenta a partir del 10 hasta 1:
for x = 10, 1, -1 do
Dialog.Message ("Nmero", x);
end
Ese ejemplo se muestra 10 mensajes de dilogo en una fila, contando a
partir del 10 de vuelta y va todo el camino a 1.
Usted puede salir de un bucle para en cualquier momento utilizando la
palabras clave "break". Por ejemplo:
for i = 1, 100 do
if contar == 50 then
break;
end
end
Una vez ms, lo que la salida del bucle tan pronto como fue igual a 50.
Tambin hay una variacin en el bucle para que funcione en los cuadros.
25
= {};
[1] = "manzana";
[2] = "naranja";
[3] = "melocotn";
asociar_tabla = {};
asociar_tabla.fruta = "manzana";
asociar_tabla.vegetal = "zanahoria";
Arrays numricos
Uno de los usos ms comunes de las tablas es como Matrices. Una Matriz es
una coleccin de valores que estn indexados por llaves numricas. En el
motor de scripting, las matrices numricas son basadas en uno. Es decir,
que comienzan en el ndice 1.
He aqu algunos ejemplos numricos utilizando matrices:
Ejemplo 1:
miMatriz ={255,0,255};
Dialog.Message ("Primer Nmero", miMatriz[1]);
Esto mostrar un mensaje de dilogo que contiene el nmero "255."
26
Ejemplo 2:
alfabeto = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
"x","y","z"};
Dialog.Message ("Sptima Carta", alfabeto[7]);
Esto mostrar un mensaje de dilogo que contiene la letra "g"
Ejemplo 3:
miMatriz
miMatriz
miMatriz
miMatriz
= {};
[1] = "Opcin Uno";
[2] = "Opcin Dos";
[3] = "Opcin Tres";
Arreglos asociativos
Arreglos asociativos son los mismos que los arreglos numricos, salvo que
los ndices pueden ser nmeros, cadenas o incluso funciones.
Aqu est un ejemplo de una matriz asociativa que utiliza un apellido como
un ndice y un nombre como el valor:
matNombres = {Diaz =Henry,
Sanabria ="Everth",
Lemus ="Edwin",
Paguada ="Henry",
Hitchcock = "Alfred"};
Dialog.Message ("Daz, Nombre", matNombres.Diaz);
El mensaje de dilogo resultante se vera as:
27
Empleado1 = {Nombre ="Henry Daz", Cumpleanos ="21/08/82"};
Empleado2 = {Nombre ="Everth Sanabria", Cumpleanos ="28/05/85"};
-- Almacenando informacin de cada empleado de la tabla
-- En el nmero apropiado de la tabla Empleados
Empleados[100099] = Empleado1;
Empleados[137637] = Empleado2;
-- Ahora a escribir "Empleado [100099]" es lo mismo que escribir
"Employee1"
Dialog.Message ( "Cumpleaos", Empleados[100099].Cumpleanos);
El mensaje de dilogo resultante se vera as:
28
29
30
edificio, fotocopia individualmente cada uno de los libros y, a continuacin,
guardar las fotocopias en la nueva ubicacin.
Eso es ms o menos cmo es con tablas, tambin. Con el fin de crear una
copia completa de una tabla, todos los contenidos y, lo que necesitas para
crear una nueva tabla y luego copiar todos los elementos, un elemento a la
vez.
Afortunadamente, para la declaracin hace muy fcil de hacer. Por ejemplo,
aqu una versin modificada de nuestro ejemplo anterior, que crea una
"verdadera" copia de tabla_uno.
tabla_uno = {estado="Feliz", temperatura="Caliente"};
-- Crear una copia
tabla_dos = {};
for indice, valor in tabla_uno do
tabla_dos[indice] =valor;
end
-- Modificar la copia
tabla_dos.temperatura = "Fra";
Dialog.Message ( "Tabla 1, temperatura es:",
tabla_uno.temperatura);
Dialog.Message ( "Tabla 2, temperatura es:",
tabla_dos.temperatura);
Esta vez, los dilogos muestran que la modificacin de tabla_dos no afecta
a todos los tabla_uno:
31
funciones de tabla, por favor, vase el Programa de Referencia / Acciones /
Tabla en la ayuda en lnea.
Funciones
Una de las principales y ms poderosas de las caractersticas
scripting son las funciones. Usted ya ha visto una gran
funciones utilizadas a lo largo de este documento,
"Dialog.Message." Las Funciones son simplemente trozos de
script que puede definir, darle un nombre y a continuacin,
cualquier otro lugar.
del motor de
cantidad de
tales como
cdigo en el
llamar desde
32
defines HolaMundo() en el evento On Click de un boton, pero este evento
nunca es invocado (porque el usuario no haga clic en el botn), la funcin
HolaMundo() nunca existira. Es decir, no se le puede llamar desde cualquier
otro lugar.
Es por ello que, en general, es mejor definir sus funciones globales en el
script global del proyecto. (Para acceder al script, seleccione Proyecto>
Global Functions en el men.)
Ahora, de regreso a las buenas cosas. Vamos a aadir una lnea a la
realidad, llamar a la funcin:
function HolaMundo()
Dialog.Message ( "Bienvenido", "Hola Mundo");
final
HolaMundo();
La linea "HolaMundo();" le dice al motor de scrpting "ir a realizar la funcin
llamada HolaMundo." Cuando esa lnea es ejecutada, debe ver un mensaje
de bienvenida con el texto "Hola Mundo" en ella.
33
de sus dos argumentos... y cada llamada a la funcin, pasa dos cadenas a
la funcin HolaMundo.
Tenga en cuenta que cambiando el contenido de esas cadenas, puede
enviar diferentes argumentos a la funcin, y lograr resultados diferentes.
Valores de Retorno
El siguiente paso es hacer la funcin de valores de retorno de vuelta al ser
llamada por el script. Aqu esta una funcin que acepta un nmero como su
nico argumento y a continuacin, devuelve una cadena que contenga
todos los nmeros de uno a ese nmero.
function Contador(n)
-- Se empezar a cabo con una cadena de retorno en blanco
CadenaRetorno = "";
for num = 1,n do
-- Agregar el nmero actual (NUM) a la final de la cadena
de retorno
CadenaRetorno = CadenaRetorno..num;
-- Si este no es el ltimo nmero, a continuacin, agregue
una coma y un espacio para separar los nmeros un poco en la
cadena de retorno
if (num ~= n) then
CadenaRetorno = CadenaRetorno..", ";
end
end
-- Devolver la cadena que hemos construido
return CadenaRetorno;
end
CadenaContador = Contador(10);
Dialog.Message ( "Contador", CadenaContador);
Las dos ltimas lneas del script de arriba utilizan la funcin Contador para
construir una cadena a partir de 1 a 10, lo almacena en una variable
llamada CadenaContador y a continuacin, muestra el contenido de esa
variable en un dilogo cuadro de mensaje.
34
end
end
PriNum, SegNum = NumerosCortos(102, 100);
Dialog.Message("Clasificacin", PriNum ..", ".. SegNum);
El script de arriba crea una funcin llamada NumerosCortos que toma dos
argumentos y devuelve dos valores. El primer valor devuelto es el nmero
ms pequeo, y el segundo valor devuelto es el ms grande. Tenga en
cuenta que se especifican dos variables para recibir los valores de retorno
de la funcin llamada en la segunda ltima lnea. La ltima lnea del script
muestra los dos nmeros en el orden en que fueron ordenados por la
funcin.
Redefinicin de funciones
Otra cosa interesante acerca de las funciones es que se puede anular una
definicin de funcin anterior simplemente por volver a definirla.
function HolaMundo()
Dialog.Message("Mensaje", "Hola Mundo");
end
function HolaMundo()
Dialog.Message("Mensaje", "Hola Tierra");
end
HolaMundo();
El script de arriba muestra un cuadro de mensaje que dice "Hola Tierra," y
no "Hola Mundo". Esto se debe a que la segunda versin de la HolaMundo()
funcin anula la primera.
35
Manipulacin de cadenas
En esta seccin vamos a cubrir brevemente algunas de las ms comunes
tcnicas de manipulacin de cadenas, como la concatenacin de cadenas y
comparaciones.
(Para obtener ms informacin sobre las funciones de cadena que tiene a su
disposicin en AutoPlay Media Studio, vase el Programa de Referencia /
Acciones / cadena en la ayuda en lnea.)
Concatenar cadenas
Ya hemos cubierto la concatenacin de cadenas, pero esta as vale la pena
repetir. El operador de concatenacin de cadenas es de dos perodos en una
fila (..). Por ejemplo:
NombreCompleto = "Daz".." Henry";
-- NombreCompleto es ahora "Daz Henry"
-- Tambin puede concatenar nmeros en cadenas.
DiasDelAo = 365;
CadenaAo = "Hay "..DiasDelAo.." das en un ao".
Tenga en cuenta que usted puede poner espacios a ambos lados de los
puntos, o por un lado, o no poner ningn espacio en absoluto. Por ejemplo,
las siguientes cuatro lneas logran la misma cosa:
foo = "Hola " .. usuario;
foo = "Hola ".. usuario;
36
foo = "Hola " ..usuario;
foo = "Hola "..usuario;
Comparacin de Cadenas
Junto a la concatenacin, una de las cosas ms comunes que se quiere
hacer con las cadenas es comparar una cadena a otra. Dependiendo de lo
que constituye un "match", esta puede ser muy simple, o simplemente un
poco difcil.
Si desea realizar una distincin entre maysculas y minsculas
comparacin, entonces todo lo que tienes que hacer es utilizar el operador
igual (==). Por ejemplo:
strUno = "Guatemala";
strDos = "Guatemala";
if strUno == strDos then
Dialog.Message("Adivina qu?", "Las dos cadenas son
iguales!");
else
Dialog.Message("Hmmm", "Las dos cadenas son diferentes.");
end
Dado que el operador == realiza una distincin entre maysculas y
minsculas comparacin cuando se aplica a cadenas de texto, el script de
arriba mostrar un cuadro de mensaje que proclama que las dos cadenas
son iguales.
Si desea realizar una comparacin entre maysculas y minsculas, entonces
usted necesita tomar ventaja de cualquiera de las funciones String.Upper o
String.Lower, a fin de asegurar que ambas cadenas tienen el mismo caso
antes de compararlos. La funcin String.Upper devuelve todo en
maysculas de la cadena que se da, y la funcin String.Lower devuelve toda
la cadena en minsculas. Tenga en cuenta que no importa la funcin que
utiliza en su comparacin, siempre y cuando se utiliza la misma funcin en
ambos lados del operador == en su declaracin if.
Por ejemplo:
strUno = "GUatEmaLa";
strDos = "Guatemala";
if String.Upper(strUno) == String.Upper(strDos) then
Dialog.Message("Adivina qu?", "Las dos cadenas son
iguales!");
else
Dialog.Message("Hmmm", "Las dos cadenas son diferentes.");
end
En el ejemplo anterior, la funcin String.Upper convierte strUno a
"GUATEMALA" y strDos a "GUATEMALA" y a continuacin, la declaracin if
37
compara los resultados. (Nota: las dos cadenas originales siguen siendo lo
mismo.) De esta forma, no importa lo que en las cadenas originales tenan;
todo lo que importa es si las letras son las mismas.
Contar caracteres
Si alguna vez ha querido saber cun larga es una cadena, se puede contar
el nmero de caracteres que contiene. Basta con utilizar la funcin
String.Length, as:
trabalenguas = "Si un plato de madera, podra plato de madera,
cunto sera...um...";
num_caracteres = String.Length (trabalenguas);
Dialog.Message ( "Cuanto mide el Trabalengua", nm_caracteres ..
" caracteres!");
... que se produce el siguiente cuadro de dilogo mensaje:
Buscar cadenas
Otra cosa que usted quiere hacer con las cadenas es buscar una cadena
dentro de otra. Esto es muy simple al hacer uso de la funcin String.Find.
Por ejemplo:
strBuscarEn = "No es un da maravilloso fuera?";
strBuscarPara = "maravillo";
-- Bsqueda de strBuscarEn dentro strBuscarPara
nEncuentraPos = String.Find (strBuscarEn, strBuscarPara);
if nEncuentraPos ~= nil then
-- Encontr!
Dialog.Message("Resultados de la bsqueda","\""..
strBuscarPara .."\""..
" se encuentra en la posicin " ..
nEncuentraPos);
else
-- Mala suerte
Dialog.Message("Resultados de la bsqueda", strBuscarPara
.. " no se ha encontrado!");
end
... podra causar el siguiente mensaje que se mostrar:
38
Reemplazar en Cadenas
Una de las cosas ms poderosas que usted puede hacer con las cadenas es
llevar a cabo una operacin para bsqueda y reemplazo sobre ellas. El
siguiente ejemplo muestra cmo puede utilizar la accin String.Replace para
sustituir a cada ocurrencia de una cadena con otro objetivo dentro de una
cadena.
strContiene = "Lua el mejor. Dentro de los lenguajes script!";
strBuscarPara = "mejor";
strReemplazarCon = "Profesional";
strNuevaCadena = String.Replace(strContiene, strBuscarPara,
strReemplazarCon);
Dialog.Message("Despus de buscar y reemplazar",
strNuevaCadena);
-- Crear una copia de la cadena sin espacios en esta.
strNoEspacios = String.Replace(strContiene, " ", "");
Dialog.Message("Despus de remover los espacios:",
strNoEspacios);
El ejemplo anterior se muestra la siguiente dos mensajes:
Extraccin en Cadenas
Hay tres funciones de cadena que le permiten "extraer" una parte de una
cadena, en lugar de copiar toda la cadena de s mismo. Estas funciones son
String.Left, String.Right, y String.Mid.
39
40
41
pretende utilizar la cadena numrica, es como un nmero. Como resultado
de ello, el motor convierte automticamente la cadena numrica a un
nmero para que pueda realizar el clculo.
Sabiendo esto, podemos convertir una cadena numrica a un nmero sin
cambiar su valor, simplemente por la adicin de 0 a l, de este modo:
edad = "31";
if (edad + 0) > 18 then
Dialog.Message("", "Eres mayor de 18 aos.");
end
En el ejemplo anterior, al agregar cero a la variable, le pide al motor para
convertir el valor a un nmero, y a continuacin el resultado es comparado
con 18. No ms error.
dofile
Carga y ejecuta un archivo de script. El contenido del archivo ser
ejecutado como si fuera escrito directamente en el area de scripting. La
sintaxis es la siguiente:
dofile(direxion_archivo);
Por ejemplo, escriba el siguiente script en un archivo llamado miScript.lua
(slo un archivo de texto que contiene este script, creado con el Bloc de
notas u otro editor de texto):
Dialog.Message("Hola", "Mundo");
Ahora arrastrar y soltar el archivo en la carpeta principal de AutoPlay Media
Studio. (Esto copia el archivo en la carpeta del proyecto llamada Scripts.)
Aparecer un dilogo que le preguntar si queremos aadir nuestro script.
Haga clic en "No" por ahora. Vamos a explicar los requisitos declaracin
ms tarde.
Ahora, aada dondequiera la siguiente lnea de script, pero en un evento:
dofile (_SourceFolder.."\\AutoPlay\\Scripts\\MiScript.lua");
... este archivo de script ser ledo y ejecutado de inmediato. En este caso,
usted vera un cuadro de mensaje con el titulo "Hola y el mensaje
Mundo".
42
require
Carga y ejecuta un archivo de script en el motor de scripting. Es similar a
dofile la salvedad de que slo se carga un archivo de una vez por perodo de
sesiones, mientras que dofile volver a la carga y volver a ejecutar el
archivo cada vez que se utiliza. La sintaxis es la siguiente:
require(direxion_archivo);
As, por ejemplo, incluso si requiere hacer dos en una fila:
require("foo.lua");
require("foo.lua"); -- esta lnea no hace nada
...slo el primero de ellos se ejecuta. Despus de eso, el motor de scripting
sabe que el archivo ha sido cargado y luego ejecutado, y las futuras
convocatorias para exigir el archivo, no tendr ningn efecto.
Tenga en cuenta que el archivo .lua debe estar en la carpeta Scripts de su
proyecto, que ni siquiera tiene que proporcionar una ruta completa al
archivo. Por ejemplo:
require("MiScript.lua");
...es el mismo:
require(_SourceFolder.."\\AutoPlay\\Scripts\\MiScript.lua");
Dado que slo requieren una determinada carga de archivo de script una
vez por perodo de sesiones, que es el ms adecuado para la carga de
scripts que contienen slo las variables y funciones. Dado que las variables
y funciones son globales por defecto, slo tendr que "cargar" una vez, en
repetidas ocasiones la carga de la misma definicin de funcin termina en
una prdida de tiempo.
Esto hace que la funcin requiera una buena forma de cargar script de
bibliotecas externas. Cada script que necesita una funcin de un archivo
externo puede exigir condiciones de seguridad con require(), y el archivo en
realidad slo se carga la primera vez que se necesita.
type
Esta funcin le dir el tipo de valor que figura en una variable. Esta
devuelve una cadena con el nombre del tipo de variable. Los valores validos
de retorno son "nil", "number", "string", "boolean", "table" o "function". Por
ejemplo:
43
a = 989;
strTipo = type(a); --establece strType a "nmero"
a = "Hola";
strTipo = type(a); -- establece strType a la "cadena"
El tipo de funcin es especialmente til al escribir sus propias funciones que
necesitan determinados tipos de datos para operar. Por ejemplo, el
siguiente script usa la funcin type() para asegurarse de que sus dos
argumentos son nmeros:
-- Encontrar el mximo de dos nmeros
function Max(Num1, Num2)
-- Asegrese de que ambos argumentos son numricos
if (type(Num1) ~= "nmero") or (type(Num2) ~= "nmero") then
Dialog.Message("Error", "Por favor, introduzca un nmero");
return nil - Indica que estamos usando valores nulos.
else
if Num1 >= Num2 then
return Num1;
else
return Num2;
end
end
end
Acciones
AutoPlay Media Studio viene con un gran nmero de funciones
incorporadas. En la interfaz del programa, estas funciones incorporadas son
comnmente denominadas acciones. Para efectos de scripting, acciones y
funciones son esencialmente los mismos, sin embargo, el trmino
"acciones" es generalmente reservado para las funciones que se construyen
en el programa y se incluyen en la lista por orden alfabtico de las acciones
en la ayuda en lnea. Al referirse a las funciones que han sido creados por
otros usuarios o usted mismo, el trmino "funciones" se prefiere.
44
Manipulacin de Errores
Todas las acciones incorpordas de AutoPlay Media Studio utilizan las mismas
tcnicas de manipulacin de errores. Sin embargo, esto no es
necesariamente cierto en el caso de cualquier funcin, mdulo, o scripts,
incluso scripts desarrollados por Indigo Rose Corporation que no estn
construidas en el producto. Aunque estos scripts desarrollados
externamente pueden hacer uso de AutoPlay y manipular errores del
sistema, puede que no necesariamente deba hacerlo. Por lo tanto, usted
siempre debe consultar a un scripts o autor de modulo o la documentacin
con el fin de averiguar cmo es el manejo de errores, y as manipulados.
Existen dos tipos de errores que puede tener en sus escrituras cuando se
llama a las acciones de AutoPlay Media Studio: errores de sintaxis, los
errores y funcional.
Errores de sintaxis
Los errores de sintaxis se producen cuando la sintaxis (o "gramtica") de un
script es incorrecta, o una funcin recibe argumentos que no son
apropiadas. Algunos errores de sintaxis son capturados por AutoPlay Media
Studio cuando usted compile o de vista previa de su aplicacin.
Por ejemplo, considere el siguiente script:
foo =
Esto es incorrecto porque no hemos asignado nada a la variable foo -el
script esta incompleto. Esto es bastante obvio un error de sintaxis, y sera
capturado por el motor de script en tiempo de ejecucin (cuando compile y
ejecute el proyecto).
Otro tipo de error de sintaxis es cuando no se pase el tipo o el nmero de
argumentos a una funcin. Por ejemplo, si usted intenta ejecutar este
script:
Dialog.Message("Hola");
...el proyecto mientras se compila ser multado, debido a que no hay
evidentes errores de sintaxis en el script. En lo que respecta al motor de
scripting puede decir, la llamada a la funcin est bien formada. El nombre
es vlido, abierto y cerrado partido entre parntesis, las comillas estn en
los lugares correctos, y hay incluso poner fin a una punto y coma al final.
Parece bueno!
Sin embargo, en tiempo de ejecucin es que se vea algo como lo siguiente:
45
Parece que no era tan bueno despus de todo. Tenga en cuenta que el
mensaje dice que dos argumentos son necesarios para la funcin
Dialog.Message. Ah. Nuestro script slo tiene un argumento.
De acuerdo a la funcin prototipo de Dialog.Message, parece que la funcin
puede aceptar hasta cinco argumentos:
Errores funcionales
Los errores funcionales son aquellos que se producen debido a la
funcionalidad si la accin propia falla. Ellos se producen cuando a una accin
se da informacin incorrecta, como la ruta de acceso a un archivo que no
existe. Por ejemplo, el siguiente cdigo producir un error funcional:
filecontents = TextFile.ReadToString("this_file_don't
exist.txt");
Si pone este script en un evento ahora mismo y lo prueba, ver que nada
parece suceder. Esto se debe a que en AutoPlay Media Studio los errores
funcionales no se muestran automticamente como se muestran los errores
de sintaxis. Dejamos a ustedes para manejar (o a no manejar), tales
errores funcionales.
La razn de esto es que puede haber momentos en que no le importa si una
funcin falla. De hecho, puede que se espera. Por ejemplo, el siguiente
cdigo intenta eliminar una carpeta llamada C:\Mi carpeta Temp:
Folder.Delete("C:\\Mi carpeta Temp");
Sin embargo, en este caso no le importa si realmente se elimina, o si la
carpeta no existe en primer lugar. Usted slo quiere asegurarse de que si
esa carpeta existe, ser eliminado. Si la carpeta no existe, la accin
Folder.Delete causa un error funcional, porque no puede encontrar la
46
carpeta que le dijo que eliminara... pero ya que el resultado final es
exactamente lo que quera, no es necesario a hacer nada al respecto. Y
desde luego no queremos que el usuario vea los mensajes de error.
Por el contrario, puede haber ocasiones en las que es muy importante para
usted saber si una accin falla. Si, por ejemplo, usted desea copiar un
archivo muy importante:
File.Copy("C:\\Temp\\Mi Archivo.dat","C:\\Temp\\Mi
Archivo.bak");
En este caso, usted realmente quiere saber si falla y pueden querer incluso
salir del programa o informar al usuario. Aqu es donde las acciones de
depuracin entran en escena.
Application.GetLastError
Esta es la accin ms importante a utilizar cuando se trata de averiguar si
un problema se ha producido. En tiempo de ejecucin siempre hay un valor
interno que almacena el estado de la ltima accin que fue ejecutada. En el
inicio de una accin, este valor se establece en 0 (el nmero cero). Esto
significa que todo est bien. Si un error se produce funcional dentro de la
accin, el valor se cambia a algunos no cero.
A este ltimo valor de error se puede acceder en cualquier momento
utilizando la accin Application.GetLastError.
La sintaxis es la siguiente:
ultimo_codigo_error=Application.GetLastError();
Aqu un ejemplo que utiliza esta accin:
File.Copy("C:\\Temp\\Mi Archivo.dat", "C:\\Temp\\Mi
Archivo.bak");
codigo_error = Application.GetLastError ();
if (codigo_error ~= 0) then
-- Algn tipo de error ha ocurrido!
Dialog.Message("Error", "Error al copiar
archivo:"..codigo_error);
Application.Exit ();
end
El script de arriba informar al usuario que se ha producido un error y luego
saldr de la aplicacin. Esto no es necesariamente la manera en que todos
47
los errores deben ser manejados, pero ilustra el punto. Usted puede hacer
lo que quieras cuando se produce un error, al igual que se pide una funcin
diferente o cualquier cosa que usted puede soar.
El script de arriba tiene un posible problema. Imagine al usuario ver un
mensaje como este:
48
"C:\\Temp\\Mi Archivo.bak");
-- En este punto Application.GetLastError() podra ser no cero,
pero...
Dialog.Message("Hola", "Hola Mundo");
------
codigo_error = Application.GetLastError();
if (codigo_error ~= 0) then
-- Algn tipo de error ha ocurrido!
Dialog.Message("Error",
"Error al copiar archivo:"..
_tblErrorMessages [codigo_error]);
Application.Exit ();
end
Debug.ShowWindow
AutoPlay Media Studio en tiempo de ejecucin tiene la capacidad de mostrar
una ventana de depuracin que se pueden utilizar para mostrar mensajes
de depuracin. Esta ventana existe en toda la ejecucin de su solicitud,
pero slo es visible cuando usted le dice que sea.
La sintaxis es la siguiente:
Debug.ShowWindow(show_window);
...donde show_window es un valor booleano. Si es verdadero, la ventana de
depuracin se muestra, si es falsa, la ventana se oculta. Por ejemplo:
-- Mostrar la ventana de depuracin
Debug.ShowWindow(true);
Si llama a este script, la ventana de depuracin aparecer en la parte
superior de su aplicacin, pero nada ms llega realmente a suceder. Ah es
donde las siguientes acciones de depuracin entran en escena.
Debug.Print
Esta accin imprime el texto de su eleccin en la ventana de depuracin.
Por ejemplo, pruebe el siguiente script:
Debug.ShowWindow(true);
for i = 1, 10 do
49
Debug.Print("i = " .. i .. "\r\n");
end
El "\r\n" es en realidad dos secuencias de escape que se utilizan para iniciar
una nueva lnea. (Esto es tcnicamente llamado "retorno de carro/nueva
lnea" par.) Usted puede usar \r\n en la ventana de depuracin cada vez
que desee insertar una nueva lnea.
El script de arriba producir la siguiente salida en la ventana de depuracin:
Debug.SetTraceMode
AutoPlay Media Studio puede ejecutar un modo especial de "rastrear" en
tiempo de ejecucin que se imprimir la informacin sobre cada lnea del
script que es ejecutado a la ventana de depuracin, incluyendo el valor de
Application.GetLastError() si la lnea implica llamar a una accin incorporda.
Usted puede rastrear a su vez, este modo de encendido o apagado
mediante el uso de la accin Debug.SetTraceMode:
Debug.SetTraceMode(turn_on);
...donde turn_on es un valor booleano que indica si el programa a su vez,
traza el modo de encendido o apagado.
Aqu est un ejemplo:
Debug.ShowWindow(true);
50
Debug.SetTraceMode(true);
for i = 1, 3 do
Dialog.Message ( "Nmero ", i);
end
File.Copy("C:\\fake_file.ext", "C:\\fake_file.bak");
La ejecucin de este script produce la siguiente salida en la ventana de
depuracin:
Observe que cada lnea producida por la funcin de rastreo se inicia con el
modo de "Trace:" Esto es lo que les puedo decir aparte de todas las lneas
que va a enviar la ventana de depuracin con Debug.Print. El nmero
despus de la "Trace:" es el nmero de lnea que est siendo ejecutado en
el script.
Volviendo sobre el modo de rastrear es algo que usted probablemente no
quiere hacer en su final, a distribuir la aplicacin, pero puede realmente
ayudar a encontrar problemas durante el desarrollo. De hecho, hay una
opcin en AutoPlay Media Studio compilar preferencias que le permite
activar automticamente el modo de rastreo cada vez que se de la vista
previa. (Seleccione Herramientas (Tools)>Preferencias (Preferences) y haga
clic en la categora Construir (Build). En la seccin Vista Preliminar
(Preview), a su vez activar la opcin llamada "Mostrar ventana de
depuracin.") Sin embargo, incluso con esta opcin habilitada, traza el
modo de no ser activada en la versin que se construy cuando publique su
proyecto, a menos que usted lo especifiqu a su vez que en su secuencia de
comandos (script).
Debug.GetEventContext
Esta accin se utiliza para obtener una cadena descriptiva sobre el evento
que est siendo ejecutado. Esto puede ser til si se define una funcin en
51
un solo lugar, pero lo llaman en algn otro lugar, y que desea estar en
condiciones de decir que la funcin se llama desde en un momento dado.
Por ejemplo, si se ejecuta este script de un botn en el evento Click sobre
Pgina1:
Dialog.Message("Contexto del evento", Debug.GetEventContext());
... vers algo como esto:
Dialog.Message
Esto nos lleva a una buena ole' Dialog.Message. Ustedes han visto esta
accin utiliza en este documento, y por una buena razn. Esta es una gran
accin de utilizar a lo largo de su cdigo cuando se est tratando de
localizar un problema.
Consideraciones finales
Esperemos que este documento ha ayudado a comprender la programacin
de scripting en AutoPlay Media Studio. Una vez que se cuelgue de la misma,
es una muy divertida y potente forma de hacer las cosas.
Otros recursos
Aqu est una lista de otros lugares que usted puede acudir para obtener
ayuda con scripting en AutoPlay Media Studio.
Archivos de ayuda
El archivo de ayuda de AutoPlay Media Studio est lleno de buenos
materiales de referencia para todos los eventos y acciones apoyadas por
AutoPlay Media Studio, y para el entorno de diseo propio. Puede acceder al
archivo de ayuda en cualquier momento seleccionando Ayuda> Ayuda de
AutoPlay Media Studio, en el men Ayuda.
Otro consejo til: si se encuentra en el Editor de secuencias de comandos y
desea obtener ms informacin acerca de una accin, simplemente haga
clic en la accin y pulse la tecla F1 en su teclado.
52
le ensea acerca de los eventos, acciones y secuencias de comandos. Se le
despegue y el funcionamiento en ninguna hora! Puede acceder a la gua del
usuario seleccionando Ayuda> de AutoPlay Media Studio Gua del Usuario
en el men.
53