¿Dónde ingresar a la función jass de World of Warcraft?
Primero, escribamos esta demostración usando T
Trigger Tree Present: Zoxc @ wc3campaigns | Migración: Greedwind | Expandir | Copiar JASS
Evento
p>
Tiempo: el tiempo de juego transcurrido es 0,00 segundos
Entorno
Acción
Punto de ajuste = (área (área del mapa jugable)
Para un (bucle entero A), incrementa de 1 a 10, haz (acción)
Bucle - Acción
Unidad - Crea 1 infantería para el jugador 1 (rojo) en punto orientado hacia la orientación predeterminada del edificio
Espere 2,00 segundos del juego
Punto - Eliminar punto
Esto es muy simple La demostración es fácil de entender para todos
Ahora conviertamos esta T a J
jass: Copiar código... Trig_Jass_Actions no toma nada y no devuelve nada
set udg_point = GetRectCenter(GetPlayableMapRect())
establecer bj_forLoopAIndex = 1
establecer bj_forLoopAIndexEnd = 10
bucle
salir cuando bj_forLoopAIndex gt; bj_forLoopAIndexEnd
call CreateNUnitsAtLoc( 1, ' hfoo', Player(0), udg_point, bj_UNIT_FACING )
llamar a PolledWait( 2 )
establecer bj_forLoopAIndex = bj_forLoopAIndex 1
endloop
llamar a RemoveLocation( udg_point )
fin...
//=========== ============= ===================================== ============= =
... InitTrig_Jass no toma nada y no devuelve nada
set gg_trg_Jass = CreateTrigger( )
call TriggerRegisterTimerEventSingle( gg_trg_Jass, 0.00 )
call TriggerAddAction( gg_trg_Jass, ... Trig_Jass_Actions )
Tal vez quieras decir que soy vago porque simplemente convierto T en J y luego lo llamo. Es cierto que usar T no hace ninguna diferencia
.Así que optimicemos este código de cultivo de tropas
jass: Copiar código... JassCreateUnit
no toma nada no devuelve nada
set udg_point = GetRectCenter(GetPlayableMapRect())
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 10
bucle
salir cuando bj_forLoopAIndex gt; bj_forLoopAIndexEnd
llamar a CreateNUnitsAtLoc( 1, 'hfoo', Player(0), udg_point, bj_UNIT_FACING)
llamar a PolledWait( 2 )
establecer bj_forLoopAIndex = bj_forLoopAIndex 1
endloop
llamar a RemoveLocation( udg_point )
end...
Antes Decimos que es mejor no esperar en un bucle. ¿Por qué? Debido a que las funciones de bucle A y B son variables globales, se producirá un error si se usan en otro lugar durante la ejecución. en variables locales
El código optimizado es el siguiente:
jass: Copiar código... JassCreateUnit no toma nada y no devuelve nada
punto de ubicación local
entero local i=0
punto de ajuste = GetRectCenter(GetPlayableMapRect())
bucle
conjunto i = i 1
salir cuando gt; 10
llamar a CreateNUnitsAtLoc( 1, 'hfoo', Player(0), punto, bj_UNIT_FACING )
llamar a PolledWait( 2 )
endloop
call RemoveLocation( point )
set point=null
end...
Bien, el código anterior es estándar. Método de escritura JASS (CreateNUnitsAtLoc pertenece a la función bj. No es necesario usar la función bj después de tener una cierta base)
No hemos terminado aquí porque esperamos que la función JassCreateUnit pueda ser más Por ejemplo, esperamos que esta función se pueda actualizar. El número de soldados no es fijo, pero podemos cepillar tantos como queramos.
Podemos modificarlo así
punto de ubicación local
entero local i=0
punto de ajuste = GetRectCenter(GetPlayableMapRect(
))
bucle
set i = i 1
salir cuando i gt Num
call CreateNUnitsAtLoc( 1, 'hfoo', Player(0), punto, bj_UNIT_FACING)
llamar a PolledWait( 2 )
endloop
llamar a RemoveLocation( punto )
punto de ajuste =null
end...
Antes, nuestra función JassCreateUnit no tomaba nada. Ahora la cambié para que tome el entero i, lo que significa pasar un parámetro de tipo entero a la función
end...
Antes, nuestra función JassCreateUnit no tomaba nada. p >
Luego cambiamos la condición para el final del ciclo de igt;10 a igt;Num. Si Num=5, entonces el ciclo solo se ejecutará 5 veces para generar 5 infantería
. Dado que agregamos parámetros a la función, cuando llamamos, debemos escribir un parámetro entre paréntesis de la función
Árbol de activación presente: Zoxc @ wc3campaigns Migración: Greedwind | Expandir | /p>
Evento p>
Tiempo: el tiempo de juego transcurrido es 0,00 segundos
Entorno
Acción
Personalizado: llamar a JassCreateUnit( 5)
Tenga en cuenta que lo que está escrito entre paréntesis es 5. Eso significa que configuramos Num en 5. El sistema generará 5 infantería. Si queremos generar 10, entonces jass: Copiar codecall JassCreateUnit(10. )
Ahora la función JassCreateUnit ya es lo suficientemente poderosa, pero puede ser aún más poderosa. Por ejemplo, actualmente solo puede generar tropas en el centro del mapa. Cómo hacer que genere tropas en otros. ¿Quizás pensaste en agregar otro parámetro para pasar la ubicación de generación
jass: Copiar código... JassCreateUnit toma el jugador P, número entero, el punto de ubicación no devuelve nada
entero local i =0
bucle
set i = i 1
salir cuando i gt Num
call CreateNUnitsAtLoc( 1, 'hfoo', P, punto, bj_UNIT_FACING )
llamar PolledWait( 2 )
endloop
end...
Entonces lo llamamos así
Árbol de activación presente: Zoxc @ wc3campaigns | Migración: Greedwind | Expandir | Copiar Jass
Eventos
Tiempo: el tiempo transcurrido del juego es 0,00 segundos p>
Entorno
Acción
Conjunto P = Jugador 2 (azul)
Conjunto
Punto de ajuste = (centro del área (área del mapa reproducible))
Personalización: llamar a JassCreateUnit(udg_P, 20, udg_point)
Punto - eliminar punto
Aceptar Ahora modificamos el punto de configuración = (el centro del área (área del mapa jugable)) y podemos generar tropas en cualquier ubicación
Pero ahora los soldados generados están frente al edificio predeterminado y hacia nosotros. Puedes agregar otro parámetro para hacer que el soldado mire en esta dirección
jass: Copiar código... JassCreateUnit toma el jugador P, número entero, punto de ubicación, ángulo real no devuelve nada
entero local i =0
bucle
set i = i 1
salir cuando i gt;
call CreateNUnitsAtLoc( 1, 'hfoo', P, punto, ángulo)
call PolledWait( 2 )
endloop
end...
Reemplace bj_UNIT_FACING con ángulo.
Reemplace bj_UNIT_FACING con ángulo.
p>
Bien, ahora tenemos muchos parámetros para llamar a JassCreateUnit. Llame a JassCreateUnit(udg_P, 20, udg_point, 180). Entonces los soldados generados mirarán 180 grados
Es lógico en este momento. , la función de JassCreateUnit es muy poderosa, pero no hay límite para la codicia humana. Por ejemplo, ahora esta función solo puede cepillar a la infantería, entonces, ¿qué debemos hacer si queremos cepillar a los caballeros? Brushing Knights? Podemos continuar agregando parámetros sin él p>
jass: Copiar código... JassCreateUnit toma el jugador P, número entero, punto de ubicación, ángulo real, uid entero no devuelve nada
entero local i=0
bucle
establecer i = i 1
salir cuando i gt Num
llamar a CreateNUnitsAtLoc( 1, uid, P, punto, ángulo)
call PolledWait( 2 )
endloop
end...
Desde la "unidad type" es en realidad un tipo numérico, el tipo de parámetro aquí es entero p>
Árbol de activación presente: Zoxc @ wc3campaigns | Migración: Greedwind | Expandir | Contraer | Copiar Jass
Eventos
Tiempo: el tiempo de juego transcurrido es 0,00 segundos
Entorno
Acción
Conjunto P = jugador 2 (azul)
Punto de ajuste = (área (área del mapa reproducible) dentro de una ubicación aleatoria)
Establecer ID de unidad =
Knight
Personalización: llamar a JassCreateUnit(udg_P, 20, udg_point, 120, udg_UnitID)
Punto - eliminar punto
Luego regresar a un punto aleatorio en el área Cada 2 segundos, aparecerá un caballero del jugador 2, mirando 120 grados hasta que se generen 20
Debido a que Xiami necesita generar un spawn cada 2 segundos, ¿se puede modificar el intervalo de tiempo? Por supuesto, ¿se puede modificar? agregado... Parámetros
jass: Copiar código... JassCreateUnit toma el jugador P, número entero, punto de ubicación, ángulo real, uid entero, tiempo de espera entero no devuelve nada
entero local i =0
p>bucle
establecer i = i 1
salir cuando i gt; Num
llamar a CreateNUnitsAtLoc( 1, uid, P, punto, ángulo)
call PolledWait( timeout )
endloop
end...
Vale, jass: copia codecall JassCreateUnit (udg_P, 20, udg_point, 120, udg_UnitID, 5) Simplemente actualice la unidad cada 5 segundos
Quizás ahora esté obsesionado con agregar parámetros a la función. ¿Aún puede agregar más parámetros? Puede, por ejemplo, llamar a CreateNUnitsAtLoc( 1 , uid, P, point, angle) cada vez que se genera una unidad. Si reemplaza el 1 entre paréntesis con parámetros, puede controlar la cantidad de soldados generados cada vez.
jass: Copiar código... JassCreateUnit toma el jugador P, número entero, punto de ubicación, ángulo real, uid entero, tiomout entero, número entero N no devuelve nada
entero local i=0
bucle
set i = i 1
salir cuando i gt; Num
llamar a CreateNUnitsAtLoc( N, uid, P, punto, ángulo) p>
call PolledWait( timeout )
endloop
end...
Ahora JassCreateUnit es lo suficientemente potente como para poder generar cualquier cosa para cualquier jugador. en cualquier lugar y en cualquier intervalo de tiempo. La cantidad de unidades que miran en cualquier ángulo...
Tal vez no puedas evitar gritar ahora, ¿no es esta la función de generación de tropas 3C? Preocúpate, las tropas generadas por la función de generación de tropas en 3C atacarán automáticamente. La función real de 3C es ir debajo de la base del oponente.
jass: Copiar código... JassCreateUnit toma el jugador P, número entero, ubicación. punto, ángulo real
e, uid entero, tiempo de espera entero, número entero N, ubicación punto objetivo no devuelve nada
entero local i=0
entero local n=0
unidad local u
bucle
set i = i 1
salir cuando i gt Num
set n=0
bucle
set n = n 1
exitwhen n gt N
set u=CreateUnitAtLoc( P, uid, punto, ángulo)
llamar a IssuePointOrderLoc(u, "ataque", punto de destino)
establecer u=null
endloop
llamar a PolledWait( tiempo de espera )
endloop
end...
En esta función agregamos un parámetro de punto targetpoint Luego, las unidades que se generan atacarán este punto. Además, la función CreateNUnitsAtLoc original es reemplazada. CreateUnitAtLoc, lo cual es conveniente. Emitimos comandos a las unidades generadas.
Bien, este es el final de esta explicación. Si te pidiera que escribieras una función de generación de tropas 3C al principio, ¿te sentirías intimidado? Pero partimos de una función de generación de tropas muy simple. A medida que se escribe la función, sus funciones continúan aumentando hasta convertirse en una función tan compleja como la función de cultivo de tropas de 3C. Se puede ver que todo comienza desde cosas pequeñas.
Además, el JassCreateUnit actual puede realizar la función de cultivo de tropas 3C, pero dado que utiliza la función PolledWait (espera), la precisión del tiempo y la eficiencia de ejecución no son altas. Actualmente, la función 3C que escribo usa Timer para cultivar. tropas
¿Quieres saber cómo usar el temporizador? Primero sentemos las bases ~
.