Estructura Basica para Juegos Livecode

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

Game loop y Estructura básica para Games Livecode:

Por lo general en un juego de Livecode, siempre tenemos muchas cosas ejecutándose en la


pantalla. Un reloj, un temporizador , objetos moviéndose, el audio, colisiones y, a veces, incluso el
paisaje se mueve. Todo esto podría estar pasando sin que tú hagas nada.

La computadora está ejecutando constantemente lo que se llama un "Bucle o Loop de juego",


verificando y actualizando cosas en la pantalla, todo detrás de escena.

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.

1. Copie este código y colóquelo en su "Stack" - Stack Script:

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.

1-Codigo para el Stack:

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

2-Codigo – Modelo ejemplo para la Card:

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

3. Cree un botón de inicio, agréguelo a su script (el script de objeto)

on mouseUp
startGame
end mouseUp

4. Cree un botón de parada, agréguelo a su script (el script de objeto)

on mouseUp
stopGame
end mouseUp

5. Cree un botón para mover - el botón Player

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

cambiarlo por el nombre que desee.

**Eso es todo. Debería funcionar después de personalizar el código para tu juego.

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

ejecuta un controlador diferente. Descoméntelos uno a la vez cuando agregue el controlador y su

código.

por ejemplo:

si tiene enemigos que se mueven por la pantalla, elimine el comentario de esa línea; elimine los

guiones que se encuentran delante de ella:


moveEnemy

Entonces añada el código de abajo:

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

2. Uso de keysDown() function en lugar de órdenes de arrowKeys

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.

Si su jugador no se mueve eficientemente, es posible que se envíen demasiados mensajes cuando


presione las teclas de dirección. Prueba esto:

cambie todos los "=" por " contains " en el código para mover el Player (hágalo con cada "if
keysdown() =...")

Ejemplo:

Cambie esta forma:


on moveBox
if keysdown() = 65362 then
set the top of the button "box" to the top of the button "box" – 4
------
end moveBox

Por esta forma:

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,

el movimiento de los enemigos, el movimiento del escenario, etc.)

4. También aprovechamos para agregar código para acelerar el juego aprovechando el hardware

acceleration en la línea:

set the acceleratedRendering of this stack to true

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,

Agregue esta línea a su código en el Stack:

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

También podría gustarte