Estructura Basica para Juegos Livecode
Estructura Basica para Juegos Livecode
Estructura Basica para Juegos Livecode
Este código siempre se va a estar ejecutando en segundo plano y precisamente en esa estructura
es donde nosotros vamos a, agregar nuestro código para que también verifique y ejecute
adecuadamente nuestro juego.
2. Copie este código y colóquelo en su "Tarjeta". - Card Script. Luego, edítelo para agregar sus
eventos y acciones del juego que está realizando.
local sStartUpdateTime
local sFrameRate
local sUpdateMessageId
on preOpenStack
set the acceleratedRendering of this stack to true
set the navigationArrows to false
startUpdatingTheScreen 50
end preOpenStack
on activateScreenUpdates pFrameRate
if pFrameRate is empty then put 50 into pFrameRate
stopUpdatingTheScreen
startUpdatingTheScreen 50
end activateScreenUpdates
on startUpdatingTheScreen pFrameRate
put pFrameRate into sFrameRate
put 0 into sStartUpdateTime
send "dispatchUpdateScreen" to me in 0 millisecs
put the result into sUpdateMessageId
end startUpdatingTheScreen
on stopUpdatingTheScreen
if sUpdateMessageId is not empty then
cancel sUpdateMessageId
end if
put empty into sUpdateMessageId
end stopUpdatingTheScreen
on dispatchUpdateScreen
local tThisFrameTime
put the long seconds into tThisFrameTime
if sStartUpdateTime is 0 then
put the long seconds into sStartUpdateTime
end if
lock screen
dispatch "updateScreen" to this card with tThisFrameTime
unlock screen
local tTheTimeNow
put the long seconds into tTheTimeNow
local tNextFrameCount
put round((tTheTimeNow - sStartUpdateTime) * sFrameRate + 0.5) into tNextFrameCount
send "dispatchUpdateScreen" to me in (sStartUpdateTime + (tNextFrameCount * (1 / sFrameRate)) -
tTheTimeNow) seconds
put the result into sUpdateMessageId
end dispatchUpdateScreen
local sGameRunning
on preOpenCard
set the acceleratedRendering of this stack to true
end preOpenCard
on startGame
activateScreenUpdates
put true into sGameRunning
end startGame
on stopGame
put false into sGameRunning
end stopGame
on updateScreen
if sGameRunning is true then
movePlayer1
-- moveEnemy
-- updateScore
end if
end updateScreen
on movePlayer1
if keysdown() contains 65362 then
set the top of the button "player1" to the top of the button "player1" - 4
if the top of the button "player1" < the top of the card "level1" then
set the top of the button " player1" to the top of the card "level1"
end if
end if
if keysdown() contains 65364 then
set the bottom of the button "player1" to the bottom of the button "player1" + 4
if the bottom of the button "player1" > the bottom of the card "level1" then
set the bottom of the button "box" to the bottom of the card "level1"
end if
end if
if keysdown() contains 65361 then
set the left of the button "player1" to the left of the button "player1" - 4
if the left of the button "player1" < the left of the card "level1" then
set the left of the button "player1" to the left of the card "level1"
end if
end if
if keysdown() contains 65363 then
set the right of the button "player1" to the right of the button "player1" + 4
if the right of the button "player1" > the right of the card "level1" then
set the right of the button "player1" to the right of the card "level1"
end if
end if
moveTerrain
detectCollisions
detectDisparos
end movePlayer1
on mouseUp
startGame
end mouseUp
on mouseUp
stopGame
end mouseUp
Este es solo el nombre que usé en el script de la tarjeta para moverlo. Puede cambiarlo por el
nombre que desee o por imágenes.
6. Abra el Inspector de tarjeta - nombre de la Card "Nivel 1"
Este es solo el nombre que usé en el script de la tarjeta para mover el botón "box". Usted puede
Notas :
1. El bucle del juego (en el código de la Card) se ejecuta cada 50 milisegundos cuando se actualiza
la pantalla:
on updateScreen
if sGameRunning is true then
moveBox
-- moveTerrain
-- moveEnemy
-- detectCollisions
-- updateScore
end if
end updateScreen
(Los guiones "--" en las líneas anteriores comentan las líneas para que no se ejecuten. Cada línea
código.
por ejemplo:
si tiene enemigos que se mueven por la pantalla, elimine el comentario de esa línea; elimine los
on moveEnemy
set the left of the button "enemy1" to the left of the button "enemy1" - 4
if the right of the button "enemy1" < 0 then
set the left of the button "enemy1" to the right of the card "level1"
end if
end moveEnemy
Descomente los otros (moveTerrain, detectCollisions y updateScore) a medida que agrega sus
controladores y su código
En lugar de usar arrowkeys para mover el “Player” o jugador nosotros usamos la keysdown()
function, Esto nos permite buscar cualquier tecla del teclado y no solo las flechas.
cambie todos los "=" por " contains " en el código para mover el Player (hágalo con cada "if
keysdown() =...")
Ejemplo:
on moveBox
if keysdown() contains 65362 then
set the top of the button "box" to the top of the button "box" – 4
-----
end moveBox
3. Agregamos el código de los botones Start y Stop
para permitir al usuario pausar o detener el juego. (Dado que Game Loop siempre se está
ejecutando, necesitamos una forma de detenerlo. Esta es la forma de detener los temporizadores,
4. También aprovechamos para agregar código para acelerar el juego aprovechando el hardware
acceleration en la línea:
5. Donde el controlador "on arrowKeys" detectó solo las teclas de flecha, ahora usamos la
función "on keysDown()" para cualquier tecla del teclado. Para ver el número de una key,
on rawKeyDown tecla
put tecla into fld "msg"
end rawKeyDown
Nos mostrará el número de cada tecla cuando se presiona el teclado. Después puede quitar esa
línea de código cuando hayas anotado los números de todas las keys que necesitas manejar.
Referencia:
https://sites.google.com/a/pgcps.org/livecode/home